高等数值计算方法学习笔记第6章【解线性代数方程组的迭代方法(高维稀疏矩阵)】


本章将介绍迭代法的一般理论及雅可比迭代法、高斯—塞德尔迭代法、超松弛迭代法,研究它们的收敛性。

一、引言

在这里插入图片描述

即Ax=b 其中A为非奇异矩阵,当A为低维稠密矩阵时,线性方程组用直接法(如高斯消去法和三角分解法)是有效的,但对于由工程技术中产生的大型稀疏矩阵方程组(A的维数n很大,但零元素较多),利用迭代法求解是适合的。在计算机内存和运算两方面,迭代通常都可利用A中有大量零元素的特点。

1.例题(说明迭代法的收敛性研究的重要性)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.定义(迭代法,迭代法收敛)&解误差

在这里插入图片描述
在这里插入图片描述
此处的解误差(Solution error)是有x的,但是一般情况下高维矩阵的准确解x是很难有的,注意区分后面的残差(residual error)
在这里插入图片描述

二、基本迭代法

在这里插入图片描述
推导就是将A=M-N带入就行,M为对角矩阵。

1.雅可比迭代法

在这里插入图片描述
在这里插入图片描述

2.高斯—塞德尔迭代法( Gauss-Seidel迭代法)

在这里插入图片描述
在这里插入图片描述

3.例题以及需要注意的问题

在这里插入图片描述
迭代了7次就结束了说明性能好!Jacobi需要迭代10次
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.逐次超松驰(Successive Over-Relaxation )迭代法&残差

逐次超松弛迭代(Successive Over-Relaxation, SOR), 简称SOR方法是G-S迭代法的一种加速方法,是解大型稀疏矩阵方程组的有效方法之一,它有着较为广泛的应用。
在这里插入图片描述
在这里插入图片描述

5.例题(松弛因子的选择)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、迭代法的收敛性

1.一阶线性定常迭代法的基本定理(2定义,5定理,3例题)

在这里插入图片描述
在这里插入图片描述
其中对k用了洛必达法则
在这里插入图片描述
谱半径是绝对值最大的特征值的绝对值。
在这里插入图片描述
推论如下:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
解误差:||x*-x(k)||
解间差:||xk-x(k-1)||
残差:||Axk-b||

在这里插入图片描述
||B||<1可以推出收敛,但是收敛时||B||<1不一定成立

2.某些特殊方程组的迭代收敛性(1定义,3定理)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、知识结构图

在这里插入图片描述

五、作业以及代码(附MATLAB安装方法)

在这里插入图片描述
在这里插入图片描述

函数SOR_iteration;

%超松弛(SOR)迭代法,计算线性方程组的解
function [x,k] = SOR_iteration(A,b,x0,w,tol)
% tol为输入误差容限,x0为迭代初始值

% 默认最多迭代300次,超出300次会给出警示
max = 300;

if(w<=0||w>=2)
    % MATLAB中error语句用于报错跳出,并可以给出相应提示
    error('错啦!w的值不符合要求');
    return;
end

%  取出X矩阵的对角元,然后构建一个以X对角元为对角的对角矩阵
D = diag(diag(A));

% 求A的下三角矩阵,对角线元素为0,再每个矩阵元素取负号
L = -tril(A,-1);

% 求A的上三角矩阵,对角线元素为0,再每个矩阵元素取负号
U = -triu(A,1);

% 在MATLAB中inv是求矩阵的逆矩阵的意思,同\具有一样的功能
B = inv(D-L*w)*((1-w)*D+w*U);
f = w*inv((D-L*w))*b;
x = B*x0+f;
k = 1;%迭代次数
xx = [0.5,1,-0.5]';
% norm表示无穷范数
while norm(xx-x)>=tol
    x = B*x+f;
    k = k+1;
    if(k>=max)
        disp('迭代次数超过',max1,'次,方程组可能不收敛');
        return;
    end
    if(norm(xx-x)<tol)
        [k,x']
    end
end

在命令行中输入如下命令:

A = [4,-1,0;-1,4,-1;0,-1,4];
% 注意必须加'表示转置
b = [1,4,-3]';
x0 = [0,0,0]';
[x,k] = SOR_iteration(A,b,x0,1.03,5*1e-6)

A = [4,-1,0;-1,4,-1;0,-1,4];
% 注意必须加'表示转置
b = [1,4,-3]';
x0 = [0,0,0]';
[x,k] = SOR_iteration(A,b,x0,1,5*1e-6)

A = [4,-1,0;-1,4,-1;0,-1,4];
% 注意必须加'表示转置
b = [1,4,-3]';
x0 = [0,0,0]';
[x,k] = SOR_iteration(A,b,x0,1.1,5*1e-6)

MATLAB的安装方法点击链接:MATLAB的安装方法

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MATLAB是一种功能十分强大的科学计算软件,可以实现多种数值计算方法决数学问题。在多元非线性方程组数值中,MATLAB提供的数值迭代方法是一种常用的方法。 数值迭代方法是一种逐步逼近的数值方法,其基本思想是从一个近似开始,通过迭代计算,逐步逼近真正的。在MATLAB中,数值迭代的方法可以使用循环结构进行实现。对于多元非线性方程组,可以采用牛顿-拉夫逊方法或者弦截法等经典的数值迭代方法。 在使用MATLAB进行多元非线性方程组数值迭代求时,需要进行以下步骤: 1. 设定初值:根据方程组的特点,选取一个初值作为迭代的起点。 2. 确定迭代公式:根据选定的数值迭代方法,确定迭代公式,并进行程序编写。 3. 判断收敛性:在每次迭代后,需要对求得的近似进行收敛性判断,如果满足一定的条件,则停止迭代。否则,继续迭代。 4. 输出结果:当迭代过程结束后,输出求结果和迭代次数,以及其他相关的信息。 需要注意的是,在进行多元非线性方程组数值迭代求时,选取的初值很重要,一般需要多次尝试才能找到一个较为合适的初值。另外,不同的数值迭代方法可能需要不同的收敛性判断条件,也需要进行相应的调整。 总之,MATLAB提供了丰富的数值计算工具和函数库,可以方便地进行多元非线性方程组数值迭代求。但是,需要根据实际问题的特点和需求进行程序的选择和调整,以确保求结果的正确性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旋转的油纸伞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值