MATLAB作业6参考标准答案修Word格式.docx
- 文档编号:17450981
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:9
- 大小:56.52KB
MATLAB作业6参考标准答案修Word格式.docx
《MATLAB作业6参考标准答案修Word格式.docx》由会员分享,可在线阅读,更多相关《MATLAB作业6参考标准答案修Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
z=sin(x.*y);
ii=find(x.^2+y.^2<
=0.5^2);
z(ii)=NaN;
surf(x,y,z)
3、试用图解法求解下面的一元和二元方程,并验证得出的结果。
【求解】①中给出的一元方程可以用曲线表示出来,这些曲线和y=0线的交点即为方程的
解,可以用图形局部放大的方法读出这些交点的x 值,。
在本图中,xi均为方程的解,若放大x轴区域,则可能得出更多的解。
ezplot('
exp(-(x+1)^2+pi/2)*sin(5*x+2)'
②中的二元方程可以由下面的命令用图形的方式显示出来。
>>
ezsurf('(x^2+y^2+x*y)*exp(-x^2-y^2-x*y)')
用下面的语句可以得出等高线。
为了比较起见,还绘制出其他值下的等高线。
等高线值为0 的两条斜线为方程的解。
[x,y]=meshgrid(-3:
0.1:
3);
z=(0.1*x.^2+0.1*y.^2+x.*y).*exp(-x.^2-y.^2-x.*y);
[C,h]=contour(x,y,z,[-0.1:
0.05:
0.1]);
4、用数值求解函数求解习题3中方程的根,并对得出的结果进行检验。
【求解】求解方程求解问题可以采用fsolve()和solve()函数直接求解,这里采用这两个函数分别求取这两个方程的根。
① 可以用下面方法求出一元函数的根,经检验结果较精确。
syms x;
x1=solve('
exp(-(x+1)^2+pi/2)*sin(5*x+2)'
x1=
-2/5
subs('exp(-(x+1)^2+pi/2)*sin(5*x+2)'
,x,x1)
ans =
0
>f=inline('
exp(-(x+1).^2+pi/2).*sin(5*x+2)'
'
x'
);
x2=fsolve(f,0)
x2=
0.22831852178755
subs('
exp(-(x+1)^2+pi/2)*sin(5*x+2)'
x,x2)
ans =
4.7562e-008
x3=fsolve(f,-1)% 选择不同的初值可以得出其他的解
x3=
-1.796
>subs('
exp(-(x+1)^2+pi/2)*sin(5*x+2)',x,x3)
ans=
-5.8864e-016
采用解析解函数solve()能求出精确的解,但只能求出其一个根,如果采用fsolve()函数
则可以让用户自己选择初值,选择不同的初值可能得出不同的结果。
在实际应用时这样的方
法也有其问题,若x大于1,则函数值本身就很小,很容易满足数值解的收敛条件,例如选择x0=4,则由数值解的程序能得出方程解为x0,事实上这样的解不是数学意义下的方程解,但确实能使得该函数的值趋于0。
x4=fsolve(f,4)%选择大的初值得出的解不是严格意义下方程的根
x4=
subs('exp(-(x+1)^2+pi/2)*sin(5*x+2)'
x,x4)
ans =
-5.9913e-013
②可以用下面的语句求解该函数,则可以得出方程的解,代入原方程则可以得出误差,可见误差为0,这样说明得出的解确实满足原方程。
symsx;
y1=solve('
(x^2+y^2+x*y)*exp(-x^2-y^2-x*y)=0','
y'
y1 =
(-1/2+1/2*i*3^(1/2))*x
(-1/2-1/2*i*3^(1/2))*x
y2=simple(subs('(x^2+y^2+x*y)*exp(-x^2-y^2-x*y)'
y1))
y2=
5、试求解下面的无约束最优化问题。
【求解】无约束最优化问题可以由下面的语句直接求解,并得出所需结果。
f=inline(['100*(x
(2)-x(1)^2)^2+(1-x(1))^2+',...
'90*(x(4)-x(3)^2)+(1-x(3)^2)^2+'
...
'
10.1*((x(2)-1)^2+(x(4)-1)^2)+'
...
19.8*(x
(2)-1)*(x(4)-1)'
],'x');
x=fminunc(f,ones(7,1))
x =
1.0e+002 *
0.113
1.11232066767234
0.149
-1.126
0.000
0.000
0.000
6、试用图解法求解下面的非线性规划问题,并用数值求解算法验证结果。
【求解】通过选择适当的区域(当然,这需要在较大范围内先观察一下最优点或可行区域,然后再较确切地选择合适的区域),这样就可以可以绘制出所示的曲面表示,在曲面绘制中先选择整个矩形区域,然后将不满足约束条件的区域剪切掉。
从得出的目标函数曲面看,x=0;
y =1处为全局最小点。
> [x1,x2]=meshgrid(0:
0.02:
1,1:
2);
z=x1.^3+x2.^2+4*x1+4;
ii=find(x1-x2+2<0);
z(ii)=NaN;
ii=find(-x1.^2+x2-1<
0);
z(ii)=NaN;
ii=find(x1<
0);
z(ii)=NaN;
ii=find(x2<
z(ii)=NaN;
surf(x1,x2,z)
下面的语句可以用数值方法求解
function [c,ce]=exc6f4(x)
ce=[];
c=[x
(1)^2-x
(2)+1];
>>f_opt=inline('
x
(1)^3+x
(2)^2+4*x(1)+4','
A=[-11];
B=2;
Aeq=[];
Beq=[];
xm=[0;
0];
x=fmincon(f_opt,[0;
1],A,B,Aeq,Beq,xm,[],'exc6f4'
7、试求解此线性规划问题:
【求解】用下面的语句可以求解出线性规划问题
>f=[0,0,0,0,0,1,1];
Aeq=[1 11100 0;
-21 -1 00 -11;
031 0 101];
Beq=[4;
1;
9];
xm=[0;
0;
0;
0];
A=[];
B=[];
x=linprog(f,A,B,Aeq,Beq,xm)
Optimizationterminatedsuccessfully.
x=
0.39517811869632
2.32126957607183
0.538
0.75263896655277
1.533
0.020
0.008
8、试求解下面的二次型规划问题,并用图示的形式解释结果。
【求解】可以由目标函数写出二次型规划的H和f矩阵为
这样由二次型规划求解函数可以直接解出该最优化问题的解。
H=[4 -4;
-48];
f=[-6-3];
Aeq=[];
Beq=[];
A=[11;
4 1];
B=[3;
9];
x=quadprog(H,f,A,B,Aeq,Beq,xm)
x=
1.950
1.000
9、试求解下面的非线性规划问题。
【求解】可以用下面的语句描述目标函数
function y=exc6fun6(x)
y=exp(x(1))*(4*x
(1)^2+2*x(2)^2+4*x
(1)*x(2)+2*x
(2)+1);
也可以写出约束函数
function[c,ce]=exc6fun6a(x)
c=[x
(1)+x
(2);
x
(1)*x
(2)-x
(1)-x
(2)+1.5;
-10-x(1)*x
(2)];
这时调用非线性最优化问题求解函数可以得出如下结果。
A=[];
B=[];
Aeq=[];
Beq=[];
xm=[-10;
-10];
xM=[10;
10];
x0=(xm+xM)/2;
ff=optimset;
ff.TolX=1e-10;
ff.TolFun=1e-20;
x=fmincon('
exc6fun6'
x0,A,B,Aeq,Beq,xm,xM,'
exc6fun6a',ff)
Maximumnumberof functionevaluationsexceeded;
increaseOPTIONS.MaxFunEvals
0.41947326053910
0.41947326053910
从得出的提示看,该结果并非原问题的解,所以考虑用得出的最优解代入作为初值再求解,
如此可以利用循环,则可以得出原问题的最优解。
i=1;
x=x0;
while
(1)
[x,a,b]=fmincon('
exc6fun6'
,x,A,B,Aeq,Beq,xm,xM,'
exc6fun6a'
ff);
ifb>0,break;
end
i=i+1;
end
x,i%循环次数为5
x =
1.645
-1.73976692398900
i=
5
10、试求解0-1线性规划问题,并用穷举方法检验得出的结果。
【求解】问题可以由下面语句直接求解
f=[57 10 35];
B=[2;
0;
1];
ctype=[1;
1;
-1];
A=[1-151-4;
-2 6-3-22;
0 -22-1 -1];
intlist=[1;
1;
1];
xM=intlist;
xm=zeros(5,1);
[res,b]=ipslv_mex(f,A,B,intlist,xM,xm,ctype);
res'
01100
用下面的语句利用MATLAB 7.0 提供的新函数可以得出如下结果,该结果与前面方法得出的
结果是完全一致的。
f=[57103 5];
B=[-2;
0;
1];
A=[-11-5-14;
2 -632-2;
0-22 -1 -1];
x=bintprog(f,A,B,[],[])'
x =
0110 0
利用穷举法可以验证上面的结果是正确的。
[x1,x2,x3,x4,x5]=ndgrid([0,1]);
i=find((x1-x2+5*x3+x4-4*x5>=2)&
(-2*x1+6*x2-3*x3-2*x4+2*x5>=0)& ...
(-2*x2+2*x3-x4-x5<
=1));
f=5*x1(i)+7*x2(i)+10*x3(i)+3*x4(i)+x5(i);
[fmin,ii]=sort(f);
fmin'
ans=
17202226
index=i(ii
(1));
x=[x1(index),x2(index),x3(index),x4(index),x5(index)]
x=
01100
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 作业 参考 标准答案
![提示](https://static.bdocx.com/images/bang_tan.gif)