Matlab习题及答案
- 格式:pdf
- 大小:324.13 KB
- 文档页数:14
现代计算方法Matlab作业答案
1.绘出函数f(x)=sinxx,在[0,4]上的图形
解:在M文件输入:
x=0:pi/100:4; y=x.*sin(x); plot(y) 运行
2. 求3x+2x +5 = 0的根 解:在命令窗口输入: >> solve('x^3+2*x+5=0') ans = ((108^(1/2)*707^(1/2))/108 - 5/2)^(1/3) - 2/(3*((108^(1/2)*707^(1/2))/108 - 5/2)^(1/3)) 1/(3*((108^(1/2)*707^(1/2))/108 - 5/2)^(1/3)) - ((108^(1/2)*707^(1/2))/108 - 5/2)^(1/3)/2 - (3^(1/2)*i*(2/(3*((108^(1/2)*707^(1/2))/108 - 5/2)^(1/3)) + ((108^(1/2)*707^(1/2))/108 - 5/2)^(1/3)))/2 1/(3*((108^(1/2)*707^(1/2))/108 - 5/2)^(1/3)) - ((108^(1/2)*707^(1/2))/108 - 5/2)^(1/3)/2 + (3^(1/2)*i*(2/(3*((108^(1/2)*707^(1/2))/108 - 5/2)^(1/3)) + ((108^(1/2)*707^(1/2))/108 - 5/2)^(1/3)))/2 3.321436minxxxz
120..321xxxts 301x
5002x
203x
解:运用单纯形法计算此题,首先把约束条件化成标准形式:
0,,,,,205030120
654321635241321
xxxxxxxxxxxxxxx
(1)在M文件输入SimpleMthd函数: function [x,minf] = SimpleMthd(A,c,b,baseVector) sz = size(A); nVia = sz(2); n = sz(1); xx = 1:nVia; nobase = zeros(1,1); m = 1; for i=1:nVia if(isempty(find(baseVector == xx(i),1))) nobase(m) = i; m = m + 1; else ; end end bCon = 1; M = 0; while bCon nB = A(:,nobase); ncb = c(nobase); B = A(:,baseVector); cb = c(baseVector); xb = inv(B)*b; f = cb*xb; w = cb*inv(B); for i=1:length(nobase) sigma(i) = w*nB(:,i)-ncb(i); end [maxs,ind] = max(sigma); if maxs <= 0 minf = cb*xb; vr = find(c~=0 ,1,'last'); for l=1:vr ele = find(baseVector == l,1); if(isempty(ele)) x(l) = 0; else x(l)=xb(ele); end end bCon = 0; else y = inv(B)*A(:,nobase(ind)); if y <= 0 disp('不存在最优解!'); x = NaN; minf = NaN; return; else minb = inf; chagB = 0; for j=1:length(y) if y(j)>0 bz = xb(j)/y(j); if bz
解:使用黄金分割法求解极值:
(1)在M文件输入函数minHJ:
function [x,minf] = minHJ(f,a,b,eps) format long; if nargin == 3 eps = 1.0e-6; end l = a + 0.382*(b-a); u = a + 0.618*(b-a); k=1; tol = b-a; while tol>eps && k<100000 fl = subs(f , findsym(f), l); fu = subs(f , findsym(f), u); if fl > fu a = l; l = u; u = a + 0.618*(b - a); else b = u; u = l; l = a + 0.382*(b-a); end k = k+1; tol = abs(b - a); end if k == 100000 disp('找不到最小值!'); x = NaN; minf = NaN; return; end x = (a+b)/2; minf = subs(f, findsym(f),x); format short; (2)在命令窗口输入:
>> clear all
>> syms x;
>> f=(x^3+cos(x)+x*log(x))/(exp(x));
>> [x,fx]=minHJ(f,0,1)
x =
0.5223
fx =
0.3974
5求解12max z= 5x+8x
12s.t. x +x6
125x +9x45
1212x,x0, x,x为整数
解:运用分支定界法求解此题:
(1)在M文件输入函数IntProgFZ:
function [x,fm] = IntProgFZ(f,A,b,Aeq,beq,lb,ub) x = NaN; fm = NaN; NF_lb = zeros(size(lb)); NF_ub = zeros(size(ub)); NF_lb(:,1) = lb; NF_ub(:,1) = ub; F = inf; while 1 sz = size(NF_lb); k = sz(2); opt = optimset('TolX',1e-9); [xm,fv,exitflag] = linprog(f,A,b,Aeq,beq,NF_lb(:,1),NF_ub(:,1),[],opt); if exitflag == -2 xm = NaN; fv = NaN; end if xm == NaN fv = inf; end if fv ~= inf if fv < F if max(abs(round(xm) - xm))<1.0e-7 F = fv; x = xm; tmpNF_lb = NF_lb(:,2:k); tmpNF_ub = NF_ub(:,2:k); NF_lb = tmpNF_lb; NF_ub = tmpNF_ub; if isempty(NF_lb) == 0 continue; else if x ~= NaN fm = F; return; else disp('不存在最优解!'); x = NaN; fm = NaN; return; end end else lb1 = NF_lb(:,1); ub1 = NF_ub(:,1); tmpNF_lb = NF_lb(:,2:k); tmpNF_ub = NF_ub(:,2:k); NF_lb = tmpNF_lb; NF_ub = tmpNF_ub; [bArr,index] = find(abs((xm - round(xm)))>=1.0e-7); p = bArr(1); new_lb = lb1; new_ub = ub1; new_lb(p) = max(floor(xm(p)) + 1,lb1(p)); new_ub(p) = min(floor(xm(p)),ub1(p)); NF_lb = [NF_lb new_lb lb1]; NF_ub = [NF_ub ub1 new_ub]; continue; end else tmpNF_lb = NF_lb(:,2:k); tmpNF_ub = NF_ub(:,2:k); NF_lb = tmpNF_lb; NF_ub = tmpNF_ub; if isempty(NF_lb) == 0 continue; else if x ~= NaN fm = F; return; else disp('不存在最优解!'); x = NaN; fm = NaN; return; end end end else tmpNF_lb = NF_lb(:,2:k); tmpNF_ub = NF_ub(:,2:k); NF_lb = tmpNF_lb; NF_ub = tmpNF_ub; if isempty(NF_lb) == 0 continue; else if x ~= NaN fm = F; return; else disp('不存在最优解!'); x = NaN; fm = NaN; return; end end end end (2)在命令窗口输入:
>> clear all
>> f=[5;8];A=[1 2;5 9];b=[6;45];
>> [x,fm]=IntProgFZ(f,A,b,[],[],[0;0],[inf;inf])
Optimization terminated.
x =
1.0e-011 *
0.7520
0.0088
fm =
3.8306e-011
6.求解 21212221x6x2xxxx21)x(fmin
sub.to 2xx21 2x2x21 3xx221
21x0,x0
解:在命令窗口输入:
>> clear all
>> H=[1 -1;-1 2];
>> f=[-2;-6];
>> A=[1 1;-1 2;2 1];