MATLAB作业6参考答案修文档格式.doc
《MATLAB作业6参考答案修文档格式.doc》由会员分享,可在线阅读,更多相关《MATLAB作业6参考答案修文档格式.doc(6页珍藏版)》请在冰豆网上搜索。
![MATLAB作业6参考答案修文档格式.doc](https://file1.bdocx.com/fileroot1/2022-10/7/6b0619bf-aba3-43ab-9294-ad94f9f8c38e/6b0619bf-aba3-43ab-9294-ad94f9f8c38e1.gif)
【求解】给出下面命令可以得出矩形区域的函数值,再找出x2+y2<
=0.5^2区域的坐标,将其函数值设置成NaN,最终得出所示的曲面。
[x,y]=meshgrid(-1:
.1:
1);
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轴区域,则可能得出更多的解。
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()函数直接求解,这里采用这两个函数分别求取这两个方程的根。
①可以用下面方法求出一元函数的根,经检验结果较精确。
symsx;
x1=solve('
x1=
-2/5
subs('
x,x1)
ans=
f=inline('
exp(-(x+1).^2+pi/2).*sin(5*x+2)'
'
x'
x2=fsolve(f,0)
x2=
0.22831852178755
x,x2)
4.750949292642762e-008
x3=fsolve(f,-1)%选择不同的初值可以得出其他的解
x3=
-1.02831853071796
x,x3)
-5.886413288211306e-016
采用解析解函数solve()能求出精确的解,但只能求出其一个根,如果采用fsolve()函数
则可以让用户自己选择初值,选择不同的初值可能得出不同的结果。
在实际应用时这样的方
法也有其问题,若x大于1,则函数值本身就很小,很容易满足数值解的收敛条件,例如选择x0=4,则由数值解的程序能得出方程解为x0,事实上这样的解不是数学意义下的方程解,但确实能使得该函数的值趋于0。
x4=fsolve(f,4)%选择大的初值得出的解不是严格意义下方程的根
x4=
x,x4)
-5.913350831018913e-013
②可以用下面的语句求解该函数,则可以得出方程的解,代入原方程则可以得出误差,可见误差为0,这样说明得出的解确实满足原方程。
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('
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=fminunc(f,ones(7,1))
x=
1.0e+002*
0.10546446798713
1.11232066767234
0.06782323911149
-1.11504746457726
0.01000000000000
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);
ii=find(-x1.^2+x2-1<
ii=find(x1<
ii=find(x2<
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=[1111000;
-21-100-11;
0310101];
Beq=[4;
1;
9];
0;
A=[];
B=[];
x=linprog(f,A,B,Aeq,Beq,xm)
Optimizationterminatedsuccessfully.
0.39517811869632
2.32126957607183
0.53091333867908
0.75263896655277
1.50527793310533
0.00000000000020
0.00000000000008
8、试求解下面的二次型规划问题,并用图示的形式解释结果。
【求解】可以由目标函数写出二次型规划的H和f矩阵为
这样由二次型规划求解函数可以直接解出该最优化问题的解。
H=[4-4;
-48];
f=[-6-3];
Aeq=[];
A=[11;
41];
B=[3;
9];
x=quadprog(H,f,A,B,Aeq,Beq,xm)
1.95000000000000
1.05000000000000
9、试求解下面的非线性规划问题。
【求解】可以用下面的语句描述目标函数
functiony=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)];
这时调用非线性最优化问题求解函数可以得出如下结果。
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)
Maximumnumberoffunctionevaluationsexceeded;
increaseOPTIONS.MaxFunEvals
0.41947326053910
从得出的提示看,该结果并非原问题的解,所以考虑用得出的最优解代入作为初值再求解,
如此可以利用循环,则可以得出原问题的最优解。
i=1;
x=x0;
while
(1)
[x,a,b]=fmincon('
x,A,B,Aeq,Beq,xm,xM,'
ff);
ifb>
0,break;
end
i=i+1;
end
x,i%循环次数为5
1.18249727581645
-1.73976692398900
i=
5
10、试求解0-1线性规划问题,并用穷举方法检验得出的结果。
【求解】问题可以由下面语句直接求解
f=[571035];
B=[2;
0;
1];
ctype=[1;
1;
-1];
A=[1-151-4;
-26-3-22;
0-22-1-1];
intlist=[1;
1];
xM=intlist;
xm=zeros(5,1);
[res,b]=ipslv_mex(f,A,B,intlist,xM,xm,ctype);
res'
01100
用下面的语句利用MATLAB7.0提供的新函数可以得出如下结果,该结果与前面方法得出的
结果是完全一致的。
B=[-2;
A=[-11-5-14;
2-632-2;
x=bintprog(f,A,B,[],[])'