資源簡介
初學(xué)者適用的黃金分割法MATLAB程序,此程序為自定義函數(shù)程序,需要下載者自己寫主函數(shù),特別需要注意的是本程序中含有顯示迭代過程的畫圖程序建議先注釋掉。
代碼片段和文件信息
function?[best_xbest_y]?=?golddiv(yxabepsilon)
%?本函數(shù)實現(xiàn)黃金分割算法
%?y是目標(biāo)函數(shù)?x是自變量?ab為區(qū)間范圍?epsilon為精度
%?best_x為黃金分割算法找到的最優(yōu)點
%?best_y為最優(yōu)點處的函數(shù)值
if?nargin?==?4?????????%如果輸入?yún)?shù)沒有精度要求(輸入只有4個參數(shù))
???epsilon?=?0.001;????%設(shè)置默認(rèn)的epsilon
end
x1?=?b-0.618*(b-a);???%計算插入點1
y1?=?subs(y?x?x1);??%函數(shù)y中的x替換為x1
x2?=?a+0.618*(b-a);???%計算插入點1
y2?=?subs(y?x?x2);??%函數(shù)y中的x替換為x2
n?=?1;
Str=[num2str(n)];
plot(x1y1‘bo‘);
plot(x2y2‘bo‘);
text(x1y1+0.5Str‘fontsize‘12‘color‘‘red‘);
text(x2y2+0.5Str‘fontsize‘12‘color‘‘red‘);
????????
while(abs((b-a)/b)>=epsilon&&abs((y2-y1)/y2)>=epsilon)??
????if?y1 ????????n?=?n?+?1;
????????
????????b?=?x2;???????????%b為新的右邊界
????????x2?=?x1;??????????%更新x2值
????????y2?=?y1;
????????x1?=?b-0.618*(b-a);%更新x1值
???
評論
共有 條評論