matlab使用萬能函數求解自定義無約束函數的極小值

1 簡介
萬能函數:fminunc
1)自定義的函數寫在一個文件裏面,可以是任意的函數,也允許攜帶參數。
2)重點是把函數封裝到句柄裏面,這樣既可以給函數傳遞參數,也可以指明變量
3)坑:
最坑的地方是你自定義的函數中,作爲函數變量的只能有一個!!!!如果是多元函數的話,那麼這個變量是一個向量!!!比如函數變量爲x1,如果是二元函數的話,你需要用x1(1)和x1(2)來調用函數變量

2 實例
1)寫一個自定義多元函數的文件customFunc.m
注意,多元函數只能有一個變量,該變量爲向量,存儲着每一個變量。

function [result] = customFunc(x,y,r,x1) 
%這裏只有x1是函數變量,其他的都是從主函數中傳遞過來的參數。
result = sum(((x-x1(1)).^2+(y-x1(2)).^2).^(1/2).*r);
end

2)使用
將上面的函數用句柄封裝,同時可以外帶其他參數。

x=[0,8.2,0.5,5.7,0.77,2.87,4.43,2.58,0.72,9.76,3.19,5.55];
y=[0,0.5,4.9,5,6.49,8.76,3.26,9.32,9.96,3.16,7.2,7.88];
r=[600,1000,800,1400,1200,700,600,800,1000,1200,1000,1100];

options=optimoptions('fminunc','Algorithm','quasi-newton','Display','iter');
f=@(x1) customFunc(x,y,r,x1);
[x,fval]=fminunc(f,[0,0],options);%初值必不可少,它告訴了fminunc函數你這個優化是幾維的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章