|
psigh |
Themenstarter

Forum-Century
|
 |
Beiträge: 118
|
 |
|
 |
Anmeldedatum: 16.06.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 14:57
Titel:
|
 |
Wenn ich in mycon mit dem Curser über j fahre kommt die Nachricht:Replace complex i und j by 1i for speed and rubstnuess.
Das verstehe ich überhaupt nicht. Das sind doch ganz simple natürliche Zahlen .
|
|
|
|
|
psigh |
Themenstarter

Forum-Century
|
 |
Beiträge: 118
|
 |
|
 |
Anmeldedatum: 16.06.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 15:00
Titel:
|
 |
Wenn ich in mycon mit dem Curser über j fahre kommt die Nachricht:Replace complex i und j by 1i for speed and rubstnuess.
Das verstehe ich überhaupt nicht. Das sind doch ganz simple natürliche Zahlen .
Also unterm Strich kriege ich einfach nicht gebacken, dass mycon die Parameter übernimmt. Ich hab jetzt auch schon alles versucht...so kommts mir vor.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 15:51
Titel:
|
 |
Hallo,
schnelle Antwort: i und j ist per Default die imaginäre Einheit.
Wenn es nicht überschrieben wird, bleibt es dabei.
Unterfunktionen haben einen getrennten Workspace(Arbeitsbereich). Alle benötigten Variablen müssen also übergeben werden.
Ich kann das später gerne probieren; hilfreich wäre ein *ausführbarer* Beispielaufruf (also kleine Testdaten für j, koschiefe etc.).
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
psigh |
Themenstarter

Forum-Century
|
 |
Beiträge: 118
|
 |
|
 |
Anmeldedatum: 16.06.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 17:08
Titel:
|
 |
|
 |
