Verfasst am: 08.06.2010, 16:39
Titel: Funktion in while-Schleife defnieren
Hallo,
ich möchte in Matlab in einer while schleife wieder eine Funktion definieren. Die Funktion hängt von den Werten in der while schleife ab und deswegen soll sich die Funktion mit jedem Durchlauf ändern.
Allerdings zeigt mir Matlab immer den Fehler:
Function definition is misplaced or improperly nested.
an. Was wohl daran liegt, dass man keine Funktion in einer while Schleife definieren kann, oder? Weiß jemand wie ich es sonst machen könnte?
%Schritt 3:
function F = Fun(x) for i=1:length(S)
F(i) = S(i) - x(i)*normcdf((log(x(i)/100)+(r+0.5*(sigma)^2))/(sigma*sqrt(T(i))))+ B*exp(-r*T(i))*normcdf((log(x(i)/100)+(r-0.5*(sigma)^2))/(sigma*sqrt(T(i))));
end end
options = optimset('TolFun',1e-8);
x = fsolve(@(x) Fun(x), S, options)
function F = Fun(x,S,sigma,T) for i=1:length(S)
F(i) = S(i) - x(i)*normcdf((log(x(i)/100)+(r+0.5*(sigma)^2))/(sigma*sqrt(T(i))))+ B*exp(-r*T(i))*normcdf((log(x(i)/100)+(r-0.5*(sigma)^2))/(sigma*sqrt(T(i))));
end end
Ich möchte eben verschiedene Funktionen definieren die von x, sigma, T, und S abhängen sollen, wobei ich immer sigma, T und S in die Funktion einfüge und ich dann eine Funktion möchte die von x abhängt. Mit dem Befehl fsolve löse ich dann f(x) nach x auf und berechne mir damit neues sigma und mache das wieder in die funktion f rein, dadurch verändert sie sich und ich löse wieder mit fsolve. Allerdings klappt das bei mir nicht Vielleicht hast du ja noch eine andere Idee?
function F = Fun(x) for i=1:length(S)
F(i) = S(i) - x(i)*normcdf((log(x(i)/100)+(r+0.5*(sigma)^2))/(sigma*sqrt(T(i))))+ B*exp(-r*T(i))*normcdf((log(x(i)/100)+(r-0.5*(sigma)^2))/(sigma*sqrt(T(i))));
end end end
function F = Fun(x,S,sigma,T,B,r) for i=1:length(S)
F(i) = S(i) - x(i)*normcdf((log(x(i)/100)+(r+0.5*(sigma)^2))/(sigma*sqrt(T(i))))+ B*exp(-r*T(i))*normcdf((log(x(i)/100)+(r-0.5*(sigma)^2))/(sigma*sqrt(T(i))));
end
Zuletzt bearbeitet von denny am 08.06.2010, 18:07, insgesamt 2-mal bearbeitet
Christina
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 08.06.2010, 17:51
Titel:
Hallo,
aber das Problem daran ist, dass sich dann der Wert von "sigma" in der Funktion nicht ändert, wenn ich Sie außerhalb der while schleife hinschreibe, oder? Die Funktion soll sich aber mit änderndem sigma auch ändern und das geht ja nur wenn sie in der while schleife steht bzw. ich weiß nicht wie ich das sonst machen kann, dass sich das sigma dort auch ändert?
function F = Fun(x,S,sigma,T,B,r) for i=1:length(S)
F(i) = S(i) - x(i)*normcdf((log(x(i)/100)+(r+0.5*(sigma)^2))/(sigma*sqrt(T(i))))+ B*exp(-r*T(i))*normcdf((log(x(i)/100)+(r-0.5*(sigma)^2))/(sigma*sqrt(T(i))));
end
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
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.