数值分析-线性方程组的迭代解法

迭代法

对于AX = b

可将方程组进行改写

得到X = BX + f

迭代法就是通过设定初值X0

然后通过Xk+1 = BXk + f不断迭代

迭代一定次数后,Xn 可近似的看做方程组的解

迭代法的收敛性

  设X*为方程组的准确解

  εk = || X - X* ||

  可以看到εk+1 = B * εk

  迭代法收敛的充要条件是B的谱半径<1

  B的谱半径为B最小的那个特征值

收敛阶

  收敛阶就是收敛速度

  平均收敛速度为-ln || Bk ||1/k

  渐进收敛速度为 R(B) = -ln (ρ(B))

  ρ(B)表示B的谱半径

  

  若要求|| εk || / || ε0 || <= σ

  那么k >= -ln(σ) / R(B)

不同的收敛法就是获取B的方式有所不同

雅克比迭代法

  将矩阵A分为

  D:对角线上的元素

  L:对角线之下的元素的相反数

  U:对角线之上的元素的相反数

  A = D - L - U

  

  DXk+1 = (L + U)Xk + b

高斯-赛德尔迭代法

  (D-L)Xk+1 = UX+ b

  高斯赛德尔迭代法是雅克比迭代法的一种改进

  减少了计算量

原文地址:https://www.cnblogs.com/shensobaolibin/p/10204862.html

时间: 2024-07-29 15:48:43

数值分析-线性方程组的迭代解法的相关文章

线性方程组的迭代解法数值结果分析

纸上得来终觉浅,绝知此事要躬行. ----(宋)陆游 在使用有限差分法的五点格式求解偏微分方程组时,把问题转化为求解数量级从10直到为10^4个未知数的稀疏矩阵的线性方程组,然后使用了Jocobi迭代,G-S迭代,SOR迭代以及CG迭代求解. 不管从程序的运行时间还是结果精度来看,SOR迭代和CG迭代较另外两种迭代法占优,而数值结果显示SOR迭代和CG迭代的收敛速度基本相当(后者稍微占优一点儿),这和理论的推导结果吻合地很好. 从程序使用的内存空间考虑的话,问题变得复杂了.简言之,CG方法依旧胜

线性方程组的迭代解法

简介 求解线性方程组有直接解法和迭代解法两种方法.与直接解法相比,迭代解法能够比较好地保持系数矩阵的稀疏性,在大型线性方程组的求解问题中得到了广泛应用. 比较典型的迭代算法有三种,古典迭代法.共轭梯度法和广义极小剩余(GMRES)法. 古典迭代法从系数矩阵构造(分裂)出单步迭代格式,具有算法简单的优点,但是不易收敛,速度较慢. 共轭梯度法是一种多步算法.首先利用对称正定的系数矩阵,将方程组的求解问题转换成等价的优化问题,零点解向量变成极点解向量.其次以迭代点.剩余向量和搜索方向构造迭代格式.可以

线性方程组的迭代解法——共轭梯度法

1.代码 %%共轭梯度法(用于求解正定对称方程组) %%线性方程组M*X = b,M是方阵,X0是初始解向量,epsilon是控制精度 function CGM = Conjugate_gradient_method(M,b,X0,epsilon) m = size(M);up = 1000;e = floor(abs(log(epsilon))); X(:,1) = X0; r(:,1) = b-M*X0;p(:,1) = r(:,1); for k = 1:up alpha = Inner_

线性方程组的迭代解法——最速下降法

1.代码 %%最速下降法(用于求解正定对称方程组) %%线性方程组M*X = b,M是方阵,X0是初始解向量,epsilon是控制精度 function TSDM = The_steepest_descent_method(M,b,X0,epsilon) m = size(M);up = 1000;e = floor(abs(log(epsilon))); X(:,1) = X0; r(:,1) = b-M*X0; for k = 1:up alpha = Inner_product(r(:,k

线性方程组的迭代解法——超松弛迭代法

1.代码 %%超松弛迭代法(此方法适用于大型稀疏矩阵但不适合与病态方程的解 %%线性方程组M*X = b,M是方阵,X0是初始解向量,epsilon是控制精度,omiga是松弛因子 function OIM = Overrelaxation_iterative_method(M,b,X0,epsilon) [m,n] = size(M); d = diag(M);L = zeros(m,n);U = zeros(m,n);D = zeros(m,n);eps = floor(abs(log(ep

线性方程组的迭代解法——雅可比迭代法

1.代码 %%雅可比迭代法(此迭代法对于病态矩阵的解不理想) %%线性方程组M*X = b,M是方阵,X0是初始解向量,epsilon是控制精度 function JIM = Jacobian_iteration_method(M,b,X0,epsilon) [m,n] = size(M); d = diag(M);L = zeros(m,n);U = zeros(m,n);D = zeros(m,n); delta = 0;ub = 100;X = zeros(m,ub);X(:,1) = X

线性方程组的迭代解法——高斯-塞得勒迭代法

1.代码 %%高斯-塞得勒迭代法 %%线性方程组M*X = b,M是方阵,X0是初始解向量,epsilon是控制精度 function GSIM = Gauss_Seidel_iterative_method(M,b,X0,epsilon) [m,n] = size(M); d = diag(M); L = zeros(m,n); U = zeros(m,n); D = zeros(m,n); ub = 100;X = zeros(m,ub);X(:,1) = X0;X_delta = X;X_

汉若塔问题的迭代解法

先看递归解法,用Perl语言一分钟不到就写完了. sub hanno_recursive { my ($from, $to, $reserve, $n) =  @_; if (1 == $n) { print "move $n from $from to $to\n"; return; } hanno_recursive($from, $reserve, $to, $n -1); print "move $n from $from to $to\n"; hanno_

[LeetCode系列]爬梯问题的递归解法转换为迭代解法

有一个n阶的梯子, 你每次只能爬1阶或2阶, 请问共有多少种登顶的爬法?(正好爬完n阶, 不能多也不能少) 本题最优解是直接套用菲波那切数列即可(因为菲波那切数列的第n个元素正好等于第n-1个元素和第n-2个元素的和, 与本题的要求完全相同). 递归解法: 1 int climbStairs(int n) { 2 if (n < 3) return n; 3 return climbStairs(n-1) + climbStairs(n-2); 4 } 思路很清晰, 递归到当前阶数小于3阶时返回