-
2021-04-20 02:02:39
%---高斯—赛德尔迭代法-----
%---Gauss - Seidel iteration method
clear;clc;
% A=[10,-1,-2;-1,10,-2;-1,-1,5];
% b=[7.2,8.3,4.2]';
A=[10,-1,-2;-1,10,-2;-1,-1,5];
b=[7.2,8.3,4.2]';
N=length(b); %解向量的维数
fprintf('库函数计算结果:');
x=inv(A)*b %库函数计算结果
x=zeros(N,1);%迭代初始值
%-----(A=D-E-F)------
D=diag(diag(A));
E=-tril(A,-1);%下三角
F=-triu(A,1);%上三角
B=inv(D-E)*F;g=inv(D-E)*b;
eps=0.0001;%相邻解的距离小于该数时,结束迭代
%--------开始迭代-------
for k=1:100 %最大迭代次数为100
fprintf('第%d次迭代:',k);
y=B*x+g;
fprintf('\n与上次计算结果的距离(2范数):%f \n',norm(x-y)^2); if norm(x-y)
break;
end
x=y
end
x
更多相关内容 -
高斯塞德尔迭代法matlab代码-ma_4301:二维Monge-Ampere方程的多重网格求解器
2021-05-28 02:12:12高斯塞德尔迭代法matlab代码Monge-安培方程的数值方法 这项工作研究了解决Monge-Ampere方程的多重网格方法。 我们利用方程的单调性以另一种方式将其写出,然后使用完全逼近方案对其进行数值求解。 抽象的: Monge-... -
高斯塞德尔迭代法matlab代码-MATLAB:的MATLAB
2021-05-28 02:11:57高斯塞德尔迭代法matlab代码的MATLAB 它是一个Matlab代码,它借助于高斯-塞德尔方法(它是一个迭代过程,并且随着n的增加而收敛到实际值)来找到具有n个变量的线性方程组的解。 在迭代过程中,应用GS方法之前的首要... -
MATLAB雅克比迭代法(Jacobi method)和高斯-赛德尔迭代法(Gauss–Seidel method)求Ax=b
2019-12-26 09:27:08包含代码和文档 分别用雅克比迭代法和高斯-赛德尔迭代法求解方程组,精确到小数点后6位,分别就 给出相应的计算结果 -
高斯-赛德尔(Gauss-Seidel)迭代法的matlab实现
2020-04-27 09:31:35数值分析实验内容,用matlab写程序实现高斯-赛德尔(Gauss-Seidel)迭代法。 迭代法解线性方程组的基本思想是构造一串收敛到解的序列,即建立一种从已有近似解计算新的近似解的规则,有不同的计算规则得到不同的迭代... -
MATLAB实现雅可比与高斯塞德尔迭代
2020-10-15 23:18:44概述 用MATLAB编程实现,形成m函数文件。...%高斯塞德尔迭代法 G=-(diag(diag(A))+tril(A,-1))\triu(A,1); R=max(abs(eig(G))); if(R>=1) disp('Gauss-Seidel is not work'); else disp('Gauss-Sei概述
用MATLAB编程实现,形成m函数文件。输入A,b矩阵,无返回值,解得x向量直接显示在命令行窗口,同时绘制出x向量的收敛曲线。
A = [ 2 − 1 1 1 1 1 1 1 − 2 ] b = [ 1 1 1 ] A=\begin{bmatrix} 2&-1&1\\1&1&1\\1&1&-2\end{bmatrix} b=\begin{bmatrix} 1\\1\\1\end{bmatrix} A=⎣⎡211−11111−2⎦⎤b=⎣⎡111⎦⎤高斯塞德尔方法
代码
function [] = gaussseidel(A,b) %高斯塞德尔迭代法 G=-(diag(diag(A))+tril(A,-1))\triu(A,1); R=max(abs(eig(G))); if(R>=1) disp('Gauss-Seidel is not work'); else disp('Gauss-Seidel is going well'); disp('x vector:') d1=(diag(diag(A))+tril(A,-1))\b; x=zeros(size(b)); for k=1:100 x(:,k+1)=G*x(:,k)+d1; if(max(abs(x(:,k+1)-x(:,k)))<10^-4) break; end end disp(x(:,k+1)); e=1:k+1; plot(e,x,'- o'); xlabel('generations'); ylabel('vector_x'); end end
结果
A=[2 -1 1;1 1 1;1 1 -2];b=[1;1;1];
gaussseidel(A,b);
Gauss-Seidel is going well
x vector:
0.6667
0.3333
0
可见,高斯塞德尔方法收敛且成功求出结果。
雅可比方法
代码
function [] = jacobi(A,b) %雅可比迭代法 B=-(diag(diag(A)))\(tril(A,-1)+triu(A,1)); R=max(abs(eig(B))); if(R>=1) disp('Jacobi is not work'); else disp('Jacobi is going well'); disp('x vector:') d1=diag(diag(A))\b; x=zeros(size(b)); for k=1:100 x(:,k+1)=B*x(:,k)+d1; if(max(abs(x(:,k+1)-x(:,k)))<10^-4) break; end end disp(x(:,k+1)); e=1:k+1; plot(e,x,'- o'); xlabel('generations'); ylabel('vector_x'); end end
结果
A=[2 -1 1;1 1 1;1 1 -2];b=[1;1;1];
jacobi(A,b)
Jacobi is not work
可见,雅可比方法不收敛。代码思路
首先判断收敛性
判断迭代矩阵的谱半径的上界是否小于1。
若大于1则结束程序。迭代求解
高斯塞德尔迭代矩阵
G = − D − 1 ( L + U ) G=-D^{-1}(L+U) G=−D−1(L+U)
x ( k + 1 ) = G x ( k ) + d 1 x^{(k+1)}=Gx^{(k)}+d_{1} x(k+1)=Gx(k)+d1雅可比迭代矩阵
B = − ( D + L ) − 1 U B=-(D+L)^{-1}U B=−(D+L)−1U
x ( k + 1 ) = B x ( k ) + d 1 x^{(k+1)}=Bx^{(k)}+d_ {1} x(k+1)=Bx(k)+d1
每次迭代后判断
∣ x k + 1 − x k ∣ < 1 0 − 4 |x^{k+1}-x^k|<10^{-4} ∣xk+1−xk∣<10−4
结果为“真”跳出迭代循环,输出迭代末尾x向量。并绘出收敛曲线。 -
用雅可比迭代法、高斯-塞德尔迭代法求解线性方程组matlab代码
2021-05-29 17:08:24计算线性方程组Ax=b,利用A=D-L-U,将线性方程组改写为x=Bx+f,用迭代的方法进行计算 以6阶希尔伯特矩阵为例,如果需计算其他矩阵,改一下A,要计算其他阶数,改一下n的值就好 clc clear format rat%也可以用format ...计算线性方程组Ax=b,利用A=D-L-U,将线性方程组改写为x=Bx+f,用迭代的方法进行计算
以6阶希尔伯特矩阵为例,如果需计算其他矩阵,改一下A,要计算其他阶数,改一下n的值就好clc clear format rat%也可以用format long n=6 %定义希尔伯特矩阵 H=zeros(n,n); for i=1:n for j=1:n H(i,j)=1/(i+j-1); end end H %此处可定义不同的矩阵A,向量b A=H; b=A*ones(n,1); x0=zeros(n,1);%初始向量 D=zeros(n,n); L=zeros(n,n); U=zeros(n,n); for i=1:n D(i,i)=A(i,i);%定义对角阵 end D for i=2:n for j=1:i-1 L(i,j)=-A(i,j);%定义单位下三角阵 end end L for i=1:n for j=i+1:n U(i,j)=-A(i,j); end end U m=1000;%可根据情况改变m的值 t1=0; t2=0; %在计算之前先判断两种迭代方法是否收敛 if max(abs(eig(D^-1*(L+U))))<1 disp('雅可比迭代法收敛,接下来使用此方法进行求解'); x1=x0; for i=1:m x1=D^-1*(L+U)*x1+D^-1*b; if(abs(t1-x1)<10^-5) sprintf('在经过%d次迭代后,得到收敛解',i) break end t1=x1; end disp('雅可比迭代法得到的x:'); disp(x1) else disp('雅可比迭代法不收敛,计算停止') end if max(abs(eig((D-L)^-1*U)))<1 disp('高斯-塞德尔迭代法收敛,接下来使用此方法进行求解'); x2=x0; for i=1:m x2=(D-L)^-1*U*x2+(D-L)^-1*b; if(abs(t2-x2)<10^-5) sprintf('在经过%d次迭代后,得到收敛解',i) break end t2=x2; end disp('高斯-塞德尔迭代法得到的x:'); disp(x2) else disp('高斯-塞德尔迭代法不收敛,计算停止') end
-
MATLAB实现高斯赛德尔迭代法
2018-04-17 21:13:31MATLAB实现高斯赛德尔迭代法MATLAB实现高斯赛德尔迭代法 -
雅可比迭代法和高斯-塞德尔迭代法
2011-11-12 21:33:22雅可比迭代法和高斯-塞德尔迭代法 雅可比迭代法和高斯-塞德尔迭代法 -
高斯牛顿迭代法matlab代码-Numerical_analysis:数值分析
2021-05-24 07:21:23高斯牛顿继承法matlab代码数值分析 数值分析代码 HW_1(Python) 括弧法 二等分法 错误位置法 开放方式 简单的定点方法 牛顿-拉普森法 割线法 HW_2(Matlab) 高斯消除 天真高斯消除 迭代方法 高斯塞德尔法 Jacobi... -
2021-01-07 matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法
2021-01-07 17:05:03matlab数值分析 线性方程组的迭代解法高斯-赛德尔迭代法 Function [x,iter]=gs(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); %从x=[0;0…]T开始 for iter=1:500 x=(D-L)\(b+U*x); %...matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法
Function [x,iter]=gs(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); %从x=[0;0…]T开始 for iter=1:500 x=(D-L)\(b+U*x); %此句换为x=(D)\(b+L*x+U*x);即为Jacobi迭代 error=norm(b-A*x)/norm(b); if(error<tol) break; end end
主函数(调用程序)
A=[2,-1,0;-1,3,-1;0,-1,2];
b=[1;8;-5];
tol=1e-4;
[x,iter]=gs(A,b,tol)
-
雅克比迭代法,高斯-赛德尔迭代法,SOR法,追赶法求解线性方程组
2020-11-27 15:48:05○1高斯-赛德尔迭代法比雅克比的迭代次数少一半多,说明高斯-赛德尔迭代法优于雅克比迭代法,收敛速度更快,效率更高。但也不绝对,有时也会出现雅克比迭代法收敛而高斯-赛德尔迭代法不收敛的情况。 ○2SOR法的迭代... -
高斯迭代法matlab算例
2021-04-18 12:02:28Matlab 线性方程组的迭代解法 Gauss-Seidel 迭代法 ...熟悉 Gauss-Seidel 迭代法,并编写 Matlab 程序 function [y,n]=gauss_seidel(A,b,x0,eps) %gauss seidel iterative ......matlab中应用的高斯-赛德尔迭代程序... -
基于高斯塞德尔方法的超松弛迭代法MATLAB实现
2020-10-16 16:49:45判断迭代方法收敛性时计算高斯塞德尔迭代矩阵谱半径以判断。 代码与运行结果 function [] = sor(A,b,w) %基于高斯塞德尔的超松弛迭代求解向量 G=-(tril(A))\triu(A,1); R=max(abs(eig(G))); if(R>= -
高斯-赛德尔(Gauss-Seidel)迭代法求解线性方程组matlab程序设计
2021-10-21 15:18:29算法步骤 例题 程序代码 function x=GaussSeidel(A,b,x0,eps,N) n=length(b); if nargin<5 N=500; end if nargin<4 eps=1e-6; end if nargin<3 x0=zeros(n,1); end k=0;...... -
用MATLAB实现雅克比迭代、高斯-赛德尔迭代以及超松弛迭代
2020-11-17 22:51:27文章目录前言一、解线性方程组的方法二、解线性方程组的迭代法及其代码实现1. 迭代法的收敛性2. 基本参数设置3. 雅克比(Jacobi)迭代4. 高斯-塞德尔(Gauss-Seidel)迭代5. 超松弛(SOR)迭代总结 前言 近期在上... -
解线性方程组的迭代法(高斯-塞德尔迭代法)
2021-06-07 15:22:41MATLAB函数文件 function x=Agui_GS(A,b) %方程Ax=b,x0为初始向量 %e为精度,N为最大迭代次数 n=length(b); N=100; e=1e-4; x0=zeros(n,1); x=x0; x0=x+2*e; k=0; A1=tril(A); A2=inv(A1); while norm(x0-x,inf)>... -
高斯列主元消去法、雅可比迭代法、高斯-塞德尔迭代法原理及使用(代码环境:matlab)
2019-04-07 20:24:13题目一: 1.假设理想状态下的弹道轨迹满足抛物线方程y=a+bx+cx^2(注:真实状态下的轨迹并不是那样,一般发射后段的轨迹比较倾斜,这是因为后段受...高斯列主元消去法: 1.原理: 算法: 3.matlab代码: A=[1,1,1... -
Matlab_用高斯赛德尔(Gaoss-Seidel)迭代法解线性方程组
2019-05-29 20:02:111.程序代码 function x=Gauss(A,b,x0,ep,N) %用途:用高斯迭代法解线性方程组Ax=b %A为系数矩阵,b为右端向量,x0为初始向量(默认零向量) %ep为精度(1e-6),N为最大迭代次数(默认500次),x返回近似解向量 n=... -
matlab实现高斯赛德尔迭代法解方程组
2021-04-18 05:04:39已知方程组Ax=b使用高斯赛德尔迭代法要求精度达到0.0001迭代初始向量[0 0 0 0 0 0 0 0 0]最大限制迭代50次---------------------------------------------------------分--割--线----------------------------------... -
MATLAB_数值计算_高斯-赛德尔(Gauss-Seidel)迭代的矩阵形式
2021-04-14 13:03:36Gauss-Seidel迭代法百度百科 function[x,k]=gaussseidel(A,b,x0,ep,Nmax) %Gauss-Seidel迭代 %x0为迭代初值 %ep为精度,默认1e-5 %Nmax为迭代次数上限以防止发散,默认为500 n=length(b); if nargin<5 %naigin... -
解线性方程组的迭代法(雅可比、高斯-塞德尔迭代法)
2021-07-12 21:12:33%e为精度,N为最大迭代次数 n=length(b); N=100; e=1e-4; x0=zeros(n,1); x=x0; x0=x+2*e; k=0; A1=tril(A); A2=inv(A1); while norm(x0-x,inf)>e&&k<N k=k+1; x0=x; x=-A2*(A-A1)*x0+A2*b; ... -
高斯-赛德尔迭代法计算公式 matlab
2012-04-18 18:01:57解线性方程组的高斯-赛德尔法 matlab 实现 -
高斯-赛德尔迭代法
2022-04-24 21:30:35高斯-赛德尔迭代法 -
数值分析4-解线性方程组的雅可比迭代法,高斯-塞德尔法的matlab程序
2021-01-25 22:10:02代码块1:雅可比迭代法: clear; clc; fprintf('雅可比迭代法解线性方程组:\n') n=input('请输入系数矩阵A的阶数:n='); A=input('请输入系数矩阵A:A='); b1=input('请输入结果向量b1:b1=');%b为行向量,计算时需要... -
基于matlab的Guass-Seidel(高斯--赛德尔) 迭代法求解线性方程组
2018-11-01 12:27:08% 求线性方程组的Gauss-Seidel迭代法,调用格式为 % [x, k] = guaseidel(A,b,x0,eps,it_max) % 其中, A 为线性方程组的系数矩阵,b 为常数项,eps 为精度要求,默认为1e-5, % it_max 为最大迭代次数,默认为100 ... -
MATLAB迭代法收敛判断
2021-01-04 13:24:04包括雅可比迭代,高斯赛德尔迭代,松弛法迭代 -
matlab Jacobi迭代法Gauss-seidel和SOR迭代.doc
2020-12-16 11:14:171 Jacobi迭代法 例1 用jacobi迭代法求解代数线性代数方程组 ,保留四位有效数字(err1e-4) 其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3] 解编写jacobi迭代法的函数文件保存为jacobi.m function [x,k]=jacobi(A,b,x0,eps... -
matlab高斯-塞德尔迭代法
2013-06-24 17:02:46matlab高斯-塞德尔迭代法 代码是正确的,并且有运算例子 -
高斯-赛戴尔(Gauss-Seidel)迭代法基于MATLAB的实现
2019-12-19 16:58:40高斯-赛戴尔(Gauss-Seidel)迭代法基于MATLAB的实现 前言 这个代码的实现,其实主要是因为所修课程当中老师要求,所以自己就写了这么一个代码,具体原理就不提及了,各处文献都写的很清楚了,如果想要从原理仔细...