用雅可比迭代法、高斯-塞德尔迭代法求解线性方程组matlab代码

计算线性方程组Ax=b,利用A=D-L-U,将线性方程组改写为x=Bx+f,用迭代的方法进行计算
以6阶希尔伯特矩阵为例,如果需计算其他矩阵,改一下A,要计算其他阶数,改一下n的值就好

clc
clear
format rat%也可以用format long
n=6
%定义希尔伯特矩阵
H=zeros(n,n);
for i=1:n
    for j=1:n
        H(i,j)=1/(i+j-1);
    end
end
H
%此处可定义不同的矩阵A,向量b
A=H;
b=A*ones(n,1);
x0=zeros(n,1);%初始向量
D=zeros(n,n);
L=zeros(n,n);
U=zeros(n,n);
for i=1:n
    D(i,i)=A(i,i);%定义对角阵
end
D
for i=2:n
    for j=1:i-1
        L(i,j)=-A(i,j);%定义单位下三角阵
    end
end
L
for i=1:n
    for j=i+1:n
        U(i,j)=-A(i,j);
    end
end
U
m=1000;%可根据情况改变m的值
t1=0;
t2=0;
%在计算之前先判断两种迭代方法是否收敛
if max(abs(eig(D^-1*(L+U))))<1
    disp('雅可比迭代法收敛,接下来使用此方法进行求解');
    x1=x0;
    for i=1:m
        x1=D^-1*(L+U)*x1+D^-1*b;
        if(abs(t1-x1)<10^-5)
            sprintf('在经过%d次迭代后,得到收敛解',i)
            break
        end
        t1=x1;
    end
    disp('雅可比迭代法得到的x:');
    disp(x1)
else
    disp('雅可比迭代法不收敛,计算停止')
end
if max(abs(eig((D-L)^-1*U)))<1
    disp('高斯-塞德尔迭代法收敛,接下来使用此方法进行求解');
    x2=x0;
    for i=1:m
        x2=(D-L)^-1*U*x2+(D-L)^-1*b;
        if(abs(t2-x2)<10^-5)
            sprintf('在经过%d次迭代后,得到收敛解',i)
            break
        end
        t2=x2;
    end
    disp('高斯-塞德尔迭代法得到的x:');
    disp(x2)
else
    disp('高斯-塞德尔迭代法不收敛,计算停止')
end
  • 4
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值