数值分析 Gauss-Seidel迭代法求解线性方程组 MATLAB程序实现
2015-11-06 19:36
1241 查看
Gauss-Seidel迭代法 参考数值分析第四版 颜庆津著 P39
运行输入为:
![](http://blog.csdn.net/jingmiaa/article/details/file:/C:/Users/%E7%90%B3%E7%90%B3/AppData/Local/YNote/data/jm898774301@163.com/945cc4193ecc443b8fecd69e1bbbff99/106185929634.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/28/3ec6845e3b4abd399071dec8380328db)
运行结果为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/28/7935e539f958a6d84db2476cd35d604d)
![](http://blog.csdn.net/jingmiaa/article/details/file:/C:/Users/%E7%90%B3%E7%90%B3/AppData/Local/YNote/data/jm898774301@163.com/028fdef5c1a648daa2b2364d6e3967ee/clipboard.png)
以下是函数内容(保存为gauss.m文件,在MATLAB中运行):
%function [G,d,x,N]=gauss(A,b)
%Gauss-Seidel迭代法求解线性方程组。迭代公式x(k+1)=Gx(k)+d,(k=0,1,…).
%返回迭代矩阵G,d和方程组的解x,以及迭代次数N
%2015.11.6 密密编写 (*^__^*) 嘻嘻……
function [G,d,x2,N]=gauss(A,b)
n=size(A);
if n(1)~=n(2)
error('矩阵A不是方阵');
end
%初始化
N=1;%迭代次数
L=zeros(n);%分解A=D+L+U,D是对角阵,L是下三角阵,U是上三角阵
U=zeros(n);
D=zeros(n);
G=zeros(n);%G=-inv(D+L)*U
d=ones(n,1);%d=inv(D+L)*b
x=ones(n,1);
for i=1:n%初始化L和U
for j=1:n
if i<j
L(i,j)=A(i,j);
end
if i>j
U(i,j)=A(i,j);
end
end
end
for i=1:n%初始化D
D(i,i)=A(i,i);
end
G=-inv(D+L)*U;%初始化G
d=(D+L)\b;%初始化d
if vrho(G)>=1
error('Gauss-Seidel迭代法不收敛!');
end
%迭代开始
x1=x;
x2=G*x+d;
while norm(x2-x1,inf)>10^(-4)
x1=x2;
x2=G*x2+d;
N=N+1;
end
x=x2;
end
运行输入为:
![](http://blog.csdn.net/jingmiaa/article/details/file:/C:/Users/%E7%90%B3%E7%90%B3/AppData/Local/YNote/data/jm898774301@163.com/945cc4193ecc443b8fecd69e1bbbff99/106185929634.png)
运行结果为:
![](http://blog.csdn.net/jingmiaa/article/details/file:/C:/Users/%E7%90%B3%E7%90%B3/AppData/Local/YNote/data/jm898774301@163.com/028fdef5c1a648daa2b2364d6e3967ee/clipboard.png)
以下是函数内容(保存为gauss.m文件,在MATLAB中运行):
%function [G,d,x,N]=gauss(A,b)
%Gauss-Seidel迭代法求解线性方程组。迭代公式x(k+1)=Gx(k)+d,(k=0,1,…).
%返回迭代矩阵G,d和方程组的解x,以及迭代次数N
%2015.11.6 密密编写 (*^__^*) 嘻嘻……
function [G,d,x2,N]=gauss(A,b)
n=size(A);
if n(1)~=n(2)
error('矩阵A不是方阵');
end
%初始化
N=1;%迭代次数
L=zeros(n);%分解A=D+L+U,D是对角阵,L是下三角阵,U是上三角阵
U=zeros(n);
D=zeros(n);
G=zeros(n);%G=-inv(D+L)*U
d=ones(n,1);%d=inv(D+L)*b
x=ones(n,1);
for i=1:n%初始化L和U
for j=1:n
if i<j
L(i,j)=A(i,j);
end
if i>j
U(i,j)=A(i,j);
end
end
end
for i=1:n%初始化D
D(i,i)=A(i,i);
end
G=-inv(D+L)*U;%初始化G
d=(D+L)\b;%初始化d
if vrho(G)>=1
error('Gauss-Seidel迭代法不收敛!');
end
%迭代开始
x1=x;
x2=G*x+d;
while norm(x2-x1,inf)>10^(-4)
x1=x2;
x2=G*x2+d;
N=N+1;
end
x=x2;
end
相关文章推荐
- 数值分析 jacobi迭代法求解线性方程组 MATLAB程序实现
- 小记Matlab和C混合编程
- MATLAB产生各种分布的随机数
- 在外部调用Matlab引擎实现数学计算
- matlab快捷键大全
- 使用随机梯度算法对高斯核模型进行最小二乘学习法的MATLAB程序源码分析
- Matlab与C++混合编程,添加OpenCV库
- 分层K-Means+Matlab计算向量间距离
- 对给定音频文件“testshort.wav”,用matlab输出它的波形【学生创新实验室联合纳新测试题】
- MATCOM在VC++与MATLAB混合编程中的应用
- Matlab与C/C++混合编程接口及应用
- 浅谈手机sensor采集的raw图像
- matlab下配置lpsolve
- 关于MATLAB函数不可用问题。??? Undefined function or method 'minfo' for input arguments of type 'double'.
- MATLAB GUI中Edit Text的Callback函数何时执行
- 【Matlab】1. Matlab效率提升——调用C语言编写的函数 (mex,matlab C API)
- MATLAB7.0安装后,启动弹出找不到指定的模块
- 数值分析 追赶法求解三对角线性方程组 MATLAB实现
- 在命令行输入matlab,将matlab启动
- [matlab]计算事件连续发生的频数、…