MATLAB作业2参考答案(2018)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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