奇异方程组的特解用matlab,如何用Matlab求解方程组 - 计算模拟 - 小木虫 - 学术 科研 互动社区...

发现刚刚给错了,这份才是方程组的,也是百度文库的,sorry!用matlab解线性方程组2008-04-12 17:00一。高斯消去法1.顺序高斯消去法直接编写命令文件a=[]d=[]'[n,n]=size(a);c=n+1a(:,c)=d;for k=1:n-1a(k+1:n, k:c)=a(k+1:n, k:c)-(a(k+1:n,k)/ a(k,k))*a(k, k:c); %消去e...
摘要由CSDN通过智能技术生成

发现刚刚给错了,这份才是方程组的,也是百度文库的,sorry!

用matlab解线性方程组

2008-04-12 17:00

一。高斯消去法

1.顺序高斯消去法

直接编写命令文件

a=[]

d=[]'

[n,n]=size(a);

c=n+1

a(:,c)=d;

for k=1:n-1

a(k+1:n, k:c)=a(k+1:n, k:c)-(a(k+1:n,k)/ a(k,k))*a(k, k:c);     %消去

end

x=[0 0 0 0]'                                                 %回带

x(n)=a(n,c)/a(n,n);

for g=n-1:-1:1

x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g)

end

2.列主高斯消去法

*由于“[r,m]=max(abs(a(k:n,k)))”返回的行是“k:n,k”内的第几行,所以要通过修正来把m 改成真正的行的值。该程序只是演示程序,真正机器计算不需要算主元素所在列以下各行应为零的值。

直接编写命令文件

a=[]

d=[] '

[n,n]=size(a);

c=n+1

a(:,c)=d;                                                   %(增广)

for k=1:n-1

[r,m]=max(abs(a(k:n,k)));                                  %选主

m=m+k-1;                                              %(修正操作行的值)

if(a(m,k)~=0)

if(m~=k)

a([k m],=a([m k],;                                 %换行

end

a(k+1:n, k:c)=a(k+1:n, k:c)-(a(k+1:n,k)/ a(k,k))*a(k, k:c);      %消去

end

end

x=[0 0 0 0]'                                                  %回带

x(n)=a(n,c)/a(n,n);

for g=n-1:-1:1

x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g)

end

3.分别用顺序高斯消去法和列主高斯消去法解方程组a*x=d,并比较结果

a=[0 1 2 3;9 11 23 34;62.5 23.4 15.5 17.2;192.01 124 25.1 59.3] d=[1;1;1;1]

顺序高斯消去法:提示“Warning: Divide by zero.” x =NaN NaN NaN NaN

列主高斯消去法:x =-1.2460 2.8796 5.5206 -4.3069

由此可见列主高斯消去法可以解决顺序高斯消去法所不能解决的问题。

4. 将上述矩阵中的“2”改为2.05,“34”改为“34.6”,“15.5”改为“15.57”,“124”改为“124.7”再用列主高斯消去法计算,与上述结果比较。

x =-0.8081 1.8226 3.5568 -2.7047

很明显虽然系数矩阵只有很小的变化但结果的变化却很大,所以系数矩阵是病态的。

这是因为系数矩阵的条件数很大:cond(a)=2.0695e+003

二。迭代法

J迭代公式

a=[5 2 1;-1 4 2;2 -3 10]

d=[-12;20;3]

x=[0;0;0];                      %初始向量

stop=1.0e-4                     %迭代的精度

L=-tril(a,-1)

U=-triu(a,1)

D=inv(diag(diag(a)))

X=D*(L+U)*x+D*d;             % J迭代公式

n=1;

while norm(X-x,inf)>=stop         % 时迭代中止否则继续

x=X;

X=D*(L+U)*x+D*d;

n=n+1;

end

X

n

G-S迭代公式

a=[5 2 1;-1 4 2;2 -3 10]

x=[0;0;0];                        %初始向量

d=[-12;20;3]

stop=1.0e-4

L=-tril(a,-1)

U=-triu(a,1)

D=(diag(diag(a)))

X=inv(D-L)*U*x+inv(D-L)*d;       % G-S迭代公式

n=1;

while norm(X-x,inf)>= stop          % 时迭代中止否则继续

x=X;

X=inv(D-L)*U*x+inv(D-L)*d;

n=n+1;

end

X

n

SOR迭代公式

a=[5 2 1;-1 4 2;2 -3 10]

x=[0;0;0];                       %初始向量

d=[-12;20;3]

stop=1.0e-4

w=1.44;                         %松弛因子

L=-tril(a,-1)

U=-triu(a,1)

D=(diag(diag(a)))

X=inv(D-w*L)*((1-w)*D+w*U)*x+w*inv(D-w*L)*d   % SOR迭代公式

n=1;

while norm(X-x,inf)>=stop         % 时迭代中止否则继续

x=X;

X=inv(D-w*L)*((1-w)*D+w*U)*x+w*inv(D-w*L)*d;

n=n+1;

end

X

n

3.    a*x=d       a=[5 2 1;-1 4 2;2 -3 10]   d=[-12;20;3]

(1)考察用J、G-S及SOR解此方程组的收敛性.

(2)分别用雅可比迭代法、高斯-赛德尔迭代法及逐次超松弛迭代法解此方程组。要求 时迭代中止,观察收敛速度。

(1)    J迭代矩阵的谱半径:max(abs(eig(D*(L+U))))= 0.506

G-S迭代矩阵的谱半径:max(abs(eig(inv(D-L)*U)))= 0.2000

SOR迭代矩阵的谱半径:max(abs(eig(inv(D-w*L)*((1-w)*D+w*U))))=0.9756

所以用J、G-S及SOR均收敛(且有 )。

(2)

J:                X =-4.0000 3.0000 2.0000        n =18

G-S:                X =-4.0000 3.0000 2.0000        n =8

SOR( ):     X =-4.0000 3.0000 2.0000        n =482

可见高斯-赛德尔迭代法要比雅可比迭代公式的收敛速度快。同时,如果超松弛迭代法的 选取不当不但不会加速收敛还会对收敛速度造成很恶劣的结果。

线性方程组求解

1.直接法

Gauss消元法:

function x=DelGauss(a,b)

% Gauss消去法

[n,m]=size(a);

nb=lengt

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值