کلیدستان

نسخه‌ی کامل: حل معادله به کمک fsolve (در متلب)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام. من یک معادله رو برای مقادیر مختلف k و T میخوام حل کنم.
این معادله هست: C=s0*normcdf(d1)-K*exp(-mu*(T))*normcdf(d2)
و d1  و d2 هم به ان صورت تعریف شده:
d1=(log(s0/K)+(mu+0.5*(y^2))*T)/y*sqrt(T); d2=d1-y*sqrt(T)
y مجهول معادله هست.
این کد ماست برای حل کردن با fsolve:

  
کد پی‌اچ‌پی:
function F=basicfun(x)
mu=0.0011;
callt=[78.80,78.2,80.4,82.9,89.7;48.80,49.8,53.3,57.7,66.4;28.80,32.7,37.4,43,53.1;20.3,24.8,30.4,36.6,47.2;12.2,18.1,24.3,30.8,41.5;6.5,12.7,19,25.5,36.6;1.3,5.5,10.9,17,27.3;0.35,1.95,5.8,10.8,20.2;0.25,0.45,2,5.1,12.4];
T=[0.00555;0.0889;0.17222;0.3388;0.75];
k=[450,480,500,510,520,530,550,570,600];
s0=526.88;
d1=zeros(1,9);
d2=zeros(1,9);
for 
i=1:9
    
for j=1:5
        d1
(i)=(log(s0/k(i))+(mu+0.5*x^2)*T(j))/(y*sqrt(T(j)));
        
d2(i)=d1(i)-(y*sqrt(T(j)));
    
end
end
F
=s0*normcdf(d1)-k*exp(-mu*T)*normcdf(d2)-callt;
end 


کد پی‌اچ‌پی:
x0=0.7;
 [
x,fval]=fsolve(@basicfun1,x0

اما انگار در تعریف تابع اشکال هست! ممنون میشم راهنمایی کنید. 
سلام.
شما نام تابع را برابر basicfun انتخاب کرده اید، اما بعدا نام basicfun1 فراخوانی شده است :

کد پی‌اچ‌پی:
x0=0.7;
 [
x,fval]=fsolve(@basicfun1,x0

کد را تصحیح می کنیم :

کد پی‌اچ‌پی:
x0=0.7;
 [
x,fval]=fsolve(@basicfun,x0

اما هنوز هم خطا خواهد داد. زیرا مقداری برای متغیر y در کدهای تابع تعریف نشده است. پس مقدار y را در کدهای تابع مشخص کنید.

(۱۳۹۴/۰۳/۱۶, ۰۶:۰۲ ب.ظ)'admin' نوشته: [ -> ]سلام.
شما نام تابع را برابر basicfun انتخاب کرده اید، اما بعدا نام basicfun1 فراخوانی شده است :

کد پی‌اچ‌پی:
x0=0.7;
 [
x,fval]=fsolve(@basicfun1,x0

کد را تصحیح می کنیم :

کد پی‌اچ‌پی:
x0=0.7;
 [
x,fval]=fsolve(@basicfun,x0

اما هنوز هم خطا خواهد داد. زیرا مقداری برای متغیر y در کدهای تابع تعریف نشده است. پس مقدار y را در کدهای تابع مشخص کنید.



 


سلام. ممنون
دارم اشتباه از fsolve استفاده میکنم یعنی؟
y مجهوله و هدف از حل معادله بدست آورن y هست. منظورتون از تعریفش چیه؟
 
فک میکنم قبل از این دستورات باید y رو به عنوان یک متغییر سمبلیک تعریف کنید تا نیاز به مقداردهی اولیه نداشته باشه
بنویسید 
syms y
اگه ممکنه به طور کامل در مورد نحوه استفاده از دستور fsolve توضیح بدین
ممنون میشم
من یک دستگاه معادلات غیرخطی و یک حدس اولیه از جواب دارم ومیخوام از این دستور استفاده کنم
ایا میشه؟
تابعی ندارم !!!!!!!!!!!!