【数值分析】解线性方程组的迭代法(雅可比迭代法)

前言

在计算大型稀疏矩阵方程组时,利用迭代法往往比较合适
本文将介绍雅可比迭代法及对应matlab代码

迭代公式

对线性方程 A x = b Ax=b Ax=b,有雅可比迭代公式:
{ x ( 0 ) = ( x 1 ( 0 ) , x 2 ( 0 ) , ⋯   , x n ( 0 ) ) T , x i ( k + 1 ) = ( b i − ∑ j = 1 , j ≠ i n a i j x j ( k ) ) / a i i , i = 1 , 2 , ⋯   , n ; k = 0 , 1 , ⋯ 迭 代 次 数 . \left \{ \begin{array}{c} x^{(0)}=(x_1^{(0)},x_2^{(0)},\cdots ,x_n^{(0)})^T,\\ x_i^{(k+1)}=(b_i-\sum_{j=1,j\neq i}^na_{ij}x_j^{(k)})/a_{ii},\\ i=1,2,\cdots ,n;k=0,1,\cdots 迭代次数. \end{array} \right. x(0)=(x1(0),x2(0),,xn(0))T,xik+1)=(bij=1,j=inaijxj(k))/aii,i=1,2,,n;k=0,1,.

代码

main.m

clear;clc

%% input
A=input('A=');
b=input('b=');
x=input('x0=');
k=input('k=');
n=size(A,1);

%% x(k+1)
for m=0:k
    for i=1:n
        x(i)=(b(i)-f_sum(A,x,i,n))./A(i,i);
    end
end

%% output
x

f_sum.m

function sum=f_sum(A,x,i,n)
sum=0;
for j=1:n
    if j~=i
        sum=sum+A(i,j)*x(j);
    end
end

仓库地址

本文涉及代码已上传GitHub
仓库地址

你可能感兴趣的:(线性代数,数学,matlab,matlab,线性代数)