matlab 求解非線性方程 方程組

2021-09-17 21:16:35 字數 2675 閱讀 4508

使用matlab求解非線性規劃

目標函式們 == 0

%create by zhiyang dou

%2019/4/10

%contact:[email protected]

function f = target(d,r,j,b,sigma_j)

f(1)= -j + ((j+d(1))*normcdf((log((j+d(1))./b)+ (r+0.5*d(2)*d(2)))./d(2))-b*exp(-r)*normcdf((log(j+d(1)) + (r+0.5*d(2)*d(2)))./d(2) - d(2)));

f(2)= -sigma_j+(j+d(1))*normcdf((log((j+d(1))./b)+ (r+0.5*d(2)*d(2)))./d(2))*d(2)./j;

(註解版)

%create by zhiyang dou

%2019/4/10

%contact:[email protected]

function f = target(d,r,j,b,sigma_j)%函式需要傳入引數d,r,j,b,sigma_j

f(1)= -j + ((j+d(1))*normcdf((log((j+d(1))./b)+ (r+0.5*d(2)*d(2)))./d(2))-b*exp(-r)*normcdf((log(j+d(1)) + (r+0.5*d(2)*d(2)))./d(2) - d(2)));

f(2)= -sigma_j+(j+d(1))*normcdf((log((j+d(1))./b)+ (r+0.5*d(2)*d(2)))./d(2))*d(2)./j;

%由於是兩個方程,所以f(1) f(2) 對應我們的公式7、9

求解器

%create by zhiyang dou

%2019/4/10

%contact:[email protected]

res_con = zeros(36,6);

a = xlsread('jinrongbumen.xlsx', 'sheet1', 'a3:e38');

[m,n] = size(a);

for i = 1:m

options=optimset('display','off');

j = a(i,1);

r = a(i,3);

b = a(i,2);

sigma_j = a(i,4);

[d]=fsolve(@(d)target(d,r,j,b,sigma_j),[1;0.7]',options) %求解器

res_con(i,1) = d(1); %第一列是d

res_con(i,2) = d(2); %sigma_a

res_con(i,3) = sigma_j * j /( d(2)*normcdf((log((j+d(1))./b)+ (r+0.5*d(2)*d(2)))./d(2)) ); %a

res_con(i,4) = (log((j+d(1))./b)+ (r+0.5*d(2)*d(2)))./d(2); %d_1

res_con(i,5) = res_con(i,4) - d(2); %d_2

res_con(i,6) = normcdf(res_con(i,5)); %n(-d_2)

endxlswrite('/users/frankdura/downloads/res.xls', res_con); %結果儲存到csv或者excel

(註解版)

%create by zhiyang dou

%2019/4/10

%contact:[email protected]

res_con = zeros(36,6); %初始化結果儲存區

a = xlsread('jinrongbumen.xlsx', 'sheet1', 'a3:e38'); %讀取相關的excel檔案

[m,n] = size(a);%獲取行列數

for i = 1:m %按照行進行遍歷

options=optimset('display','off');

j = a(i,2); %獲得第i行第2列資料

r = a(i,4);

b = a(i,3);

sigma_j = a(i,5);

[d]=fsolve(@(d)target(d,r,j,b,sigma_j),[1;0.7]',options) %求解器

res_con(i,1) = d(1); %第一列是d

res_con(i,2) = d(2); %sigma_a

res_con(i,3) = sigma_j * j /( d(2)*normcdf((log((j+d(1))./b)+ (r+0.5*d(2)*d(2)))./d(2)) ); %a

res_con(i,4) = (log((j+d(1))./b)+ (r+0.5*d(2)*d(2)))./d(2); %d_1

res_con(i,5) = res_con(i,4) - d(2); %d_2

res_con(i,6) = normcdf(res_con(i,5)); %n(-d_2)

endxlswrite('/users/frankdura/downloads/res.xls', res_con); %結果儲存到csv或者excel

使用matlab求解線性 非線性方程

使用matlab求解線性方程 ax b 形式 a b為矩陣 1 a為非奇異矩陣時,既有唯一解時 共有三種方法求解 example clear all a 3 9 2 4 b 42 2 three methods x inv a b good x a b better x linsolve a,b b...

fsolve函式求解非線性方程

對於非線性方程組f x 0,用fsolve函式求其數值解。fsolve函式的呼叫格式為 x fsolve fun x0,option 其中x為返回的解,fun是用於定義需求解的非線性方程組的函式檔名,x0是求根過程的初值,option為最優化工具箱的選項設定。最優化工具箱提供了20多個選項,使用者可...

(matlab系列)非線性方程求根

非線性方程在5次以上的時候沒有求根公式 根據高等代數的阿貝爾群的概念得知 所以直接求解比較麻煩,需要借助解析幾何的工具,結合圖形採用特殊的方法求解 逼近法。主要有二分法 迭代法 包括牛頓迭代和割線法 逼近法的本質就是先給乙個估計值 近似值 作為方程解,然後對這個估計值一步一步地修正,使得它越來越像真...