solve non linear equation

2 visualizaciones (últimos 30 días)
john birt
john birt el 22 de Mzo. de 2012
ok so I have a non linear function that I want to solve for 'x', one equation and one unknown variable 'x'.
I have a function Black_Imp_Vol.m of the variable 'x'.
function F = Black_Imp_Vol(x)
F = exp(-r*t)*(P*normcdf(((log(P/K)+t*x^2/2)/(x*sqrt(t))),0,1)-K*normcdf(((log(P/K)-t*x^2/2)/(x*sqrt(t))),0,1))-C ;
Now my code
clear;
r=0.01;
P=1.4334;
K=1.46;
C=0.0230;
t=0.26;
x0 = 0.3;
options=optimset('Display','iter');
[x,fval] = fsolve(@Black_Imp_Vol,x0,options)
will solve for 'x' using fsolve. Great!
However the above hard codes in the known variables r, P, K, C and t
I want to read the known variables r,P,K,C and t, from a .mat file where there are stored in a matrix 'q' a 150 by 5 matrix, each row hold one set of the known parameters and I want to call this fsolve row by row and compute 'x'.
So I coded this
clear;
load eurofx146_c_a_3.mat;
r=q(:,4);
P=q(:,2);
K=q(:,5);
C=q(:,1);
t=q(:,3);
n=size(q);
N=n(1);
s0 = 0.3;
for i=1:N
x(i) = fsolve(@Black_Imp_Vol,x0);
end
But I get an error
??? Undefined function or variable 'r'.
Error in ==> Black_Imp_Vol at 2
F = exp(-r*t)*(P*normcdf(((log(P/K)+t*x^2/2)/(x*sqrt(t))),0,1)-K*normcdf(((log(P/K)-t*x^2/2)/(x*sqrt(t))),0,1))-C ;
Error in ==> fsolve at 254
fuser = feval(funfcn{3},x,varargin{:});
Error in ==> black2 at 15
x(i) = fsolve(@Black_Imp_Vol,x0);
Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.
anyone have an idea about how I can do this?
NOTE: this is NOT a simultaneous equation, is one equation, one unknown. just repeated for each data row.

Respuesta aceptada

Bjorn Gustavsson
Bjorn Gustavsson el 22 de Mzo. de 2012
I'd change the definition of your function Black_Imp_Vol to:
function F = Black_Imp_Vol(x,r,t,P,K,C)
F = exp(-r*t)*(P*normcdf(((log(P/K)+t*x^2/2)/(x*sqrt(t))),0,1)-K*normcdf(((log(P/K)-t*x^2/2)/(x*sqrt(t))),0,1))-C ;
...and then call fzero in a loop:
for i1=1:N
x(i1) = fsolve(@(x) Black_Imp_Vol(x,r(i1),t(i1),P(i1),K(i1),C(i1)),x0);
end
HTH

Más respuestas (0)

Categorías

Más información sobre MATLAB en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by