数值分析探索性实验一 线性代数方程组求解

实验目的

通过实验理解列选主元 LU 分解,理解线性方程组的雅可比迭代法和高斯-赛德尔迭代法的算法思想,学会做收敛性分析,掌握两个迭代法 Matlab 程序的编写和使用。

实验要求

数值分析探索性实验一 线性代数方程组求解_第1张图片

  1. 根据表格写出对应的线性方程组;
  2. 判断利用不选主元的 LU 分解法求解该线性方程组是否可行;
  3. 用列选主元的 LU 分解法求解该线性方程组,并给出残差范数;
  4. 调整线性方程组,分别应用雅克比迭代和高斯赛德尔迭代求解该线性方程组并分析其收敛性;
  5. 分析实验结果。

实验原理

1.不选主元 LU 分解法原理
数值分析探索性实验一 线性代数方程组求解_第2张图片
数值分析探索性实验一 线性代数方程组求解_第3张图片
2. 矩阵的列选主元 LU 分解法
数值分析探索性实验一 线性代数方程组求解_第4张图片
3. 雅可比迭代法
数值分析探索性实验一 线性代数方程组求解_第5张图片
数值分析探索性实验一 线性代数方程组求解_第6张图片
4. Gauss-Seidel 迭代法
数值分析探索性实验一 线性代数方程组求解_第7张图片

实验过程原始记录

(一)首先,通过分析题目,根据表格数据可显然得出题目线性方程。数值分析探索性实验一 线性代数方程组求解_第8张图片
数值分析探索性实验一 线性代数方程组求解_第9张图片
数值分析探索性实验一 线性代数方程组求解_第10张图片
数值分析探索性实验一 线性代数方程组求解_第11张图片
数值分析探索性实验一 线性代数方程组求解_第12张图片

实验结果分析

数值分析探索性实验一 线性代数方程组求解_第13张图片

部分代码

雅可比迭代法

function jacobi(A,b,x0,e,n)
%输入 A为系数矩阵,b为常数的列向量,x0为迭代初始向量,e为精度, n为最大迭代次数.
clc
format short;
D=diag(diag(A));
L=(-1).*tril(A,-1);
U=(-1).*triu(A,1);
k=0;
x=D\(L+U)*x0+D\b;
disp('迭代次数      x_k的分量元素        x_k的范数        x_k对应的剩余范数')
while norm(x-x0)>=e
    x0=x;
    x=D\(L+U)*x0+D\b;
    k=k+1;
    if k>n
        break;
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    h1(k)=norm(x);       %计算x的2范数
    h2(k)=norm(b-A*x);  %计算剩余向量的2范数
    %%%%记录并输出每次迭代步的数据%%%%%%%%%%
    aa=sprintf('%3d',k);
    bb=sprintf('\t%4.4f',x);
    cc=sprintf('\t\t%3.4f',h1(k));
    dd=sprintf('\t\t%14.4e',h2(k));
    disp([aa,' ',bb,' ',cc,' ',dd]);
end

列选主元LU分解法

[L,U,P]=lu(A);%对 A 进行列选主元 LU
>> y=L\P*b;
>> x=U\y;
E=norm(b-A*x) %求范数误差

你可能感兴趣的:(矩阵,matlab)