当前位置:文档之家› 用C语言实现高斯 赛德尔迭代方法

用C语言实现高斯 赛德尔迭代方法

用C语言实现高斯 赛德尔迭代方法
用C语言实现高斯 赛德尔迭代方法

高斯-赛德尔迭代法matlab程序

disp('划分为M*M个正方形') M=5 %每行的方格数,改变M可以方便地改变剖分的点数 u=zeros(M+1);%得到一个(M+1)*(M+1)的矩阵 disp('对每个剖分点赋初值,因为迭代次数很高,所以如何赋初值并不重要,故采用对列线性赋值。') disp('对边界内的点赋初值并使用边界条件对边界赋值:') for j=1:M-1 for i=1:M-1 u(i+1,j+1)=100*sin(pi/M*j)/M*(M-i);%对矩阵(即每个刨分点)赋初值 end end for i=1:M+1 u(1,i)=100*sin(pi*(i-1)/M);%使用边界条件对边界赋值 u(1,M+1)=0; end u tic %获取运行时间的起点 disp('迭代次数为N') N=6 %迭代次数,改变N可以方便地改变迭代次数 disp('n为当前迭代次数,u为当前值,结果如下:') for n=1:N for p=2:M i=M+2-p; for j=2:M u(i,j)=0.25*(u(i,j-1)+u(i+1,j)+u(i-1,j)+u(i,j+1));%赛德尔迭代法 end end n %输出n u %输出u end disp('所用的时间:') t=toc %获取算法运行需要的时间 [x,y]=meshgrid(0:1/M:1,0:1/M:1); z=u(1,:); for a=2:M+1 z=[z;u(a,:)];%获取最终迭代的结果,幅值给z,z的值代表该点的点位值 end mesh(x,y,z)%绘制三维视图以便清楚地显示结果 mesh(x,y,z,'FaceColor','white','EdgeColor','black') %绘制三维视图以便清楚地显示结果

高斯赛德尔法潮流计算

高斯——赛德尔法潮流计算 潮流计算高斯——赛德尔迭代法(Gauss一Seidel method)是求解电力系统潮流的方法。潮流计算高斯——赛德尔迭代法又分导纳矩阵迭代法和阻抗矩阵迭代法两种。前者是以节点导纳矩阵为基础建立的赛德尔迭代格式;后者是以节点阻扰矩阵为基础建立的赛德尔迭代格式。高斯——赛德尔迭代法这是数学上求解线性或非线性方程组的一种常用的迭代方法。 本实验通过对电力网数学模型形成的计算机程序的编制与调试,获得形成电力网数学模型:高斯---赛德尔法的计算机程序,使数学模型能够由计算机自行形成,即根据已知的电力网的接线图及各支路参数由计算程序运行形成该电力网的节点导纳矩阵和各节点电压、功率。通过实验教学加深学生对高斯---赛德尔法概念的理解,学会运用数学知识建立电力系统的数学模型,掌握数学模型的形成过程及其特点,熟悉各种常用应用软件,熟悉硬件设备的使用方法,加强编制调试计算机程序的能力,提高工程计算的能力,学习如何将理论知识和实际工程问题结合起来。 高斯---赛德尔法潮流计算框图

[1]系统节点的分类 根据给定的控制变量和状态变量的不同分类如下 ①P、Q节点(负荷节点),给定Pi、Qi求Vi、Si,所求数量最多; ②负荷节点,变电站节点(联络节点、浮游节点),给定P Gi、Q Gi的发电机 节点,给定Q Gi的无功电源节点; ③PV节点(调节节点、电压控制节点),给定P i、Q i求Q n、S n,所求数量 少,可以无有功储备的发电机节点和可调节的无功电源节点; ④平衡节点(松弛节点、参考节点(基准相角)、S节点、VS节点、缓冲节 点),给定V i,δi=0,求P n、Q n(V s、δs、P s、Q s)。 [2]潮流计算的数学模型 1)线性的节点电压方程YV=I 根据S=V错误!未找到引用源。可得非线性的节点电压方程(错误!未找到引用源。为I的共轭) YV=I=错误!未找到引用源。=错误!未找到引用源。

