线性方程组——Jacobi迭代和G_S迭代

1)方程组Ax=b


用简单迭代法(Jacobi迭代法)和G-S迭代法分别解方程组。精确到小数点后5位,最大迭代次数N=100,说明是否收敛

Jacobi迭代代码如下

Jacobi.m
function [x, k, index]=Jacobi(A, b, ep, it_max)
%求解线性方程组的Jacobi迭代法,其中
%  A ---方程组的系数矩阵
%  b ---方程组的右端项
%  ep ---精度要求。省缺为1e-5
%  it_max ---最大迭代次数,省缺为100
%  x ---方程组的解
%  k ---迭代次数
%  index --- index=1表示迭代收敛到指定要求;
%              index=0表示迭代失败
if nargin <4 it_max=100; end
if nargin <3 ep=1e-5; end
n=length(A); k=0;
x=zeros(n,1); y=zeros(n,1); index=1;
while 1
   for i=1:n       
       y(i)=b(i);
       for j=1:n
           if j~=i
               y(i)=y(i)-A(i,j)*x(j);
           end
       end
       if abs(A(i,i))<1e-10 | k==it_max
           index=0; return;
       end
       y(i)=y(i)/A(i,i);
   end
   if norm(y-x,inf)<ep
       break;
   end
   x=y; k=k+1;
end
G_S迭代代码如下

G_S.m
function [v,sN,vChain]=G_S(A,b,x0,errorBound,maxSp)
%Gauss-Seidel迭代法求解线性方程组
%A-系数矩阵 b-右端向量 x0-初始迭代点 errorBound-近似精度 maxSp-最大迭代次数
%v-近似解 sN-迭代次数 vChain-迭代过程的所有值
step=0;
error=inf;
s=size(A);
D=zeros(s(1));
vChain=zeros(15,3);%最多能记录15次迭代次数
k=1;
fx0=x0;
for i=1:s(1)
   D(i,i)=A(i,i);
end;
L=-tril(A,-1);
U=-triu(A,1);
while error>=errorBound & step<maxSp
x0=inv(D)*(L+U)*x0+inv(D)*b;
vChain(k,:)=x0';
k=k+1;
   error=norm(x0-fx0);
   fx0=x0;
   step=step+1;
end
v=x0;
sN=step;

主函数

clc,clear
A = [1 2 -2
    1 1 1
    2 2 1];
b = [1
    3
    5];
[x k index] = Jacobi(A,b)
x0 = [0
    0
    0];
errorBound = 1e-5;
maxSp = 100;
[aa bb cc] = G_S(A,b,x0,errorBound,maxSp)



(2)方程组Ax=b


这只不过就是把上个问题中的主函数里面的矩阵和向量换成本题向量罢了



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值