线性方程组的迭代解法

文章围绕数值计算展开,介绍了Jacobi迭代、Gauss - Seidel迭代和松弛法三种方法,算法原理可参考金一庆的《数值计算》,作者表示数值计算实验是本学期学起来最轻松的课程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:代码仅供参考

文章目录

  • 前言
  • 一、Jacobi迭代
  • 二、Gauss-Seidel迭代
  • 三、松弛法


前言

  算法原理可参考金一庆的《数值计算》。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Jacobi迭代

tic
t1=clock;
%A=input('请输入系数矩阵A:');
A=[1.5 0.25 -0.3;0.15 1.28 -0.4;-0.54 0.46 1.17]
b=[4 5 6]
x=size(A)
%b=input('请输入常向量b:');
b=b'
if all(diag(A))==1 || x(1)==x(2)
    disp('该矩阵可以使用Jacobi迭代')
else
    disp('该矩阵不能使用Jacobi迭代')
end
%若矩阵可以使用Jacobi迭代法则进行以下迭代计算
d=diag(A).*eye(size(A))
d1=inv(d)
%input('请输入初始向量')
x0=[2.7 4.9 4.4]'
for i=1:20
    x=(eye(size(A))-d1*A)*x0+d1*b
    if normest(x-x0)<eps
        disp('Jacobi迭代收敛,且收敛值为:')
        break
        x0=x
    end
end
x,normest(x-x0)
toc
disp(['toc计算最后一次循环运行时间',num2str(toc)])
disp(['etime程序总运行时间:',num2str(etime(clock,t1))])

二、Gauss-Seidel迭代

tic
t1=clock;
%A=input('请输入系数矩阵A:');
A=[1.5 0.25 -0.3;0.15 1.28 -0.4;-0.54 0.46 1.17]
b=[4 5 6]
x=size(A)
L=tril(A,-1)
U=triu(A,1)
d=diag(A).*eye(size(A))
%b=input('请输入常向量b:');
b=b'
if det(d+L)~=0 || x(1)==x(2)
    disp('该矩阵可以使用Gauss-Seidel迭代')
else
    disp('该矩阵不能使用Gauss-Seidel迭代')
end
%若矩阵可以使用Gauss-Seidel迭代,则进行以下迭代计算
K=inv(d+L)
%input('请输入初始向量')
x0=[2.7 4.9 4.4]'
for i=1:20
    x=-K*U*x0+K*b
    if normest(x-x0)<eps
        disp('Gauss-Seidel迭代收敛,且收敛值为:')
        break
    end
    x0=x
end
x,normest(x-x0)
toc
disp(['toc计算最后一次循环运行时间',num2str(toc)])
disp(['etime程序总运行时间:',num2str(etime(clock,t1))])

三、松弛法 

tic
t1=clock;
%A=input('请输入系数矩阵A:');
A=[4 -1 0;-1 4 -1;0 -1 4]
b=[1 4 -3]
x=size(A)
%b=input('请输入常向量b:');
b=b'
L=tril(A,-1)
U=triu(A,1)
d=diag(A).*eye(size(A))
w=1.1%1.03 1  1.1
H=inv(d+w*L)*((1-w)*d-w*U)
ro=max(eig(H'*H))
if ro<1
    disp('可使用松弛法,且松弛法收敛')
else
    disp('不建议使用松弛法')
end
%判断松弛法是否适用
x0=[0 0 0]'
for i=1:20
    x=H*x0+inv(d+w*L)*w*b
    
    if normest(x-x0)<eps
        disp('松弛法迭代收敛,且收敛值为:')
        break
    end
    x0=x
end
x
toc
disp(['toc计算最后一次循环运行时间',num2str(toc)])
disp(['etime程序总运行时间:',num2str(etime(clock,t1))])

总结

数值计算实验大概是我本学期学起来最轻松的一门课了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡枝子.yue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值