高分求解:sor方法解如下线性方程组(matlab)

-4x1+x2+x3+x4=1
x1-4x2+x3+x4=1
x1+x2-4x3+x4=1
x1+x2+x3-4x4=1

一定要能用matlab运行出来的~~谢谢!!

给你写了一个程序
function [x,n]=SOR(A,b,x0,w,eps,M)
if nargin==4
eps= 1.0e-6;
M = 200;
elseif nargin<4
error('参数不够');
return
elseif nargin ==5
M = 200;
end

if(w<=0 || w>=2)
error('参数范围错误');
return;
end

D=diag(diag(A)); %求A的对角矩阵
L=-tril(A,-1); %求A的下三角阵
U=-triu(A,1); %求A的上三角阵
B=inv(D-L*w)*((1-w)*D+w*U);
f=w*inv((D-L*w))*b;
x=B*x0+f;
n=1; %迭代次数

while norm(x-x0)>=eps
x0=x;
x =B*x0+f;
n=n+1;
if(n>=M)
disp('Warning: 迭代次数太多,可能不收敛!');
return;
end
end
一下是调用方法:
A=[-4 1 1 1
1 -4 1 1
1 1 -4 1
1 1 1 -4];
b=[1
1
1
1
];
x0=[0
0
0
0];
w=1.34;
>> [x,n]=SOR(A,b,x0,w)
x =
-1
-1
-1
-1
n =
16
经过16次计算成功
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-14
给你写了一个程序
function
[x,n]=SOR(A,b,x0,w,eps,M)
if
nargin==4
eps=
1.0e-6;
M
=
200;
elseif
nargin<4
error('参数不够');
return
elseif
nargin
==5
M
=
200;
end
if(w<=0
||
w>=2)
error('参数范围错误');
return;
end
D=diag(diag(A));
%求A的对角矩阵
L=-tril(A,-1);
%求A的下三角阵
U=-triu(A,1);
%求A的上三角阵
B=inv(D-L*w)*((1-w)*D+w*U);
f=w*inv((D-L*w))*b;
x=B*x0+f;
n=1;
%迭代次数
while
norm(x-x0)>=eps
x0=x;
x
=B*x0+f;
n=n+1;
if(n>=M)
disp('Warning:
迭代次数太多,可能不收敛!');
return;
end
end
一下是调用方法:
A=[-4
1
1
1
1
-4
1
1
1
1
-4
1
1
1
1
-4];
b=[1
1
1
1
];
x0=[0
0
0
0];
w=1.34;
>>
[x,n]=SOR(A,b,x0,w)
x
=
-1
-1
-1
-1
n
=
16
经过16次计算成功
第2个回答  2009-12-24
A=solve('-4*x1+x2+x3+x4=1','x1-4*x2+x3+x4=1','x1+x2-4*x3+x4=1','x1+x2+x3-4*x4=1');
[A.x1 A.x2 A.x3 A.x4]

>>ans =

[ -1, -1, -1, -1]

可以运行。
相似回答