|
Es wird jetzt sicher kompliziert, aber ich habe mal ein rar file angehnagen.
Der Aufruf würde so aussehen z.B.
Ich würde i=5 nehmen. Dann sieht man wenigstens was. Am fünten Tag sollen 3 Aktien im Portfolio sein. Anvielen anderen TZag nur eine. Da gibt es ja nichts zu optimieren.
datenvektor_bereinigt enthält 16 Tage, für jeden Tag sind Rendite Prognosen, die Kovarianzmatrix der betrachteten Aktien und ein paar andere Dinge eingetragen, die hier nicht gebraucht werden. In der dritten Zelle jedes Arrayeintrages befindet sich die Kovarianzmatrix und in der fünften Zelle sind die Renditen.
Dieser Befehl:
Gibt die Anzahl der Aktien an. Wenn man mal in datenvektor_bereinigt{1,5}{2,1} schaut, sieht man, dass am fünften Tag drei der 15 Aktien in Portfolio sollen. Aktien 2/4/7.
Die Koschiefe übergebe ich auch, aber ich kann sie ja im Moment noch nicht benutzen.
Ineffizienter Weise übergebe ich im Aufruf des Files immer das komplette Array Datenvektor und suche erst in dem mfile aus, was ich davon brauche.
In Dem mfile mark_opt entspricht j einfach der Anzahl der x Variablen, die ich brauche (im Fall i=5 brauche ich drei) und k gibt an, wo ich mich in datenvektor_bereinigt befinde (i=k), damit er weiß, welche Daten er nehmen muss.
Die neuen Sachen, unten, habe ich natürlich auskommentiert, weil sonst ja nichts funktioniert. Es muss wie gesagt nur j=Anzahl der Aktien und die koschiefe Matrix nach unten in diese Subfunktion übergeben werden. Und diese ist dann die nonlcon Bedingung.
Vielen Dank nochmal für die Hilfe.
Ich hoffe, Du kommst damit klar. Ich würde es so mal eben nicht (-:[/code]
Beschreibung: |
|
 Download |
Dateiname: |
Test.rar |
Dateigröße: |
3.08 KB |
Heruntergeladen: |
274 mal |
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 19:24
Titel:
|
 |
Hallo,
hier ein lauffähiger Vorschlag mit minimalen Änderungen und einer, der etwas mehr verändert, meines Erachtens besser aussieht und dieselben Resultate bringt. Allerdings habe ich meine Zweifel, dass dein Problem in der gewünschten Form gelöst wird, weil die Gewichte Unsinn sind.
Insbesondere ist koschiefe ja keine 3D-Matrix, sondern ein "komisches" Cell-Array.
Du solltest vor allem auch versuchen, der Übersichtlichkeit halber deine ganzen Schleifen in Matrix-Vektor-Operationen umzuwandeln.
Grüße,
Harald
Beschreibung: |
|
 Download |
Dateiname: |
mark_opt_besser.m |
Dateigröße: |
1.12 KB |
Heruntergeladen: |
380 mal |
Beschreibung: |
|
 Download |
Dateiname: |
mark_opt.m |
Dateigröße: |
1.01 KB |
Heruntergeladen: |
387 mal |
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
psigh |
Themenstarter

Forum-Century
|
 |
Beiträge: 118
|
 |
|
 |
Anmeldedatum: 16.06.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 19:28
Titel:
|
 |
Warum wird mein Problem nicht gelöst? Also dieses Problem (i=5) kann tatsächlich nicht geköst werden, weil die Renditeprognosen nicht so groß sind, dass das Portfolio die 5% -Hürde knacken könnte. Aber insgesamt funktioniert, meiner Nachrechnungen nach, das Prinzip. Wenn ich mich da natrülich irgendwo vertan habe, was mir bis jetzt wie gesagt noch nicht aufgefallen ist, dann wäre das seeeeehr schlecht.
Ich habe die Koschiefe nur in dieser Form geschrieben, weil ich so sehr gut die Indizies im Auge behalte.
|
|
|
psigh |
Themenstarter

Forum-Century
|
 |
Beiträge: 118
|
 |
|
 |
Anmeldedatum: 16.06.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 19:32
Titel:
|
 |
|
|
psigh |
Themenstarter

Forum-Century
|
 |
Beiträge: 118
|
 |
|
 |
Anmeldedatum: 16.06.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 19:39
Titel:
|
 |
Und noch ein Frage. Was ich schon lange nicht kapiere ist folgendes: Ich sehe z.B. schon ein Ergebnis, bei dem ein Gewicht die Größe 0.001 hat. Das ist doch aber in der Minimierungsfunktion schon gar nicht gestattet. Ich habe doch die lower bounds auf 0.05 gesetzt.
Zuletzt bearbeitet von psigh am 23.02.2011, 19:53, insgesamt einmal bearbeitet
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 19:52
Titel:
|
 |
|
 |
|
Hallo,
Zitat: |
Warum wird mein Problem nicht gelöst? |
Eine Antwort auf deine Frage gibst du ja unmittelbar danach: wenn es keine Lösung gibt, kann auch keine gefunden werden. Die Richtigkeit der Problemstellung und ihrer Umsetzung kann ich nun beim besten Willen nicht überblicken.
Im schlimmsten Fall ist es so, dass die Vorgaben widersprüchlich sind: einfaches Beispiel: Bonds A, B und C haben 2, 3 und 4% Rendite. Konstruiere ein Portfolio daraus, das positive Gewichte hat und 5% Rendite abwirft -> geht nicht. Wenn also Nebenbedingungen verletzt sind, kann das daran liegen.
Am einfachsten wäre es, ein lösbares Problem, bei dem man die annähernde Richtigkeit der Lösung verifizieren kann, als Testproblem zu verwenden.
Wenn du koschiefe als Cell Array haben willst, schön. Dann ist es aber meines Erachtens unsinnig, da mit 3 Indizes hineinzuindizieren.
Zum Link: das sollte sich übersichtlicher umsetzen lassen. Letztlich ist das x'*M*x mit einer geeigneten Matrix M.
Grüße,
Harald
Edit: Zusatzinfo: Du solltest dir auf jeden Fall exitflag ansehen. Wenn exitflag <= 0 ist, heißt das, dass die Ergebnisse mit Vorsicht zu genießen sind - siehe Doku von fmincon.
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
psigh |
Themenstarter

Forum-Century
|
 |
Beiträge: 118
|
 |
|
 |
Anmeldedatum: 16.06.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 20:01
Titel:
|
 |
|
 |
|
Also zuerst einmal: Vielen Dank für die Arbeit, die Du Dir gemacht hast. Das hat mir super geholfen!
Das Beispiel mit den Bonds kann des öfteren vorkommen. Aber was macht der Algo dann? Eigentlich dürfte ja dann gar keine Lösung rauskommen. Oder auch gut wäre, wenn Folgendes passieren würde:
Eine Nebenbedingung ist nicht erfüllbar->dann diese weglassen und nur mit der übrigen arbeiten (Hier Mindestrendite). Wenn die nächste Nebenbedingung auch nicht erfüllbar ist->auch diese weglassen und einfach nur z minimieren. Aber der Punkt ist: Die Bedingungen oben (Grenzen/Summer der Gewichte gleich ein) müssen IMMER eingehalten werden.
Das mit der Koschiefe ist auch etwas neues für mich. Ich habe einfach die Definition umgesetzt, die ich gefunden habe.
Die Kurtosis/CoKortosis Matrix wäre 4-dimensional.
Mein Problem mit fmincon ist einfach folgendes: Es kommt anscheinend immer was raus (-: Ich mache ja Massendaten. Da kann ich nicht immer bei jedem nachgucken, ob das kleinste Gewicht auch wirkich >=0.05 ist usw. Deshalb bin ich jetzt etwas geschockt. Das sollte nicht passieren. Ich habe auch noch zusätzliche Nebenbedingungen, die ich hinzufügen möchte. Und wenn dann einfach kein Portfolio mehr machbar ist, soll eben nur die Varianz minimiert werden.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.02.2011, 21:38
Titel:
|
 |
|
 |
|
Hallo,
dein Vorschlag ist nicht umsetzbar, da ja andererseits alle NB gleich behandelt werden sollten. Man kann also nicht einfach irgendeine weglassen.
Zudem geht man allgemein davon aus, dass der Anwender ein Problem stellt, das auch eine Lösung hat.
Du sollst ja auch nicht von Hand nachsehen.
Beispiel eines Umgangs mit dem Ergebnis:
Natürlich kannst du diese Informationen auch zurückgeben und in irgendeiner Form mit den Ergebnissen speichern. Und du kannst auch so vorgehen, dass du im Falle einer erfolglosen Optimierung einfach eine neue Optimierung anwirfst, in der du (nach deiner [!!] Wahl) Bedingungen weglässt.
Vor allem aber würde ich versuchen nachzuvollziehen, ob die Ergebnisse bei bestimmten Daten auch sinnvoll sind. Ansonsten darfst du dich in deiner Implementierung auf die Fehlersuche machen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
psigh |
Themenstarter

Forum-Century
|
 |
Beiträge: 118
|
 |
|
 |
Anmeldedatum: 16.06.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.02.2011, 14:44
Titel:
|
 |
Vielen Dank für die Antwort. Ich werde veruschen, diese Warnunge da einzubauen. Was ich aber immer noch grundsätzlich nicht verstanden habe ist:
Wenn doch eine oder mehrere Bedingungen nicht erfüllbar sind, wie interpretiere ich denn dann das Ergbniss? Matlab sagt dann ja nicht "Error, Minimierung klappt nicht", sondern es kommt ja was raus. Wie interpretiert man das?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 25.02.2011, 15:20
Titel:
|
 |
Hallo,
fmincon versucht, ein lokales Minimum zu finden, das die NB erfüllt.
Wenn der Algorithmus daran scheitert, wird neben dem letzten Vektor x eine exitflag ausgegeben, die angibt, woran der Algorithmus gescheitert ist.
Man könnte also x als den Punkt interpretieren, an dem fmincon nicht mehr weitergekommen ist. Wenn dieser Punkt (wie in deinem Fall) wichtige Nebenbedingungen nicht erfüllt, kann dieses x auch vollkommen wertlos sein, und es kann heißen, dass du evtl. dein Problem umformulieren oder bestimmte NB weglassen musst - siehe letzter Beitrag.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
|
Gehe zu Seite Zurück 1, 2
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|