WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Ausdehnen auf mehrere Preise

 

Pythagoras79
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2010, 01:16     Titel: Ausdehnen auf mehrere Preise
  Antworten mit Zitat      
Hallo,
hab folgenden Code:
Code:

S=1000;X=1000;U=1500;L=500;T=0.5;t=0;r=0.05;q=0;sigma=0.2;

format long
i=20;    
j=20;    

A=zeros(i,j);

for m_eins=1:i;
f_m_eins_diff=(m_eins.^2.*sigma.^2.*(T-t))./((log(U./S)).^2);

for m_zwei=1:j;
f_m_zwei_diff=(m_zwei.^2.*sigma.^2.*(T-t))./((log(L./S)).^2);

A(m_eins,m_zwei)=f_m_eins_diff-f_m_zwei_diff;

end
end

erg=abs(A);

[m_eins, m_zwei]=find(erg<3);

f_m_eins=(m_eins.^2.*sigma.^2.*(T-t))./((log(U./S)).^2);
f_m_zwei=(m_zwei.^2.*sigma.^2.*(T-t))./((log(L./S)).^2);
n=floor(min(f_m_eins,f_m_zwei));

[M]=[m_eins,m_zwei,n];
mm=M(end,:);

m1=mm(1);
m2=mm(2);
n=mm(3);

delta_t=(T-t)/n;
d=exp(-sigma*delta_t^0.5);
u=1/d;
a=ceil(log(L/(S*d^n))/(log(u/d)));
b=floor(log(U/(S*d^n))/(log(u/d)));
p=(exp(r*delta_t)-d)/(u-d);
q=1-p;
m=m1+m2;
DKOUTSUM=0;
for j=a:b
    B(1)=chooser_imp(n,j-m1);
    A(1)=chooser_imp(n,j+m2);
for i=1:ceil(n/m)
        B(2*i)=chooser_imp(n,j+i*m);
        A(2*i)=chooser_imp(n,j-i*m);
        B(2*i+1)=chooser_imp(n,j-i*m-m1);
        A(2*i+1)=chooser_imp(n,j+i*m+m2);
end
Nt=0;
for i=1:ceil(n/m)
Nt=Nt+(-1)^(i+1)*(A(i)+B(i));
end
Nnt=chooser_imp(n,j)-Nt;
DKOUT=Nnt*p^j*q^(n-j)*max(S*u^j*d^(n-j)-X,0);
DKOUTSUM=DKOUTSUM+DKOUT;
end
DKOUTfinal=exp(-r*(T-t))*DKOUTSUM

ich würde jetzt ganz gerne anhand von veränderungen von i und j (ansteigend bis 40) mir die resultate ausgeben lassen. Die Matrix A zu Beginn kann ruhig quadratisch bleiben, also i und j gemeinsam steigen. Eine einfache for Schleife funktioniert irgendwie nicht.
Das Programm erstellt eine Differenzenmatrix und berechnet aus der kleinsten Differenz einen Preis. Wenn ich die Differenzenmatrix ausweite (über i und j) kommt eventuell eine kleinere Differenz hinzu und die Preisgüte ändert sich. Aber wie verändere ich i und j am anfang um die Preise hinterher aufgelistet zu bekommen?
Ziemlich komplex ich weiß ...
Kann trotzdem jemand helfen?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2010, 10:37     Titel:
  Antworten mit Zitat      
Hallo,

Rückfragen:
- warum funktioniert die for-Schleife nicht?
- was sind die Resultate, die du für i-j - Kombinationen speichern willst?

Grüße,
Harald

P.S.: i und j stehen für die komplexe Einheit sqrt(-1) und sollten nur dafür verwendet werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2010, 11:00     Titel: Antwort Rückfragen
  Antworten mit Zitat      
