文档详情

Gauss-Seidel 迭代法线性方程组求解.doc

发布:2017-10-14约5.28千字共15页下载文档
文本预览下载声明
1、编程实现以下科学计算算法,并举一例应用之。 (参考书籍《精 通MALAB科学计算》 ,王正林等著,电子工业出版社,2009 年) “Gauss-Seidel 迭代法线性方程组求解” (1)迭代解法的基本思想: 根据给定方程组,设计出一个迭代公式,构造一数组的序列xi0,代入迭代公式,计算出xi1,在代入迭代公式,经过k次迭代运算后得到xik,若xik收敛于某一极限数组xi,则xi就是方程组的近似解。 迭代过程本质上就是计算极限的过程,一般不能得到精确解。但迭代的优点是程序简单,适合大型方程组求解,然而,缺点是要判断迭代是否收敛和收敛速度的问题。 (2)算法说明: Gauss-Seidel迭代法与简单迭代法类似,只是迭代公式有所改进。 简单迭代法:; Gauss-Seidel迭代法:; 设方程组Ax=b,其中A和b中的元素都为常数,且A为非奇异,则A分可写成:A=D-L-U。 其中D上网意义同Jacobi迭代法,L为下三角矩阵,U为上三角矩阵,他的迭代公式为: 在MATLAB中编程实现的Gauss-Seidel迭代法函数为:gauseidel。 功能:用Gauss-Seidel迭代求线性方程组ax=b的解。 调用格式:[x,n]=gauseidel(A,b,x0,eps,M). 其中,A为线性方程组的系数矩阵; b为线性方程组中的常数向量; x0为迭代初始向量; eps为解的精度控制(此参数可选); M为迭代步数控制(此参数可选); x为线性方程组的解; n为求出所需精度的解实际迭代步数。 (3)Gauss-Seidel迭代法的MATLAB程序代码如下: function [x,n]=gauseidel(A,b,x0,eps,M) %采用Gauss-Seidel迭代法求线性方程组Ax=b的解 %线性方程组的系数矩阵:A %线性方程组的常数向量:b %迭代初始向量:x0 %解的精度控制:eps %迭代步数控制:M %线性方程组的解:x %求出所需精度的解实际的迭代步数:n if nargin ==3 eps=1.0e-6; %eps表示迭代精度 M=200; %M表示迭代步数的限制值 elseif nargin ==4 M=200; elseif nargin 3 error return; end D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); G=(D-L)\U; f=(D-L)\b; x=G*x0+f; n=1; %迭代过程 while norm(x-x0)eps x0=x; x=G*x0+f; n=n+1; %n为最终求出解时的迭代步数 if n=M disp(Warning:迭代次数太多,可能不收敛!); end end (4)进行实例分析: A=[1.4449 0.7948 0.8801;0.6946 1.9568 0.1730;0.6213 0.5226 1.9797]; b=[1 0 1]; x0=zeros(3,1); [x,n]=gauseidel(A,b,x0) x = %输出结果 0.5929 -0.2444 0.3836 n = 11 %输出迭代次数n (5)运行图以即流程图: ①运行图: ②流程图: ②例题流程图: 一、分析电路:(RC充电电路) 当t0时,开关K位于“1”,电路以达到平衡Uc(0+)=Uc(0-)=-12V, iR2(0-)=3A; 当t0时,ic(0+)=-Uc(0+)/(R2*R3/(R2+R3)),达到稳态后,电容中将无电流icf=0A,电流源的全部电流将在两个电阻之间分配,保证端电压相同(也就是电容上的终电压)。即:UR3= Ucf=12V。 由一阶响应电路可用三要素法得到电压公式:,时间常数。 ,且Req=12*6/18=4,=4(s)。同时,以相同的方法得到电流公式:,=4(s)。 可以得到电阻R2的表达式:。 二、源程序设计: r1=3; r2=12; r3=6; us=18; is=3; c=1; uc0=-12; %电容C的初始电压值 ucf=12; %电容C的最终稳态电压值 icf=0; %电容C的最终稳态电电流值 T=r2*r3/(r2+r3); %电路时间常数 t=[0:0.0
显示全部
相似文档