MATLAB作业2参考答案(2018)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MATLAB 作业二参考答案

1、试求下面线性代数方程的解析解与数值解,并检验解的正确性。

293

2114010110503848246303356684953X -----⎡⎤⎡⎤

⎢⎥⎢⎥----⎢⎥⎢⎥=⎢⎥⎢⎥---⎢⎥⎢⎥

------⎣⎦⎣⎦

【求解】求出A , [A;B ] 两个矩阵的秩,可见二者相同,所以方程不是矛盾方程,应该有无穷多解。

>> A=[2,-9,3,-2,-1; 10,-1,10,5,0; 8,-2,-4,-6,3; -5,-6,-6,-8,-4]; B=[-1,-4,0; -3,-8,-4; 0,3,3; 9,-5,3]; [rank(A), rank([A B])] ans =

4 4

用下面的语句可以求出方程的解析解,并可以验证该解没有误差。 >> x0=null(sym(A));

x_analytical=sym(A)\B; syms a; x=a*[x0 x0 x0]+x_analytical x =

[ a+967/1535, a-943/1535, a-159/1535] [ -1535/1524*a, -1535/1524*a, -1535/1524*a]

[ -3659/1524*a-1807/1535,-3659/1524*a-257/1535,-3659/1524*a-141/1535] [ 1321/508*a+759/1535, 1321/508*a-56/1535, 1321/508*a-628/1535] [ -170/127*a-694/307, -170/127*a+719/307, -170/127*a+103/307] >> A*x-B ans =

[ 0, 0, 0]

[ 0, 0, 0]

[ 0, 0, 0]

[ 0, 0, 0]

用数值解方法也可以求出方程的解,但会存在误差,且与任意常数a 的值有关。

>> x0=null(A); x_numerical=A\B; syms a;

x=a*[x0 x0 x0]+x_numerical; vpa(x,10)

ans =

[ .2474402553*a+.1396556436, .2474402553*a-.6840666849, .2474402553*a-.1418 420333]

[-.2492262414*a+.4938507789,-.2492262414*a+.7023776988e-1,-.2492262414*a+ .3853511888e-1]

[ -.5940839201*a, -.5940839201*a, -.5940839201*a]

[ .6434420813*a-.7805411315, .6434420813*a-.2178190763,.6434420813*a-.50860 89095]

[-.3312192394*a-1.604263460, -.3312192394*a+2.435364854,

-.3312192394*a+.3867176824]

>> A*x-B

ans =

[ 1/18014398509481984*a, 1/18014398509481984*a, 1/18014398509481984*a] [ -5/4503599627370496*a, -5/4503599627370496*a, -5/4503599627370496*a] [ -25/18014398509481984*a, -25/18014398509481984*a,

-25/18014398509481984*a]

[ 13/18014398509481984*a, 13/18014398509481984*a, 13/18014398509481984*a]

2、求解下面的联立方程,并检验得出的高精度数值解(准解析解)的精度。

2122212

10(2)(0.5)10x x x x ⎧--=⎨-+--=⎩

【求解】给出的方程可以由下面的语句直接求解,经检验可见,精度是相当高的。 >> [x1,x2]=solve('x1^2-x2-1=0','(x1-2)^2+(x2-0.5)^2-1=0','x1,x2') x1 =

-1.3068444845633173592407431426632-1.2136904451605911320167045558746*sqrt(-1)

-1.3068444845633173592407431426632+1.2136904451605911320167045558746*sqrt(-1)

1.0673460858066897134085973128070 1.5463428833199450050728889725194 x2 =

-.76520198984055124633885565606586+3.1722093284506318231178646481143*sqrt(-1)

-.76520198984055124633885565606586-3.1722093284506318231178646481143*sqrt(-1)

.13922766688686144048362498805141 1.3911763127942410521940863240803

>> norm(double([x1.^2-x2-1 (x1-2).^2+(x2-0.5).^2-1])) ans =

6.058152713871457e-031

3、用Jacobi、Gauss-Seidel迭代法求解方程组

123

123

123

10272

10283

542

x x x

x x x

x x x

--=

-+-=

⎪--+=

,给定初值为

(0)(0,0,0)T

x=。

【求解】:编写Jacobi、Gauss-Seidel函数计算,function y=jacobi(a,b,x0)

D=diag(diag(a)); U=-triu(a,1); L=-tril(a,-1);

B=D\(L+U); f=D\b;

y=B*x0+f;

n=1;

while norm(y-x0)>=1.0e-6

x0=y;

y=B*x0+f;

n=n+1;

end

n

>> a=[10,-1,-2;-1,10,-2;-1,-1,5];b=[72;83;42]; >> jacobi(a,b,[0;0;0])

n =

17

ans =

11.0000

12.0000

13.0000

function y=seidel(a,b,x0)

D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1);

G=(D-L)\U ;f=(D-L)\b;

y=G*x0+f; n=1;

while norm(y-x0)>=1.0e-6

x0=y;

y=G*x0+f;

n=n+1;

end

n

相关文档
最新文档