# Matlab实现——严格对角占优三对角方程组求解（高斯赛尔德Gauss-Seidel迭代、超松弛）

——(1)

其系数矩阵是对角的，且元素满足严格对角占优：

1)追赶法：

——(2)

——(3)

——(4)

function X=trisys(A,D,C,B)

%Input- A is the subdiagonal of the coefficient matrix

%     - D is the main diagonal of the coefficient matrix

%     - C is the superdiagonal of the coefficient matrix

%     - B is the constant vector of the linear system

%Output - X is the solution vector

N=length(B);

X=zeros(N,1);

for k=2:N

mult=A(k-1)/D(k-1);

D(k)=D(k)-mult*C(k-1);

B(k)=B(k)-mult*B(k-1);

end

X(N)=B(N)/D(N);

for k= N-1:-1:1

X(k)=(B(k)-C(k)*X(k+1))/D(k);

end



2)迭代法(采用改进的Gauss-Seidel迭代)（这个方法是看了超松弛迭代后，得出的类似方法）：

——(1)

【1】      给一个初始列向量：

2】利用迭代公式：

(注意：当ω=1时，就是我们所熟悉的Gauss-Seidel迭代)

ω是迭代加速的相关系数——松弛因子

function X=acc(A,D,C,B,P,delta, max1,w)

%Input- A is the subdiagonal of the coefficient matrix

%     - D is the main diagonal of the coefficient matrix

%     - C is the superdiagonal of the coefficient matrix

%     - B is the constant vector of the linear system

%     - P is an N x 1 matrix; the initial guess

%     - w is the convergence multiplicate

%     - delta is the tolerance for P

%     - max1 is the maximum number of iterations

% Output - X is an N x 1 matrix: the gauss-seidel approximation

%           to the solution of AX = B

N = length(B);

L=P;                   %L is a mediut

for k=1:max1          %max1th iteration

X=L;               %initial the X=[x1;x2;…;xN]=L=[d01;d02;…;d0N]

% the kth iteration of valuing the X

for j=1:N

if j==1

X(1)=(1-w)*X(1)+w*(B(1)-C(1)*X(2))/D(1);

elseif j==N

X(N)=(1-w)*X(N)+w*(B(N)-A(N-1)*X(N-1))/D(N);

else

%X contains the kth approximations

X(j)=(1-w)*X(j)+w*(B(j)-A(j-1)*X(j-1)-C(j)*X(j+1))/D(j);

end

end

err=abs(norm(X-L));  %get the error

L=X;

relerr=err/(norm(X)+eps);

if (err<delta)|(relerr<delta) %fit the over condition of iteration

break

end

end



在求解该问题的过程中，对于求解方程组的方法选择是一个很重要的因素，注意到这个系数矩阵是50阶严格对角占优三对角稀疏矩阵，查询了相关知识后，我个人认为，50阶的严格对角占优三对角稀疏矩阵，完全可以用高斯消去法，这是因为高斯消去后的上三角(或者下三角)仍然是严格对角占优，而对于这个稀疏矩阵，迭代法是一个非常不错的选择，而我采取的迭代法受限制的就是这个松弛因子w，注意到0<w≤1的时候，该方法是任何初始向量P都收敛，于是采取了w=0：0.2：1的选择方式，最后发现w=1附近的时候误差相对较小(有点郁闷，针对这个三对角矩阵时没能达到加速的目的)。总之，迭代法的舍入误差随着迭代次数的增加，能达到相当高的精度；而且收敛速度令人满意。

• 本文已收录于以下专栏：

## Matlab中所有自定义的函数

Functions By Category | Alphabetical List Language Fundamentals Entering Commands ...
• myathappy
• 2016年05月06日 09:55
• 4945

## 高斯-赛尔德迭代法求线性方程组Ax=b

• 2017年11月30日 14:17
• 524B
• 下载

## Matlab lugui

function [L,U,pv,qv] = lugui(A,pivotstrat) %LUGUI Gaussian elimination demonstration. % % LUGUI(A)...
• u013152895
• 2015年03月13日 07:39
• 430

## matlab spdiags函数语法

matlab spdiags函数语法 一句话说明: Extract and create sparse band and diagonal matrices spdiags ...
• u013628862
• 2015年05月05日 20:38
• 1984

## JacobiAndGauss-Seidel迭代(基于java)

import java.util.Scanner; public class JacobiAndGauss {  static int n = 6;  public static void ma...
• yangpeng201203
• 2012年12月20日 15:44
• 419

## python 做 Gauss-Seidal 迭代

#coding:utf-8 import numpy as np import scipy.linalg as sp # jacobi diedai a=np.array([[2,-1...
• u013131469
• 2013年12月13日 15:05
• 672

## matlab实验应该注意的

• faceRec
• 2007年07月07日 11:07
• 1711

## matlab中的diag,spdiags函数

1. diag函数 1.1 定义      diag函数功能：矩阵对角元素的提取和创建对角阵 1.2...
• 2014年04月12日 22:01
• 7676

## 追赶法求解三对角方程组

• u010450214
• 2015年12月04日 09:37
• 7695

## 三对角阵的LU分解和三对角方程组的求解（C语言）

/*三对角阵的LU分解和三对角方程组的求解 -------------A=LU的分解算法------- 参考教材：《数值分析》李乃成，梅立泉，科学出版社     《计算方法教程》第二版 凌永...
• zhangchao3322218
• 2012年03月30日 18:42
• 2941

举报原因： 您举报文章：Matlab实现——严格对角占优三对角方程组求解（高斯赛尔德Gauss-Seidel迭代、超松弛） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)