《数学实验与Matlab》程序(8)

2019-01-12 13:57

%fminsearch 是多变量函数寻优的单纯形法指令,用法和fminunc是类似的。

hold off disp(' ')

disp('Strike any key for menu') pause end

end 】

banplot6_4.m

【function out = banplot6_4(x)

plot(x(1),x(2),'O','Erasemode','none')

drawnow; % Draws current graph now out = []; 】

6.3.2其它的优化算法指令

1.多变量约束优化指令fmincon 2. 线性规划linprog指令

【 f = [-5; -4; -6]; A = [1 -1 1;3 2 4;3 2 0];b = [20; 42; 30];

lb = zeros(3,1); x0=[1,1,0];

options=optimset('Diagnostics','on', 'largescale','off'); %查看诊断信息并采用单纯形算法

[x,fval,exitflag,output,lambda]= ?linprog(f,A,b,[],[],lb,[],x0,options)

%没有等式约束且变量无上界,故需置Aeq=[ ];Aeb=[ ];ub=[ ]; 】

36

3. 二次规划quadprog指令 4. 一元函数寻优fminbnd指令

5.非线性最小二乘指令lsqnonlin和非线性数据拟合指令lsqcurvefit

程序如下(zxy6_5.m) 【

clf;x=1:10;

y=2+2*x; %选直线上的10个点。

a0=[0.1,0.4]; y1=exp(x*a0(1))+exp(x*a0(2)); %计算一条曲线。 [a,resnorm,residual] = lsqnonlin('zxy6_5f',a0); % 求最优解初始点a0。 disp('a='), disp(a);

disp('resnorm='), disp(resnorm) y2=exp(x*a(1))+exp(x*a(1));

plot( -x,y,x,y1,'r:',x,y2,'o-',x,residual,'.-'),grid on legend('

线

','

线

','

线

','

') 】 函数子程序为(zxy6_5f.m) 【 function F = zxy6_5f(a)

x = 1:10;

F = 2 + 2*x-exp(a(1)*x)-exp(a(2)*x); 】 { Optimization terminated successfully:

Norm of the current step is less than OPTIONS.TolX a= 0.2578 0.2578

6.4 应用、思考与练习

6.4.1 .计算最佳水槽断面面积

zxy6_6S.m

【 function s=zxy6_6S(x)

l=24;a(1)=x(3);a(2)=x(4); xs0=(0.5*l-x(1)-x(2)); xs1=xs0+x(1)*cos(a(1)); xs2=xs1+x(2)*cos(a(2));

37

h1=x(1)*cos(a(1)); h2=x(2)*cos(a(2));

s=(xs0+xs1)*h1+(xs1+xs2)*h2;s=-s; 】 zxy6_6.m

【 clf,A=[1,1,0,0;-1,-1,0.0,0.0];b=[12,0]';

lb=[0,0,0,0]';ub=[100,100,pi/2,pi/2]';x0=[4,4,pi/3,pi/3]';

[s,fval] = fmincon('zxy6_6S',x0,A,b,[],[],lb,ub) %最优化计算

%以下是绘制最优断面的图形,首先计算坐标点。将底边放在x轴上,并让断面关于

%y轴对称。逆时针计算坐标点,使之成为一个封闭的图形)

x(1)=(24-2*s(1)-2*s(2))/2; y(1)=0;

x(2)=x(1)+s(1)*cos(s(3)); y(2)=s(1)*sin(s(3));

x(3)=x(2)+s(2)*cos(s(4)); y(3)=y(2)+s(2)*sin(s(4));

x(4)=-x(3); y(4)=y(3);x(5)=-x(2); y(5)=y(2);x(6)=-x(1); y(6)=y(1); x(7)=x(1);y(7)=y(1); %首尾相接。

%plot(x,y),axis equal %用这命令可画出封闭图形。

patch(x,y,'y'); axis equal, %用patch命令画块对象并填充颜色。 】 { s = 4.8000 4.8000 0.6283 1.2566

fval =

-88.6373 }

6.4.2 对约束优化的讨论 6.4.3.工程优化问题的计算

1. 啤酒配方问题: 线性规划 2. 储能飞轮的设计 3. 齿轮减速器设计

实验7.隐函数、方程求根、不动点和迭代

7.1知识要点与背景

38

7.1.1 隐函数存在定理与四连杆机构的运动 7.1.2 不动点和函数迭代

7.2实验 与观察

7.2.1 隐函数的存在定理的可视化

1. 隐函数为什么存在?

【 clf,plot(Y(:,40),z1(:,40),'.-');hold on,xlabel('x'),ylabel('y'),

plot([-5,5],[0,0],'r-'),legend('z=F(x0,y)','z=0'); 】

观察程序zxy7_1.m 【 clear,clf

a=-5;b=5;c=-5;d=5;n=60;u=[15 25 40];

x=linspace(a,b,n);y=linspace(c,d,n);[X,Y]=meshgrid(x,y); z1=Y.^3./(2+0.2*sin(X.*Y))+X.^2-4*X; z2=zeros(size(X)); surf(X,Y,z1),shading flat,hold on, mesh(X,Y,z2),hidden off,

xlabel('x','fontsize',16);ylabel('y','fontsize',16);zlabel('z','fontsize',16); r0=(abs(z1-z2)<=0.7); %处理交线 zz=r0.*z1; yy=r0.*Y; xx=r0.*X;

plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'r.','markersize',12); plot3(X(:,u),Y(:,u),z1(:,u),'b.-','markersize',10); 】

2. 如何决定隐函数-非线性方程的求根

zxy7-2.m

【 global p %说明全局变量p,P用于本程序中和函数子程序

zxy7_2f.m间传递参数

39

m=100;x=linspace(-5,5,m); %确定隐函数自变量的范围

y0=-4.6; %第一个方程的初值 y=[];f=[]; for k=1:m

%开始循环

p=x(k);

%第k个方程的自变量x(k)通过全

局变量p传递到zxy7_2f.m中

[y1,fval,exitflag,output] = fzero('zxy7_2f',y0); %求第k个方程 y0=y1;

%将第k方程的解作为下一个方程的初

y=[y,y1];f=[f,fval]; end

%保存计算结果

%循环结束

plot(x(1:m),y(1:m),'r.-'), %绘制隐函数图形

axis([-5 5 -5 3]),grid on 】 zxy7_2f.m

【 function z=zxy7_2f(y)

global p %在这里也要对应说明全局变量p,使得可以获得外界传递

来的P值

x=p;

z=y.^3/(2+0.2*sin(x*y))+x^2-4*x; %计算函数 】

7.2.2.用蛛网图观察不动点迭代

观察程序: 下面的程序可以绘制这三个函数迭代的蛛网图。 zxy7_3f.m

【%计算问题3中的三个函数,s=1、2、3时分别对应函数f1,f2,f3

function y=zxy7_3f(x,s) if s==1 y=(4-x.*x); elseif s==2 y=4./(1+x); elseif s==3

y=x-(x.^2+x-4)./(2*x+1); end 】

40


《数学实验与Matlab》程序(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:公选课试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: