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..321xxxts 301x

5002x

203x

解:运用单纯形法计算此题,首先把约束条件化成标准形式:

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];