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