概述
目录
一、前言:
二、算法详细:
1.Jacobi 迭代法:
2.Gauss-Seidel 迭代法:
3.Thomas算法:
4.松弛法:
三、实现代码:
1、Jacobi 迭代法:
2、Gauss-Seidel 迭代法:
3、Thomas算法:
4、松弛法:
四、总结:
一、前言:
个人学习内容分享
二、算法详细:
1.Jacobi 迭代法:
设方程组
其中
如果
则原方程组可化为
其中迭代矩阵
Jacobi迭代格式
可得解Ax=b的雅可比迭代法的计算公式为:
2.Gauss-Seidel 迭代法:
在Jacobi迭代公式中,计算时,利用已经算出来的新的值,从而得到G-S迭代法。(G-S迭代法是J迭代法的一种改进)
G- S迭代法的迭代矩阵:A=D-L-U.
但是由迭代公式
所以可得迭代矩阵
可得解Ax=b的高斯-塞德尔迭代法的计算公式为:
3.Thomas算法:
对于A为三对角矩阵时,可分解成以下形式
即可得到
从而求解Ax=f等价于解两个三角形方程组:
①Ly=f,求y,②Ux=y,求x.
进而追赶法公式为:
(1)计算{Bi}的递推公式
(2)解Ly=f
(3)解Ux=y
4.松弛法:
它是G-S迭代法的一种改进,利用第k次迭代值和第k+1次迭代值的G-S迭代值做加权平均。
可得解Ax=b的SOR方法的计算公式:
w是松弛因子。为1时,相当于不用松弛因子;大于1时,为超松弛因子,加快收敛速度;小于1时,欠松弛因子,改善收敛的条件。一般来讲,是在收敛不好的时候,采用一个较小的欠松弛因子。主要防止两次迭代值相差太大引起发散。松弛因子的值在0~1之间,越小表示两次迭代值之间变化越小,也就越稳定,但收敛也就越慢。
三、实现代码:
1、Jacobi 迭代法:
function [x,k]=Jacobi(A,b,error)
%功能:雅克比迭代法
%error为误差限
n=length(A);
x0=zeros(n,1);
x=x0;
k=0;
for i=1:n
x(i)=(b(i)-A(i,1:i-1)*x0(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);
end
while norm(abs(x-x0),1)>error
k=k+1;
x0=x;
for i=1:n
x(i)=(b(i)-A(i,1:i-1)*x0(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);
end
end
end
2、Gauss-Seidel 迭代法:
function [x,k]=GaussSeidel(A,b,error)
%功能:高斯-塞德尔迭代法
%error为误差限
n=length(A);
x0=zeros(n,1);
x=x0;
k=0;
for i=1:n
x(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);
end
while norm(abs(x-x0),1)>error
k=k+1;
x0=x;
for i=1:n
x(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);
end
end
end
3、Thomas算法:
function X=Thomas(a,b,c,f)
%功能:追赶法
%a,b,c分别为三对角阵的下,中,上对角元素向量集,f为Ax=b的b.
n=length(b);
B=f;
B(1)=c(1)/b(1);
for k=2:n-1
B(k)=c(k)/(b(k)-a(k)*B(k-1));
end
y(1)=f(1)/b(1);
for k=2:n
y(k)=(f(k)-a(k-1)*y(k-1))/(b(k)-a(k-1)*B(k-1));
end
X(n)=y(n);
for k=n-1:-1:1
X(k)=y(k)-B(k)*X(k+1);
end
end
4、松弛法:
function [x,k]=SOR(A,b,w,error)
%功能:松弛因子迭代法
%error为误差限
n=length(A);
x0=zeros(n,1);
x=x0;
k=0;
for i=1:n
x(i)=(1-w)*x0(i)+w*((b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i));
end
while norm(abs(x-x0),1)>error
k=k+1;
x0=x;
for i=1:n
x(i)=(1-w)*x0(i)+w*((b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i));
end
end
end
四、总结:
迭代结果的差异主要是由于迭代表达式形式有关,不同的迭代形式直接会影响结果的收敛速度,一般来说,就像相同次数的乘除法运算的幅度会比加减法大很多,对于向精确值的逼近亦或者远离速度也会更快,也就是收敛或发散速度。
最后
以上就是洁净老师为你收集整理的数值分析·学习|J,G-S,T,SOR迭代法及其matlab实现目录一、前言:二、算法详细:三、实现代码:四、总结:的全部内容,希望文章能够帮你解决数值分析·学习|J,G-S,T,SOR迭代法及其matlab实现目录一、前言:二、算法详细:三、实现代码:四、总结:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复