高斯-赛德尔迭代法解线性方程组

数值分析实验五 班级: 10信计二班 学号:59 姓名:王志桃 分数: 一.实验名称 高斯-赛德尔迭代法解线性方程组 二.实验目的 1. 学会利用高斯赛德尔方法解线性方程组 2. 明白迭代法的原理 3. 对于大型稀疏矩阵方程组适用于迭代法比较简单 三.实验内容 利用Gauss-Seidel 迭代法求解下列方程组 ?????=++=-+=+-36123633111420238321 321321x x x x x x x x x , 其中取→=0)0(x 。 四、算法描述 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值,若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量)1(+k i x 时,用最新分量)1(1+k x ,???+)1(2k x )1(1-+k i x 代替旧分量)(1k x ,???)(2k x )(1-k i x ,就得到所谓解方程组的Gauss-Seidel 迭代法。 其迭代格式为 T n x x x x ) ()0()0(2)0(1)0(,,,???= (初始向量), )(1111 1) ()1()1(∑∑-=-+=++--=i j i i j k j ij k j ij i ii i i x a x a b a x )210i 210(n k ???=???=,,,;,,, 或者写为 ?? ???--=???=???==?+=∑∑-=-+=+++)(1)210i 210(1111)()1()1()()1(i j i i j k j ij k j ij i ii i i i k i k i x a x a b a x n k k x x x ,,,;,,, 五、 编码 #include #include

高斯赛德尔与超松弛迭代法

分别运用高斯赛德尔迭代法和超松弛迭代法解线性方程组:????? ??-=????? ??????? ??--243024410143034321x x x 。 1. 高斯赛德尔迭代法 编程思路:高斯赛德尔迭代法实在雅克比迭代法的基础上进行优化得到的,即在进行迭代时,将已经算得的第k+1步的迭代值代入第k+1步后边的变量的计算当中去,从而加快了迭代速度。 程序代码: function varargout=Gauss_Seidelli(varargin) A=[4 3 0;3 4 -1;0 -1 4]; b=[24 30 -24]'; x0=[0;0;0]; x=Gauss_Seidel(A,b,x0) function x=Gauss_Seidel(A,b,x0) n=100;%最大迭代次数 ee=0.0001;%精度 n1=length(b); for i=1:n x1=x0; for j=1:n1 s=0; for k=1:n1 if k~=j s=s+A(j,k)*x0(k); end end x0(j)=(b(j)-s)/A(j,j); end if norm(x1-x0)

2. 超松弛迭代法 该方法是在高斯赛德尔迭代法的基础上将前一步的结果)(k i x 和)1( k i x 进行适当的线性组合以加速收敛,松弛因子ω的选择是关键,当1<ω<2时,即为超松弛迭代法。 程序代码: function varargout=SORli(varargin) clc A=[4 3 0;3 4 -1;0 -1 4]; b=[24;30;-24]; x0=[0;0;0];w=1.3; x=SOR(A,b,x0,w); for i=1:3 fprintf('%4.2f ',x(i)); end fprintf('\n'); function x=SOR(A,b,x0,w) %AX=b %x0初始点 %w 为 松弛因子 n=100;%最大迭代次数 ee=0.0001;%精度 n1=length(b); for i=1:n x1=x0; for j=1:n1 s=0; for k=1:n1 if k~=j s=s+A(j,k)*x0(k); end end x0(j)=(1-w)*x0(j)+w*(b(j)-s)/A(j,j); end if norm(x1-x0)

高斯-赛德尔迭代法

一、 实验目的与要求 对于线性方程组?????=++=++=++69228281027321 321321x x x x x x x x x 1. 用高斯-赛德尔迭代法求此方程组的近似解(终止迭代过程的最大允许迭代次数N ,近似解的误差限eps ,均由用户设定); 2. 通过数值实验说明,求此线性方程组的近似解时,高斯-赛德尔迭代法的收敛速度比雅可比迭代法的收敛速度要快一些。(用同样精度要求的条件来比较迭代次数) 二、 实验方案(程序源文件) 运用MATLAB 软件编辑M 文件如下: function EX() a=input('请输入系数矩阵a :'); b=input('请输入矩阵b:'); N=input('请输入最大迭代次数N :'); esp=input('请输入近似解的误差限:'); if any(diag(a))==0 error('系数矩阵错误,迭代终止!') end D=diag(diag(a)); X0=zeros(size(b)); x1=0; x2=0; x3=0; X1=[x1;x2;x3]; h=inv(D)*b; B=inv(D)*(D-a); B1=triu(B); B2=tril(B); k=1; fprintf('高斯-赛德尔迭代法 \n'); fprintf('第0次迭代得:') disp(X1'); while k<=N x1=h(1,1)+B1(1,:)*X0; X1=[x1;x2;x3]; x2=h(2,1)+B1(2,:)*X0+B2(2,:)*X1; X1=[x1;x2;x3]; x3=h(3,1)+B2(3,:)*X1; X1=[x1;x2;x3]; if norm(X1-X0,inf)

高斯-赛德尔迭代法的算法及程序设计

题目:高斯-赛德尔迭代法的算法及程序设计 摘要 本文通过理论与实例对线性方程组的解法、收敛性及误差分析进行了探讨.在对线性方程组数值解法的讨论下用到了高斯-赛德尔迭代法,进一步研究和总结了高斯-赛德尔迭代法的理论与应用,使我们在分析问题与编辑程序时能更好的把握对高斯-赛德尔迭代法的应用。 关键词 Gauss-Seidel迭代法;收敛性;误差分析;流程图;Mathematica编程

目录 第一章高斯-赛德尔迭代法 (1) §1.1 高斯-赛德尔迭代法的提出 (1) §1.1.1 高斯-赛德尔迭代法的思想理论 (1) §1.1.2 高斯-赛德尔迭代法的定义及表达形式 (2) §1.2 高斯-赛德尔迭代法的收敛性 (1) §1.3 高斯-赛德尔迭代法的误差分析 (1) 第二章高斯-赛德尔迭代法的程序设计 (1) §2.1 高斯-赛德尔迭代法在上机中的应用 (1) §2.1.1 高斯-赛德尔迭代法的流程图 (1) §2.1.2 高斯-赛德尔迭代法的源程序 (1) 参考文献 (22) 附录 (23)

第一章 高斯-赛德尔迭代法 考虑线性方程组 Ax b = 其中为非奇A 异矩阵,对于由工程技术中产生的大型稀疏矩阵方程组(A 的阶数很大n 但零元素很多),利用迭代法求解线性方程组是合适Ax b =的.在计算机内存和运算两方面,迭代法通常都可利用中A 有大量零元素的特点. 本章将介绍迭代法中的高斯-赛德尔法的思想理论、收敛性及误差分析. §1.1 高斯-赛德尔迭代法的提出 §1.1.1 高斯-赛德尔迭代法的思想理论 在研究雅可比迭代法时,计算1k i x +时,已得(1)(1) (1) 12 1 ,,,k k k i x x x +++-(这些分别为121,,,i x x x -的第k+1次近似),Gauss-Seidel 迭代法认为在计算时启用新值,从而产 生 1(1) (1) ()11 1()i n k k k i i ij j ij j j j i ii x b a x a x a -++==+=--∑∑. 具体原理如下图所示 ()k x →→→

雅克比迭代法和高斯-赛德尔法解线性方程组(C++)

作业:① 分别用J 法和G-S 法求解下列方程,并讨论结果。 123122*********x x x -?????? ??? ?= ??? ? ??? ??????? #include using namespace std; //J 法解线性方程 int main(){ int m,n,i,j,times=0,mtimes; double s,sum,max; cout<<"请输入系数矩阵行数m 、列数n :"<>m>>n; if(m>A[i][j]; cout<<"请输入常数向量B :"<>B[i]; cout<<"请输入最大允许误差s:"<>s; cout<<"请输入最大迭代次数:"<>mtimes; cout<<"请输入一零级向量X:"<>X[i]; T[i]=X[i];//T[]存放上一次迭代结果 }

高斯-赛德尔迭代

实验题目:数值分析之高斯-赛德尔迭代 学生姓名: 专业: 学号: 完成日期:

实验题目: 数值分析之高斯-赛德尔迭代 学生姓名: 学号: 完成日期: 2011.10.21 1 实验目的 利用高斯-赛德尔迭代法求解线性方程组 ??? ??=++=++=++6 9228281027321 321321x x x x x x x x x 2 实验步骤 2.1 算法原理 高斯-赛德尔迭代是计算 1 (+k x 的第i 个分量)1(+k i x ,利用了已经计算出得最新分量 )1,...,2,1() 1(-==+i j x k j .高斯-赛德尔迭代法可以看作雅克比迭代法的一种改进.高斯-赛 德尔迭代法没迭代一次只需计算一次矩阵与向量的乘法 2.2 算法步骤 选取分裂矩阵M 为A 的下三角部分,即选取L D M -=(下三角矩阵),N M A -=, 于是得到解b Ax =的高斯-赛德尔(Gauss-Seidel )迭代法 ????=+=+,...,1,0,,) () 1()0(k f Bx x x k k 初始向量 (2.4) 其中.)(,)()(1 1 1 b L D f G U L D A L D I B ----=≡-=--=称U L D G 1 )(--=为解 b Ax =的高斯-赛德尔迭代法的迭代矩阵. 下面给出高斯-赛德尔迭代法的分量计算公式.记 T k n k i k k x x x x ),...,,...,()() ()(1) (= 由(2.4)式有 ,)() () 1(b Ux x L D k k +=-+ 或 ,) () 1() 1(b Ux Lx Dx k k k ++=++ 即

高斯-赛德尔迭代法解线性方程组复习过程

高斯-赛德尔迭代法解线性方程组

数值分析实验五 班级: 10信计二班 学号:59 姓名:王志桃 分数: 一.实验名称 高斯-赛德尔迭代法解线性方程组 二.实验目的 1. 学会利用高斯赛德尔方法解线性方程组 2. 明白迭代法的原理 3. 对于大型稀疏矩阵方程组适用于迭代法比较简单 三.实验内容 利用Gauss-Seidel 迭代法求解下列方程组 ?????=++=-+=+-36123633111420238321 321321x x x x x x x x x , 其中取→=0)0(x 。 四、算法描述 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值,若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量)1(+k i x 时,用最新分量)1(1+k x ,???+)1(2k x )1(1-+k i x 代替旧分量)(1k x ,???)(2k x )(1-k i x ,就得到所谓解方程组的Gauss-Seidel 迭代法。 其迭代格式为 T n x x x x )()0()0(2)0(1)0(,,,???= (初始向量), )(11111)()1( ) 1(∑∑-=-+=++--=i j i i j k j ij k j ij i ii i i x a x a b a x )210i 210(n k ???=???=,,,;,,, 或者写为

?? ???--=???=???==?+=∑∑-=-+=+++)(1)210i 210(1111)( )1( )1()()1(i j i i j k j ij k j ij i ii i i i k i k i x a x a b a x n k k x x x ,,,;,,, 五、 编码 #include #include #include #include #define MAX_n 100 #define PRECISION 0.0000001 #define MAX_Number 1000 void VectorInput(float x[],int n) //输入初始向量 { int i; for(i=1;i<=n;++i) { printf("x[%d]=",i); scanf("%f",&x[i]); } } void MatrixInput(float A[][MAX_n],int m,int n) //输入增广矩阵 { int i, j; printf("\n===Begin input Matrix elements===\n"); for(i=1;i<=m;++i) { printf("Input_Line %d : ",i); for(j=1;j<=n;++j) scanf("%f",&A[i][j]); } } void VectorOutput(float x[],int n) //输出向量

高斯赛德尔迭代法matlab编程

function[x,k]=GaussSeidel(A,b,x0,eps,M) %高斯赛德尔迭代法求方程组的解(矩阵公式求解) %A为方程组的系数矩阵;b为方程组的右端项 %x为线性方程组的解了;x0为迭代初值 %eps为误差限;M为迭代的最大次数 if nargin==3 eps= 1.0e-6;%默认精度 M = 10000;%参数不足时默认后两个条件 elseif nargin ==4 M = 10000;%参数的默认值 elseif nargin<3 error('参数不足'); return end [n,m]=size(A); nb=length(b); %当方程组行与列的维数不相等时,停止计算,并输出出错信息if n~=m error('矩阵A行数和列数必须相等!'); return; end %当方程组与右端项的维数不匹配时,停止计算,并输出出错信息if n~=nb

error('矩阵A的行数必须和b的长度相等!'); return; end L =zeros(n,n); U =zeros(n,n); D =zeros(n,n); for i=2:n for j=1:i-1 L(i,j)=-A(i,j); end end for i=1:n-1 for j=i+1:n U(i,j)=-A(i,j); end end for i=1:n D(i,i)=A(i,i); end B=inv(D-L)*U; %B为迭代矩阵 g=inv(D-L)*b; %g为右端项 pr=max(abs(eig(B))); %求迭代矩阵谱半径

if pr>=1 error('迭代矩阵谱半径大于1迭代法不收敛'); return; end k=0; tol=1; while tol>=eps x = B*x0+g; k = k+1; %迭代步数 tol = norm(x-x0);%前后两步迭代结果的误差 x0 = x; if(k>=M) disp('Warning: 迭代次数太多,可能不收敛!'); return; end end

用高斯-赛德尔迭代法解下列线性方程组

云南大学数学与统计学实验教学中心 实验报告 课程名称:数值计算方法 学期: 2011—2012学年第一学期 成绩: 指导教师: 学生姓名: 学生学号: 实验名称:用高斯-赛德尔迭代法解下列线性方程组 实验编号:No. 4 实验日期: 2011/11/6 实验学时: 3 学院: 数学与统计学院 专业: 数学与应用数学 年级: 2010级 一、实验目的 加强"追赶法"在解方程组中的应用,掌握多种不同的解线性方程组的解法以及编程的应用 二、实验内容 用高斯-赛德尔迭代法解下列线性方程组,要求当||)()1(k k x x -+||510-≤时迭代终止。 ????????? ? ??????????-=????????????????????????????????????????---------------62605041 1 141010014001100410010141001014654321x x x x x x 三、实验环境 C 语言,Turboc 四.实验方法 高斯—赛德尔迭代法:在雅可比迭代中,求(1)k x +是时是用()k x 的所有分量来参加计算的,而在计算(1)k x +的第i 个分量(1)k i x +时,已经计算好前面1i -个分量(1)(1,2,,1)k j x j i +=- 。设想方法收敛,第(1)k +次的分量比第()k 次的分量更接近于真实值,为了加速收敛,在计算(1)k x +的第i 个分量时,所用的()k x 的 前1i -个分量换成新算好的值,即用(1)(1)(1)(1)(1)121,,,,,,k k k k k i i n x x x x x +++++- 来计 算(1)k i x +,这就是高斯—赛德尔迭代思想。而在雅可比方法基础上用赛德尔迭代,称为高斯—赛德尔()G S -方法。 (1)任取初始向量(0)(0)(0)(0)12(,,,)T n x x x x = ,由如下公式计算(1)k x +的第 i 个分量:

高斯消去法高斯塞德尔迭代法

数值计算 高斯消去法和高斯-塞德尔迭代法

摘要 虽然已学过加减消元法、代入消元法、矩阵变换法和Cramer 法则等,但是无法满足实际计算需要,故在此讨论在计算机上实现的有效而实用的解法。线性方程组的解法大致分2类:直接法(高斯消去法)和迭代法(高斯-赛德尔迭代法),在此对着此类算法进行比较分析。 一、算法设计 当计算线性方程组如下时, 11112211 21122222 1122n n n n n n nn n n a x a x a x b a x a x a x b a x a x a x b +++=??+++=?? ? ?+++=? (1-1) 为方便起见,常将线性方程组表示成矩阵形式 Ax b = 其中 1111n n nn a a A a a ?? ??=?????? 1n x x x ?? ??=?????? 1n b b b ????=?????? 并始终假定A 是非奇异的,即方程组的解存在且唯一。 1.1高斯消去法 消去法就是按特定顺序进行的矩阵初等变换法,当消元按自然顺序进行时,称为 高斯顺序消去法。一般情况下的高斯顺序消去法的计算机算法如下,现将方程组(1-1)的增广矩阵记作 (0)(0)(0)11111(0)(0)(0)11n n n nn nn a a a a a a ++??? ??? ????? ? 假设经k-1步消元后,增广矩阵化为 (0)(0) (0)(0)1112111 (1)(1)(1)22 221(1)(1) (1)1(1)(1)(1) 1n n n n k k k kk kn kn k k k nk nn nn a a a a a a a a a a a a a ++---+---+???????? ?????????? ? ? 其中() s ij a 的上标表示是由s 步消元得到的植。

(整理)雅克比高斯赛德尔迭代法

第八节 雅可比迭代法与高斯—塞德尔迭代法 一 雅可比迭代法 设线性方程组 b Ax = (1) 的系数矩阵A 可逆且主对角元素nn a ,...,a ,a 22 11均不为零,令 ()nn a ,...,a ,a diag D 2211= 并将A 分解成 ()D D A A +-= (2) 从而(1)可写成 ()b x A D Dx +-= 令 11f x B x += 其中b D f ,A D I B 1 111 --=-=. (3) 以 1B 为迭代矩阵的迭代法(公式) ()()111f x B x k k +=+ (4) 称为雅可比(Jacobi)迭代法(公式),用向量的分量来表示,(4)为 ? ?? [] ,... ,,k ,n ,...,i x a b a x n i j j ) k (j j i i ii )k (i 21021111==∑-=≠=+ (5) 其中 ()()()() ()T n x ,...x ,x x 002010=为初始向量. 由此看出,雅可比迭代法公式简单,每迭代一次只需计算一次矩阵和向量的乘法.在电算时需 要两组存储单元,以存放() k x 及() 1+k x . 例1 例1 用雅可比迭代法求解下列方程组 ??? ??=+--=-+-=--2 45382102 7210321321321.x x x .x x x .x x x 解 将方程组按雅可比方法写成 ?? ?? ???++=++=++=8402020830201072 020******* 2321.x .x .x .x .x .x .x .x .x 取初始值 ()()()() ()()T T ,,,x ,x ,x x 0000302010==按迭代公式

雅可比迭代法和高斯-赛德尔迭代法

题目:使用雅可比迭代法和高斯-赛德尔迭代法求解线性方程组,C语言实现 本人编写了一个特定的解决方案程序,并且利用其对课本156页例1进行验证,主要代码和运行结果如下: 1.代码: # include # include # define N 3 /* *使用雅可比迭代法和高斯-赛德尔迭代法求解线性方程组 */ main(){ float NF2(float *x,float *y); float A[N][N],b[N],sum=0; float x[N],y[N]={0},x0[N]; int i,j,n=0; //输入系数矩阵 printf("please input the Coefficient Matrix:"); for(i=0;i

数值分析课程设计 雅克比迭代、高斯赛德尔迭代、超松弛迭代

数值分析课程设计 求解线性方程组的雅克比迭代法、高斯-赛德尔迭代法和超松弛迭代法的算法实现 学院:数学科学学院 学号:11111111111 姓名:hhhhhhhhhh 班级:计算0901

实验报告 一 实验目的与要求(实验题目) 1.分别利用雅可比迭代法和高斯-塞德尔迭代法求解以下线性方程组 使得误差不超过 2.用超松弛迭代法求解方程方程组:(ω=1.1) 使得误差不超过 二 计算公式 1. 雅可比迭代法 ? ??[] ,...,,k ,n ,...,i x a b a x n i j j ) k (j j i i ii )k (i 21021111==∑-=≠=+ 其中 ()()()()()T n x ,...x ,x x 002010=为初始向量. 2.高斯-塞德尔迭代法 ? ??[] ,... ,,k ,n ,,i x a x a b a x i j n i j ) k (j ij ) k (j ij i ii )k (i 21021111111==∑∑--=-=+=++ 其中 ()()()() ()T n x ,...x ,x x 002010=为初始向量. 3.超松弛迭代法 ?? ????=?=--+=∑∑-==++,1,0,n 2,1,/)(111)() 1()()1(k i a x a x a b x x ii i j n j k j ij k j ij i k i k i ,ω 其中 ()()()() ()T n x ,...x ,x x 002010=为初始向量. ??? ??=+-=++--=++310322024112 125321 321321x x x x x x x x x 4 10-??? ??-=+-=-+-=-344 41432 32121x x x x x x x 6 105-?

matlab高斯-赛德尔迭代程序

matlab中应用的高斯-赛德尔迭代程序 主程序如下: function X=gsdddy(A,b,X0,P,wucha,max1) D=diag(diag(A));U=-triu(A,1); L=-tril(A, -1);dD=det(D); if dD==0 disp('请注意:因为对角阵D奇异,所以此方程无解') else disp('请注意:因为对角阵距D非奇异,所以此方程有解') iD=inv(D -L);B2=iD*U;f2=iD*b;jX=A\b; X=X0;[n m]=size(A); for k=1:max1 X1=B2*X+f2;djwcX=norm(X1 -X,P); xdwcX=djwcX/(norm(X,P)+eps); if(djwcX> A=[10 3 1;2 -10 3;1 3 10]; >> b=[14;11;20];X0=[0 0 0]'; >> X=gsdddy(A,b,X0,inf,0.001,100) 请注意:因为对角矩阵D非奇异,所以此方程组有解。

高斯赛德尔迭代法matlab编程

高斯赛德尔迭代法 matlab 编程 function[x,k]=GaussSeidel(A,b,x0,eps,M) %高斯赛德尔迭代法求方程组的解(矩阵公式求解) %A 为方程组的系数矩阵; b 为方程组的右端项 %x 为线性方程组的解了; x0 为迭代初值 %eps为误差限;M为迭代的最大次数 if nargin==3 eps= 1.0e-6;%默认精度 M = 10000;% 参数不足时默认后两个条件 elseif nargin ==4 M = 10000;% 参数的默认值 elseif nargin<3 error(' 参数不足 '); return end [n,m]=size(A); nb=length(b); %当方程组行与列的维数不相等时,停止计算,并输出出错信息 if n~=m error(' 矩阵 A 行数和列数必须相等 !'); return; end %当方程组与右端项的维数不匹配时,停止计算,并输出出错信息 if n~=nb error('矩阵A的行数必须和b的长度相等!'); return; end L =zeros(n,n); U =zeros(n,n); D =zeros(n,n); for i=2:n for j=1:i-1 L(i,j)=-A(i,j); end end for i=1:n-1 for j=i+1:n U(i,j)=-A(i,j); end end for i=1:n D(i,i)=A(i,i); end B=inv(D-L)*U; %B 为迭代矩阵 g=inv(D-L)*b; %g 为右端项 高斯赛德尔迭代法 matlab 编程

雅克比迭代法、高斯-赛德尔迭代法

昆明理工大学(计算机算法)实验报告 实验名称: 实验时间:2009 年 6 月 3 日 专业:电信071 姓名:李春华 学号:200711102118成绩: 一、实验目的 1.通过实验进一步掌握高斯消去法的基本思想; 2.通过上机实验进一步掌握高斯消去法的计算步骤,并能灵活运 用; 3.通过对高斯消去法的调试练习,进一步体会他的特点; 4.通过上机调试运行,逐步培养解决实际问题的编程能力。 二、实习要求 1.熟悉Turbo C的编译环境; 2.实习前复习雅可比迭代法、高斯—塞得儿迭代法的计算步骤。 三、实习设备 1.硬件设备:单机或网络环境下的微型计算机一台; 2.软件设备:DOS 3.3以上炒作系统,Turbo C2.0编译器。

四、实习内容 雅可比迭代法与高斯—塞得儿迭代法 用雅可比雅可比迭代法与高斯—塞得儿迭代法求解线性方程组Ax=b: 要求:(1)写出程序的运行结果。 (2)写出迭代次数。 程序如下: 1、雅可比迭代法 #include #include #define n 3 #define MAX_N 100 #define eps 1e-6 int yacobi(fl oat a[n][n],fl oat b[n],fl oat x[n]) { fl oat d,s,max; fl oat y[n]; int i,j,k,flag; k=0; for(i=0;i

x[i]=0.0; while(1) { max=0.0; k++; for(i=0;i

相关主题
文本预览
相关文档 最新文档