日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab程序——修正鲍威尔Powell法

發布時間:2024/8/1 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab程序——修正鲍威尔Powell法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
%函數文件 function y=fun(x1,x2) y=2*x1^2+x2^2-x1*x2; %Powell主程序 clear;clc; x0=[2 2]; xk=x0; ideal_error=10^(-4); actural_error=1; d1=[1 0]; d2=[0 1]; k=1; MaxLoopNum=20; while(actural_error>ideal_error&&MaxLoopNum>k)%沿d1方向進行一維搜索syms a1 x1 x2;xk1=xk+a1*d1;x1=xk1(1);x2=xk1(2);fun1=fun(x1,x2);fxa=diff(fun1,'a1')==0;a1=solve(fxa,'a1');%計算中間點xk1=xk+a1*d1;%沿d2方向進行一維搜索syms a2 x1 x2;xk2=xk1+a2*d2;x1=xk2(1);x2=xk2(2);fun1=fun(x1,x2);fxa=diff(fun1,'a2')==0;a2=solve(fxa,'a2');%計算終點xk2=xk1+a2*d2;%計算映射點x3=2*xk2-xk;%計算實際收斂精度xkerror=eval(x3-xk);actural_error=norm(xkerror);%輸出迭代數據fprintf('第%d次迭代結果如下:\n',k)fprintf('起始點:x%d0=[%f %f]\n',k,xk(1),xk(2))fprintf('中間點:x%d1=[%f %f]\n',k,xk1(1),xk1(2))fprintf('終點:x%d2=[%f %f]\n',k,xk2(1),xk2(2))fprintf('映射點:x%d3=[%f %f]\n',k,x3(1),x3(2))fprintf('第一個步長:a%d1=%f\n',k,a1)fprintf('第二個步長:a%d2=%f\n',k,a2)fprintf('第一個方向:d%d1=[%f %f]\n',k,d1(1),d1(2))fprintf('第二個方向:d%d2=[%f %f]\n',k,d2(1),d2(2))fprintf('實際收斂精度:%f\n',actural_error)%求出起始點,中間點,終點,映射點處的函數值syms x1 x2;fun1=fun(x1,x2);fun1=inline(fun1);f0=feval(fun1,xk(1),xk(2));f1=feval(fun1,xk1(1),xk1(2));f2=feval(fun1,xk2(1),xk2(2));f3=feval(fun1,x3(1),x3(2));%確定函數值下降最多的方向Inc(1)=f0-f1;Inc(2)=f1-f2;[Incm,column]=max(Inc);%判斷是否更換搜索方向F1=f0;F2=f2;F3=f3;temp1=(F1-2*F2+F3)*(F1-F2-Incm)^2;temp2=0.5*Incm*(F1-F3)^2;if(Inc(1)>Inc(2)&&F3<F1&&temp1<temp2) d1=d2;d2=xk2-xk;xk=x3;elseif(Inc(1)<Inc(2)&&F3<F1&&temp1<temp2)d2=xk2-xk;xk=x3;elsexk=xk2;endk=k+1; end

總結

以上是生活随笔為你收集整理的Matlab程序——修正鲍威尔Powell法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。