最速下降法MATLAB程序实现Word文档格式.docx

上传人:b****1 文档编号:13094137 上传时间:2022-10-04 格式:DOCX 页数:3 大小:13.49KB
下载 相关 举报
最速下降法MATLAB程序实现Word文档格式.docx_第1页
第1页 / 共3页
最速下降法MATLAB程序实现Word文档格式.docx_第2页
第2页 / 共3页
最速下降法MATLAB程序实现Word文档格式.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

最速下降法MATLAB程序实现Word文档格式.docx

《最速下降法MATLAB程序实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《最速下降法MATLAB程序实现Word文档格式.docx(3页珍藏版)》请在冰豆网上搜索。

最速下降法MATLAB程序实现Word文档格式.docx

ddrag=zeros(1,2);

drag=f(a0,s0);

h=1e-6;

ddrag

(1)=(f(a0+h,s0)-drag)/h;

%函数对a的偏导数

ddrag

(2)=(f(a0,s0+h)-drag)/h;

%函数对s的偏导数

end

%最速下降法

%-------------------------------------------------

clear;

%绘制等高线

x=5:

0.1:

30;

%展弦比A

y=5:

%机翼面积S

[X,Y]=meshgrid(x,y);

dim=size(X);

fori=1:

dim

(1)

forj=1:

dim

(2)

[Z(i,j),null]=fxy(X(i,j),Y(i,j));

%mesh(X,Y,Z);

holdon;

[c,h]=contourf(X,Y,Z,10);

clabel(c,h);

colormapcool

xlabel('

A'

);

ylabel('

S'

eg=1e-6;

%精度要求

ea=1e-6;

er=1e-2;

num=0;

%迭代次数

num1=0;

%确定最优步长迭代的次数

x0=15;

y0=30;

%起始点

[z0,dz0]=fxy(x0,y0);

whilenorm(dz0)>

eg

z00=z0;

x00=x0;

y00=y0;

h=norm(dz0)/1e4;

%初始步长

dz0=dz0/norm(dz0);

%沿梯度方向的单位向量

x1=x0-dz0

(1)*h;

y1=y0-dz0

(2)*h;

[z1,dz1]=fxy(x1,y1);

step0=0;

%[step0,step1],步长极小值区间

step1=step0+h;

step=step0;

ifz1<

z0

whilez1<

z0%用进退法确定步长的极值区间

step=step0;

step0=step1;

z0=z1;

h=2*h;

step1=step1+h;

x1=x0-dz0

(1)*step1;

y1=y0-dz0

(2)*step1;

[z1,dz1]=fxy(x1,y1);

step1=step0;

step0=step;

while(step1-step0)>

eg%黄金分割法求最优步长

x2=x0-dz0

(1)*(step0+0.618*(step1-step0));

y2=y0-dz0

(2)*(step0+0.618*(step1-step0));

[z2,dz2]=fxy(x2,y2);

x1=x0-dz0

(1)*(step0+0.382*(step1-step0));

y1=y0-dz0

(2)*(step0+0.382*(step1-step0));

ifz1>

z2

step0=step0+0.382*(step1-step0);

elseifz1<

step1=step0+0.618*(step1-step0);

else

step0=step0+0.382*(step1-step0);

end

end

num1=num1+1;

step_opt=(step0+step1)/2;

%最优步长

x0=x0-dz0

(1)*step_opt;

y0=y0-dz0

(2)*step_opt;

[z0,dz0]=fxy(x0,y0);

%line([x00,x0],[y00,y0],[z00,z0],'

Color'

'

r'

LineWidth'

2);

line([x00,x0],[y00,y0],'

plot(x0,y0,'

r+'

num=num+1;

ifabs(z0-z00)<

=ea+er*abs(z00)

break;

holdoff;

disp(['

Opt_Piont=('

num2str(x0),'

num2str(y0),'

)'

]);

Opt_Value='

num2str(z0)]);

迭代次数:

'

num2str(num)]);

线性搜索迭代次数:

num2str(num1)]);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1