Die for Schleife hat nicht funktioniert, weil Matlab an der Stelle [M] bzw. mm gemeckert hat. Dimensions! Da müsste ich vielleicht noch einen Index einfügen.
DKOUTfinal soll gespeichert werden. Das bedeutet jede Matrix Kombination oben soll zu einem DKOUTfinal Preis führen. Teilweise können das auch dieselben sein, wenn für eine Matrix Erweiterung oben kein neuer niedrigerer Differenzwert raus kommt.
Könnten Sie mir vielleicht einen ersten Anstoß schicken? Bin grad echt bissle verzweifelt.
Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2010, 11:17     Titel:
  Antworten mit Zitat      
Hallo,

ich kann das leider nicht testen, da ich chooser_imp nicht habe.
Ansonsten müsste es gehen. Geändert wurden nur die oberen Zeilen und die letzten drei.
Schau dir vielleicht noch die orange unterringelten Stellen an, dort sollte wenn möglich vorbelegt werden.

Code:
S=1000;X=1000;U=1500;L=500;T=0.5;t=0;r=0.05;q=0;sigma=0.2;

format long
allI = 5:5:40;
allJ = 5:5:40;
for ind_i= 1:length(allI)
    for ind_j= 1:length(allJ)
        i = allI(ind_i);
        j = allJ(ind_j);
        % i = 20;
        % j = 20;
       
        A=zeros(i,j);
       
        for m_eins=1:i;
            f_m_eins_diff=(m_eins.^2.*sigma.^2.*(T-t))./((log(U./S)).^2);
           
            for m_zwei=1:j;
                f_m_zwei_diff=(m_zwei.^2.*sigma.^2.*(T-t))./((log(L./S)).^2);
               
                A(m_eins,m_zwei)=f_m_eins_diff-f_m_zwei_diff;
               
            end
        end
       
        erg=abs(A);
       
        [m_eins, m_zwei]=find(erg<3);
       
        f_m_eins=(m_eins.^2.*sigma.^2.*(T-t))./((log(U./S)).^2);
        f_m_zwei=(m_zwei.^2.*sigma.^2.*(T-t))./((log(L./S)).^2);
        n=floor(min(f_m_eins,f_m_zwei));
       
        [M]=[m_eins,m_zwei,n];
        mm=M(end,:);
       
        m1=mm(1);
        m2=mm(2);
        n=mm(3);
       
        delta_t=(T-t)/n;
        d=exp(-sigma*delta_t^0.5);
        u=1/d;
        a=ceil(log(L/(S*d^n))/(log(u/d)));
        b=floor(log(U/(S*d^n))/(log(u/d)));
        p=(exp(r*delta_t)-d)/(u-d);
        q=1-p;
        m=m1+m2;
        DKOUTSUM=0;
        for j=a:b
            B(1)=chooser_imp(n,j-m1);
            A(1)=chooser_imp(n,j+m2);
            for i=1:ceil(n/m)
                B(2*i)=chooser_imp(n,j+i*m);
                A(2*i)=chooser_imp(n,j-i*m);
                B(2*i+1)=chooser_imp(n,j-i*m-m1);
                A(2*i+1)=chooser_imp(n,j+i*m+m2);
            end
            Nt=0;
            for i=1:ceil(n/m)
                Nt=Nt+(-1)^(i+1)*(A(i)+B(i));
            end
            Nnt=chooser_imp(n,j)-Nt;
            DKOUT=Nnt*p^j*q^(n-j)*max(S*u^j*d^(n-j)-X,0);
            DKOUTSUM=DKOUTSUM+DKOUT;
        end
        DKOUTfinal(ind_i, ind_j)=exp(-r*(T-t))*DKOUTSUM;
    end
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2010, 13:14     Titel: Genial
  Antworten mit Zitat      
Hi Harald, super. Sieht sehr gut aus.

Jetzt muss das ganze noch in eine Funktion und am Ende sollte für jeden Wert n den wir ermittelt haben der passende Preis ausgegeben werden.

Denn in einem weiteren Schaubild müssen für identische n die mit diesen Code ermittelten Preise mit zwei anderen Modellen verglichen werden...

Ich bin jetzt auch wieder dran!
Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2010, 14:25     Titel:
  Antworten mit Zitat      
Ok, rühr dich bei weiteren Problemen. Falls es nicht direkt hiermit zu tun hat, vielleicht am besten in einem neuen Thread.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.