最速下降法MATLAB程序实现.docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最速下降法MATLAB程序实现

function [drag,ddrag]=fxy(a0,s0)%要优化的目标函数%返回值:drag,函数在(a0,s0)点处的值;ddrag,函数在(a0,s0,drag)处的梯度(行向量)%参数:(a0,s0) function d = f(a,s) w = 0.12754*a^1.5 + ( 0.12754^2*a^3 + 4*(4940/s + 45.42) )^0.5; w = w^2*s/4; cl = 2*w / (1506.75*s); cd = 0s + 0* a^0.1 * s^-0.1 + cl^2*a^-1/(pi*0.96); d = w*cd/cl; endddrag = 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; %展弦比Ay=5:0.1:30; %机翼面积S[X,Y]=meshgrid(x,y);dim = size(X);for i=1:dim(1) for j=1:dim(2) [Z(i,j),null]=fxy(X(i,j),Y(i,j)); endend%mesh(X,Y,Z);hold on;[c,h]=contourf(X,Y,Z,10);clabel(c,h);colormap coolxlabel(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);while norm(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; if z1z0 while z1z0 %用进退法确定步长的极值区间 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); end step1 = step0; step0 = step;end 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) ); [z1,dz1] = fxy(

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档