当前位置:文档之家› 4-16 -欧拉方程、求解线性非齐次高阶方程的特解、待定系数法

4-16 -欧拉方程、求解线性非齐次高阶方程的特解、待定系数法

4-16 -欧拉方程、求解线性非齐次高阶方程的特解、待定系数法
4-16 -欧拉方程、求解线性非齐次高阶方程的特解、待定系数法

4.3 欧拉方程、非齐次高阶线性方程特解的待定系数方法

(How to Solve Euler equation, Use the method of undetermined coefficients to find particular solution to nonhomogeneous higher order Linear ODE)

[教学内容] 1. 介绍欧拉方程及其解法. 2. 介绍非齐次线性方程特解的待定系数求法. 3. 介绍非齐次线性方程特解的常数变易法.

[教学重难点] 重点是知道欧拉方程的特征方程,并能获得原欧拉方程的基本解组;如何运用待定系数法或常数变易法求解非齐次线性方程的特解; 难点是如何由非齐次线性方程中f(t)的形式合适选择特解的形式.

[教学方法] 预习1、2、3;讲授1、2、3

[考核目标]

1. 能写出欧拉方程的特征方程的形式

2. 能由欧拉方程的特征方程的特征根写出原微分方程基本解组;

3. 知道待定系数法求解非齐次线性方程的特解;

4. 知道运用常数变易法求解非齐次线性方程的特解.

1. 认识欧拉方程.

(1) 称形如0qy pxy''y'x 2=++为欧拉等量纲方程

(Euler ’s equi-dimensional equation ),其中p 和q 都是常数.

(2) 解法:令自变量替换t

e x =将原方程化为常系数方程: dt dy e (dx/dt)1dt dy dx dt dt dy dx dy t -=?=?=; dt

dy dt dy xe dx dy x t ==-; )dx

dt dt y d (e dt dy )dx dt e ()dt dy (e dx d dx y d 22t t t 22---+?-==; 2222t 2t 2222

dt y d dt dy -)dx dt dt y d (e x dt dy )dx dt e (x dx y d x +=+?-=--; 因此,原方程化为0qy dt

dy 1)(p dt y d 22=+-+,这是一个常系数线性微分方程. 令)x (y e y λλt ==代入方程得到,方程为0q)1)λ(p (λe 2

t =+-+λ(或0q p λ1)λ(λ=++-),称0q p λ1)λ(λ=++-为欧拉方程的特征方程.

由此得到新方程的基本解组为t λt λ21e ,e 或t λt λ11 te ,e ,或)sin(),cos(t e t e t t ββαα.

返回原变量得到欧拉方程的基本解组为21λλx ,x 或11λλx |x |ln ,x ,或

|)|ln sin(|),|ln cos(x x x x ββαα.

例52. 求解微分方程0y dx dy x dx d x 222

=+-y . 解:注意到这是一个欧拉等量纲方程,令λt λe x y ==,得到欧拉方程的特征方程为 01λ1)-λ(λ=+-,解得01)(λ2=-. 于是1λ=为二重根.

于是得到欧拉方程的基本解组为t t te ,e ,返回原变量为11x |x |ln ,x ,因此原欧拉方程的通解为R c ,c |,x |xln c x c y 2121∈+=.

例53 Find the general solution of the following equation: (1) 010y 3xy''y' x 2=++;

Solution (1) Let λλt x e y ==,then the associated characteristic equation of Euler equation is 0103λ1)λ(λ=++-. By solving the algebraic equation, we get 3i 12

i62λ1,2±-=±-=. Then two dependent solutions to the new equation is sin(3t)e cos(3t),e t t --, and fundamental solutions to Euler equation is |)x |sin(3ln x |),x |cos(3ln x 11--.

Therefore, the general solution is given by |)x |sin(3ln x c |)x |cos(3ln x c y 1211--+=, 21c ,c are two independent variables.

作业47. Find the general solution of each of the following equation: (1) 012y 2xy''y'x 2

=-+; (2) 04y 3xy''y'x 2=+-; (3) 05y dx dy 3x dx y d x 222

=++. 2. 非齐次线性微分方程特解待定系数方法求解(undetermined coefficients ’ method)

(1)非齐次线性微分方程通解结构:考察二阶非齐次线性微分方程f(t)q(t)dt dx p(t)dt x d 22=++. 若(t) x (t),x 21为0q(t)dt

dx p(t)dt x d 22=++的基本解组且(t)x *为原非齐次方程的一个特解,则原 非齐次线性方程的通解为(t)x (t)x c (t)x c x(t)*

2211++= 其中R c ,c 21∈. (一般地结论参见教材P127定理7)

(2)待定系数方法求解非齐次方程的特解

例54. 求解二阶非齐次方程(1) 2t 6x dt

dx dt x d 22=--; (2)2t dt x d 22=的一个特解.

解:(1) 方程的特征方程为062=--λλ,得到2λ 3,λ21-==. 猜想:原方程具有如下形式特解:B At (t)x *+=(原因是2 t C 经过两次求导最高次数为0,一次求导后最高次数为1,方程两边比较得到C=0),代入方程得到2t 6B 6At A =---,比较系数得到?

??=--=-06B A 26A ,得到181B ,31A =-=。因此所求原方程的一个特解为181t 31-(t)x *+=. (2) 由题意可设特解形式为2

3*Bt At (t)x +=,2B 6At dt x d 2Bt,3At dt dx 2*

22*+=+=(原因是2Ct 经过两次求导是常数,不可能等于2t ),代入原方程并比较t 的系数得到,2t 6At =,得到0B ,31A ==. 因此,所求特解为3*t 3

1(t)x =. 小结:考察f(t)q(t)dt

dx p(t)dt x d 22=++,c bt at f(t)2++=,(1)若0=λ不是相应齐次方程特征方程的特征根,则可设特解形式为C Bt At (t)x 2*++=;(2)若0=λ是微分方程的特征方程的k 重特征根,则可设特解形式为 C)Bt (At t (t)x 2k *++=.

作业48 求方程13t 3y dt

dy 2dt y d 22+=--的通解.

例55. 求解二阶非齐次方程(1) t 22e 2t 6x dt dx dt x d =--; (2)3t 22e 2t 6x dt

dx dt x d =--的通解. 解:(1) 方程的特征方程为06λλ2

=--,特征根为1λ 3,λ21-==. 令y e x t =,则原方程可化为2t y q ~dt

dy p ~dt y d 22=++. 由上例分析知,新方程具有如下形式特解B At y *+=,于是原方程具有形式特解B)(At e x t

*+=, A e B)(At e dt dx t t *

++=, A,e 2B)(At e t d x d t t 2*

2++=代入原方程得到,?

??=---+=--06B A B 2A B 26A A A ,得到181B 1/3,A -=-=. 所求特解为)18

1t 31(-e x t *-=. 因此,原方程的通解为)18

1t 31(-e e c e c x t 2t -23t 1*-++=,R c ,c 21∈.

(2) 方程的特征方程为06λλ2

=--,特征根为1λ 3,λ21-==. 令y e x t =,则原方程可化为2t y q ~dt

dy p ~dt y d 22=++. 由前面齐次线性方程知识和上例分析知,新方程的特征方程具有零特征根且重数为k=1,于是新方程具有如下形式特解B)t(At y *+=,于是原方程具有

形式特解Bt)(At e B) t(At e x 2

3t 3t *+=+=,B)2At Bt 3(3At e dt dx 23t *

+++=, 2A),6B 12A)t 9B ((9At e )A 23B (6At e 3B)6At 9Bt (9At e t

d x d 23t 3t 23t 2*

2++++=++++++=代入原方程得到,??

???=-+=---+=-0B 2A 6B 26B A 2B 3A 219B 06A 3A -9A ,得到252B 1/5,A -==. 所求特解为)25

1t 51(e x 3t *-=.

作业49 求方程(1) 3t e

y 3y''2y'-=++; (2) 1)(3t e 3y dt

dy 2dt y d t 22+=---的通解. 例55. 求解二阶非齐次方程(1) cos(2t)4x dt

dx 4dt x d 22=++; (2) cos(2t)e 4x dt

dx 4dt x d 2t 22=++ 的通解. 解:(1) 方程的特征方程为0442=++λλ,得到二重根22,1-=λ,于是相应的齐次方程的基本解组为2t 2t te ,e --. 改写)Re(e cos(2t)f(t)i 2t ==. 考察新方程 t 2i 22e 4x dt

dx 4dt x d =++,注意到i 2不是相应齐次方程特征方程的特征根,因此,由上例可设新方程的形式特解为 t

2i *Ae z =,于是 t 2i 22*2 t 2i *

Ae 2i)( t d z d ,2iAe dt dz ==, 代入方程得到,14A 8Ai 4A =++-,于是i 8

18i 1A -==,因此特解为c o s (2t )8

1s i n (2t )81z *i -=.

注意到)Re(z x *

*=为方程)Re(e cos(2t)4x dt dx 4dt x d 2it 22==++的解,因此,所求方程的一个特解为sin(2t)81x *=. 因此,原方程的通解为sin(2t)81te c e c x 2t 22t 1++=--,R c ,c 21∈.

(2) 方程的特征方程为0442

=++λλ,得到二重根22,1-=λ,于是相应的齐次方程的基本解组为2t 2t te ,e --. 改写)Re(e cos(2t)e f(t)i 2t)(22t +==. 考察新方程)t 2i (222e 4x dt

dx 4dt x d +=++,注意到2i 2+不是相应齐次方程特征方程的特征根,因此,由上例可设新方程的形式特解为 t 2i)(2*Ae

z +=,于是

t 2i 22*2 t 2i *

Ae 2i)2( t d z d ,2i)Ae 2(dt dz +=+=, 代入方程得到,14A 8iA 8A 8Ai =+++,于是400

16i -12i)61(121A =+=,因此特解为cos(2t))]25

1sin(2t)1003i(sin(2t)251cos(2t)1003[e z 2t *-++=. 注意到)Re(z x *

*=为方程)Re(e cos(2t)e 4x dt dx 4dt x d 2i)t (22t 22+==++的解,因此,所求方程的一个特解为s i n (2t )]251cos(2t)1003[

e x 2t

*+=. 因此,原方程的通解为s i n (2t )]251cos(2t)1003[e te c e c x 2t 2t

22t 1+++=--,R c ,c 21∈. 作业50 求方程(1) t cos e y 32y''y't -=+-的通解.

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

C++实现 牛顿迭代 解非线性方程组

C++实现牛顿迭代解非线性方程组(二元二次为例) 求解{0=x*x-2*x-y+0.5; 0=x*x+4*y*y-4; }的方程 #include #include #define N 2 // 非线性方程组中方程个数、未知量个数#define Epsilon 0.0001 // 差向量1范数的上限 #define Max 100 // 最大迭代次数 using namespace std; const int N2=2*N; int main() { void ff(float xx[N],float yy[N]); //计算向量函数的因变量向量yy[N] void ffjacobian(float xx[N],float yy[N][N]); //计算雅克比矩阵yy[N][N] void inv_jacobian(float yy[N][N],float inv[N][N]); //计算雅克比矩阵的逆矩阵inv void newdundiedai(float x0[N], float inv[N][N],float y0[N],float x1[N]); //由近似解向量x0 计算近似解向量x1 float x0[N]={2.0,0.25},y0[N],jacobian[N][N],invjacobian[N][N],x1[N],errornorm; int i,j,iter=0; //如果取消对x0的初始化,撤销下面两行的注释符,就可以由键盘x读入初始近似解向量for( i=0;i>x0[i]; cout<<"初始近似解向量:"<

常微分方程作业欧拉法与改进欧拉法

P77 31.利用改进欧拉方法计算下列初值问题,并画出近似解的草图:dy + =t = t y y ≤ ≤ ,2 ;5.0 0,3 )0( )1(= ,1 ? dt 代码: %改进欧拉法 function Euler(t0,y0,inv,h) n=round(inv(2)-inv(1))/h; t(1)=t0; y(1)=y0; for i=1:n y1(i+1)=y(i)+h*fun(t(i),y(i)); t(i+1)=t(i)+h; y(i+1)=y(i)+1/2*h*(fun(t(i),y(i))+ fun(t(i+1),y1(i+1))) end plot(t,y,'*r') function y=fun(t,y); y=y+1; 调用:Euler(0,3,[0,2],0.5) 得到解析解:hold on; y=dsolve('Dy=y+1','(y(0)=3)','t'); ezplot(y,[0,2]) 图像:

dy y =t - t y ;2.0 t = ≤ )0( 0,5.0 ,4 )2(2= ≤ ? ,2 dt 代码: function Euler1(t0,y0,inv,h) n=round(inv(2)-inv(1))/h; t(1)=t0; y(1)=y0; for i=1:n y1(i+1)=y(i)+h*fun(t(i),y(i)); t(i+1)=t(i)+h; y(i+1)=y(i)+1/2*h*(fun(t(i),y(i))+ fun(t(i+1),y1(i+1))) end plot(t,y,'*r') function y=fun(t,y); y=y^2-4*t; 调用: Euler1(0,0.5,[0,2],0.2) 图像:

常微分方程的解线性方程组的迭代法

实验五 解线性方程组的迭代法 【实验内容】 对1、设线性方程组 ?? ? ? ?? ? ? ?? ? ? ?? ? ? ??-=???????????????? ?????????????????? ? ?--------------------------211938134632312513682438100412029137264 2212341791110161035243120 536217758683233761624491131512 013012312240010563568 0000121324 10987654321x x x x x x x x x x ()T x 2,1,1,3,0,2,1,0,1,1*--= 2、设对称正定系数阵线性方程组 ?? ? ????? ??? ? ? ??---=????????????? ??????????????? ??---------------------4515229 23206019243360021411035204111443343104221812334161 2065381141402312122 00240424 87654321x x x x x x x x ()T x 2,0,1,1,2,0,1,1*--= 3、三对角形线性方程组

?? ? ?? ? ????? ??? ? ? ??----=???????????????? ?????????????????? ??------------------5541412621357410000000014100000000141000000001410000000014100000000141000000001410000000014100000000 14100000000 1410987654321x x x x x x x x x x ()T x 1,1,0,3,2,1,0,3,1,2*---= 试分别选用Jacobi 迭代法,Gauss-Seidol 迭代法和SOR 方法计算其解。 【实验方法或步骤】 1、体会迭代法求解线性方程组,并能与消去法加以比较; 2、分别对不同精度要求,如54310,10,10---=ε由迭代次数体会该迭代法的收敛快慢; 3、对方程组2,3使用SOR 方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者; 4、给出各种算法的设计程序和计算结果。 程序: 用雅可比方法求的程序: function [x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200;

欧拉及改进的欧拉法求解常微分方程

生物信息技术0801 徐聪U200812594 #include #include void f1(double *y,double *x,double *yy) { y[0]=2.0; x[0]=0.0; yy[0]=2.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y[i]=y[i-1]+0.2*(y[i-1]-x[i-1]); yy[i]=x[i]+1+exp(x[i]); printf("若x=%f,计算值是%f,真实值是%f,截断误差是%f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f2(double *y,double *x,double *yy) { y[0]=1.0; x[0]=0.0; yy[0]=1.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y[i]=y[i-1]+0.2*(2*y[i-1]+x[i-1]*x[i-1]); yy[i]=-0.5*(x[i]*x[i]+x[i]+0.5)+1.25*exp(2*x[i]); printf("若x=%f,计算值是%f,真实值是%f,截断误差是%f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f3(double *y,double *x,double *yy,double *y0) { y[0]=2.0; x[0]=0.0; yy[0]=2.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y0[i]=y[i-1]+0.2*(y[i-1]-x[i-1]); y[i]=y[i-1]+0.1*(y[i-1]-x[i-1]+y0[i-1]-x[i-1]);

线性方程组的迭代法及程序实现

线性方程组的迭代法及程序实现 学校代码:11517 学号:200810111217 HENAN INSTITUTE OF ENGINEERING 毕业论文 题目线性方程组的迭代法及程序实现 学生姓名 专业班级 学号 系 (部)数理科学系 指导教师职称 完成时间 2012年5月20日河南工程学院 毕业设计(论文)任务书 题目:线性方程组的迭代法及程序实现专业:信息与计算科学学号 : 姓名一、主要内容: 通过本课题的研究,学会如何运用有限元方法来解决线性代数方程组问题,特别是Gaussie-Seidel迭代法和Jacobi迭代法来求解线性方程组。进一步学会迭代方法的数学思想,并对程序代码进行解析与改进,这对于我们以后学习和研究实际问题具有重要的意义。本课题运用所学的数学专业知识来研究,有助于我们进一步掌握大学数学方面的知识,特别是迭代方法。通过这个课题的研究,我进一步掌握了迭代方法的思想,以及程序的解析与改进,对于今后类似实际问题的解决具有重要的意义。

二、基本要求: 学会编写规范论文,独立自主完成。 运用所学知识发现问题并分析、解决。 3.通过对相关资料的收集、整理,最终形成一篇具有自己观点的学术论文,以期能对线性方程组迭代法的研究发展有一定的实践指导意义。 4.在毕业论文工作中强化英语、计算机应用能力。 完成期限: 2012年月指导教师签名:专业负责人签名: 年月日 目录 中文摘要....................................................................................Ⅰ英文摘要 (Ⅱ) 1 综述 1 2 经典迭代法概述 3 2.1 Jacobi迭代法 3 2.2 Gauss?Seidel迭代法 4 2.3 SOR(successive over relaxation)迭代法 4 2.4 SSOR迭代法 5 2.5 收敛性分析5 2. 6 数值试验 6 3 matlab实现的两个例题8 3.1 例1 迭代法的收敛速度8 3.2 例 2 SOR迭代法松弛因子的选取 12致谢16参考文献17附录19

数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组

作业六:分别编写用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组Ax=B的标准程序,并求下列方程组的解。 可取初始向量 X(0) =(0,0,0)’; 迭代终止条件||x(k+1)-x(k)||<=10e-6 (1) = (2) = Jacobi迭代法: 流程图 开 始 判断b中的最大值 有没有比误差大 给x赋初值 进行迭代 求出x,弱到100次还没到,警告不收 结束

程序 clear;clc; A=[8,-1,1;2,10,01;1,1,-5]; b=[1;4;3]; e=1e-6; x0=[0;0;0]'; n=length(A); x=zeros(n,1); k=0; r=max(abs(b)); while r>e for i=1:n d=A(i,i); if abs(d)100 warning('不收敛'); end end x=x0;

程序结果(1)

(2)

Gauss-Seidel迭代法: 程序 clear;clc; %A=[8,-1,1;2,10,01;1,1,-5]; %b=[1;4;3]; A=[5,2,1;-1,4,2;2,-3,10]; b=[-12;20;3]; m=size(A); if m(1)~=m(2) error('矩阵A不是方阵'); end n=length(b); %初始化 N=0;%迭代次数 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=zeros(n,1);%d=inv(D+L)*b x=zeros(n,1); for i=1:n%初始化L和U for j=1:n if ij 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 %迭代开始 x1=x; x2=G*x+d; while norm(x2-x1,inf)>10^(-6)

牛顿迭代法求解非线性方程组的代码

牛顿迭代法求解非线性方程组 非线性方程组如下: 221122121210801080 x x x x x x x ?-++=??+-+=?? 给定初值()00.0T x =,要求求解精度达到0.00001 1.首先建立函数()F X ,方程编程如下,将F.m 保存到工作路径中: function f=F(x) f(1)=x(1)^2-10*x(1)+x(2)^2+8; f(2)=x(1)*x(2)^2+x(1)-10*x(2)+8; f=[f(1),f(2)] ; 2.建立函数()DF X ,用于求方程的jacobi 矩阵,将DF.m 保存到工作路径中: function df=DF(x) df=[2*x(1)-10,2*x(2);x(2)^2+1,2*x(1)*x(2)-10]; %jacobi 矩阵是一阶偏导数以一定方式排列成的矩阵。 3.编程牛顿迭代法解非线性方程组,将newton.m 保存在工作路径中: clear,clc; x=[0,0]'; f=F(x);

df=DF(x); fprintf('%d %.7f %.7f\n',0,x(1),x(2)); N=4; for i=1:N y=df\f'; x=x-y; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',i,x(1),x(2)); if norm(y)<0.0000001 break; else end end ezplot('x^2-10*x+y^2+8',[-6,6,-6,6]); hold on ezplot('x*y^2+x-10*y+8',[-6,6,-6,6]); 运行结果如下: 0 0.0000000 0.0000000 1 0.8000000 0.8800000 2 0.9917872 0.9917117 3 0.9999752 0.9999685

求解线性方程组——超松弛迭代法(c)

求解线性方程组——超松弛迭代法 #include #include using namespace std; float *one_array_malloc(int n); //一维数组分配float **two_array_malloc(int m,int n); //二维数组分配float matrix_category(float* x,int n); int main() { const int MAX=100;//最大迭代次数 int n,i,j,k; float** a; float* x_0; //初始向量 float* x_k; //迭代向量 float precision; //精度 float w; //松弛因子 cout<<"输入精度e:"; cin>>precision; cout<>n; a=two_array_malloc(n,n+1); cout<>a[i][j]; } } x_0=one_array_malloc(n); cout<>x_0[i]; } x_k=one_array_malloc(n);

cout<<"输入松弛因子w (1>w; float temp; //迭代过程 for(k=0;k

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

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

一. 问题描述 用Gauss-Seidel 迭代法求解线性方程组 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值。使用了两倍的存储空间,浪费了存储空间。若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量 ) 1(+k i x 时,用最新分量 ) 1(1 +k x , ???+) 1(2 k x ) 1(1 -+k i x 代替旧分量 ) (1 k x , ???) (2 k x ) (1 -k i x ,可以起 到节省存储空间的作用。这样就得到所谓解方程组的Gauss-Seidel 迭代法。 二. 算法设计 将A 分解成U D L A --=,则b x =A 等价于b x =--U)D (L 则Gauss-Seidel 迭代过程 ) ()1()1(k k k Ux Lx b Dx ++=++ 故 ) ()1()(k k Ux b x L D +=-+ 若设1 )(--L D 存在,则 b L D Ux L D x k k 1)(1)1()()(--+-+-= 令 b L D f U L D G 11)()(---=-=,

则Gauss-Seidel 迭代公式的矩阵形式为 f Gx x k k +=+) () 1( 其迭代格式为 T n x x x x ) ()0()0(2)0(1)0(,,,???= (初始向量), ) (1 1 1 1 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(111 1)()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 ,,,;,,, 三. 程序框图

第8章 常微分方程数值解法 本章主要内容: 1.欧拉法

第8章 常微分方程数值解法 本章主要内容: 1.欧拉法、改进欧拉法. 2.龙格-库塔法。 3.单步法的收敛性与稳定性。 重点、难点 一、微分方程的数值解法 在工程技术或自然科学中,我们会遇到的许多微分方程的问题,而我们只能对其中具有较简单形式的微分方程才能够求出它们的精确解。对于大量的微分方程问题我们需要考虑求它们的满足一定精度要求的近似解的方法,称为微分方程的数值解法。本章我们主要 讨论常微分方程初值问题?????==00 )() ,(y x y y x f dx dy 的数值解法。 数值解法的基本思想是:在常微分方程初值问题解的存在区间[a,b]内,取n+1个节点a=x 0<x 1<…<x N =b (其中差h n = x n –x n-1称为步长,一般取h 为常数,即等步长),在这些节点上把常微分方程的初值问题离散化为差分方程的相应问题,再求出这些点的上的差分方程值作为相应的微分方程的近似值(满足精度要求)。 二、欧拉法与改进欧拉法 欧拉法与改进欧拉法是用数值积分方法对微分方程进行离散化的一种方法。 将常微分方程),(y x f y ='变为() *+=?++1 1))(,()()(n x n x n n dt t y t f x y x y 1.欧拉法(欧拉折线法) 欧拉法是求解常微分方程初值问题的一种最简单的数值解法。 欧拉法的基本思想:用左矩阵公式计算(*)式右端积分,则得欧拉法的计算公式为:N a b h N n y x hf y y n n n n -= -=+=+)1,...,1,0(),(1 欧拉法局部截断误差 11121 )(2 ++++≤≤''=n n n n n x x y h R ξξ或简记为O (h 2)。

Newton迭代法求解非线性方程

Newton迭代法求解非 线性方程

一、 Newton 迭代法概述 构造迭代函数的一条重要途径是用近似方程来代替原方程去求根。因此,如果能将非线性方程f (x )=0用线性方程去代替,那么,求近似根问题就很容易解决,而且十分方便。牛顿(Newton)法就是一种将非线性方程线化的一种方法。 设k x 是方程f (x )=0的一个近似根,把如果)(x f 在k x 处作一阶Taylor 展开,即: )x x )(x ('f )x (f )x (f k k k -+≈ (1-1) 于是我们得到如下近似方程: 0)x x )(x ('f )x (f k k k =-+ (1-2) 设0)('≠k x f ,则方程的解为: x ?=x k +f (x k ) f (x k )? (1-3) 取x ~作为原方程的新近似根1+k x ,即令: ) x ('f ) x (f x x k k k 1k -=+, k=0,1,2,… (1-4) 上式称为牛顿迭代格式。用牛顿迭代格式求方程的根的方法就称为牛顿迭代法,简称牛顿法。 牛顿法具有明显的几何意义。方程: )x x )(x ('f )x (f y k k k -+= (1-5) 是曲线)x (f y =上点))x (f ,x (k k 处的切线方程。迭代格式(1-4)就是用切线式(1-5)的零点来代替曲线的零点。正因为如此,牛顿法也称为切线法。 牛顿迭代法对单根至少是二阶局部收敛的,而对于重根是一阶局部收敛的。一般来说,牛顿法对初值0x 的要求较高,初值足够靠近*x 时才能保证收敛。若

要保证初值在较大范围内收敛,则需对)x (f 加一些条件。如果所加的条件不满足,而导致牛顿法不收敛时,则需对牛顿法作一些改时,即可以采用下面的迭代格式: ) x ('f ) x (f x x k k k 1k λ -=+, ?=,2,1,0k (1-6) 上式中,10<λ<,称为下山因子。因此,用这种方法求方程的根,也称为牛顿下山法。 牛顿法对单根收敛速度快,但每迭代一次,除需计算)x (f k 之外,还要计算 )x ('f k 的值。如果)x (f 比较复杂,计算)x ('f k 的工作量就可能比较大。为了避免计算导数值,我们可用差商来代替导数。通常用如下几种方法: 1. 割线法 如果用 1 k k 1k k x x ) x (f )x (f ----代替)x ('f k ,则得到割线法的迭代格式为: )x (f ) x (f )x (f x x x x k 1k k 1 k k k 1k --+---= (1-7) 2. 拟牛顿法 如果用 ) x (f )) x (f x (f )x (f k 1k k k ---代替)x ('f k ,则得到拟牛顿法的迭代格式为: )) x (f x (f )x (f ) x (f x x 1k k k k 2k 1k -+--- = (1-8) 3. Steffenson 法 如果用 ) x (f ) x (f ))x (f x (f k k k k -+代替)x ('f k ,则得到拟牛顿法的迭代格式为: ) x (f ))x (f x (f ) x (f x x k k k k 2k 1 k -+- =+

数值计算_第4章 解线性方程组的迭代法

第4章解线性方程组的迭代法 用迭代法求解线性方程组与第4章非线性方程求根的方法相似,对方程组进行等价变换,构造同解方程组(对可构造各种等价方程组, 如分解,可逆,则由得到),以此构造迭代关系式 (4.1) 任取初始向量,代入迭代式中,经计算得到迭代序列。 若迭代序列收敛,设的极限为,对迭代式两边取极限 即是方程组的解,此时称迭代法收敛,否则称迭代法发散。我们将看到,不同于非线性方程的迭代方法,解线性方程组的迭代收敛与否完全决定于迭代矩阵的性质,与迭代初始值的选取无关。迭代法的优点是占有存储空间少,程序实现简单,尤其适用于大型稀疏矩阵;不尽人意之处是要面对判断迭代是否收敛和收敛速度的问题。 可以证明迭代矩阵的与谱半径是迭代收敛的充分必要条件,其中是矩阵的特征根。事实上,若为方程组的解,则有 再由迭代式可得到

由线性代数定理,的充分必要条件。 因此对迭代法(4.1)的收敛性有以下两个定理成立。 定理4.1迭代法收敛的充要条件是。 定理4.2迭代法收敛的充要条件是迭代矩阵的谱半径 因此,称谱半径小于1的矩阵为收敛矩阵。计算矩阵的谱半径,需要求解矩阵的特征值才能得到,通常这是较为繁重的工作。但是可以通过计算矩阵的范数等方法简化判断收敛的 工作。前面已经提到过,若||A||p矩阵的范数,则总有。因此,若,则必为收敛矩阵。计算矩阵的1范数和范数的方法比较简单,其中 于是,只要迭代矩阵满足或,就可以判断迭代序列 是收敛的。 要注意的是,当或时,可以有,因此不能判断迭代序列发散。

在计算中当相邻两次的向量误差的某种范数小于给定精度时,则停止迭代计算,视为方程组的近似解(有关范数的详细定义请看3.3节。) 4.1雅可比(Jacobi)迭代法 4.1.1 雅可比迭代格式 雅可比迭代计算 元线性方程组 (4.2) 写成矩阵形式为。若将式(4.2)中每个方程的留在方程左边,其余各项移到方程右边;方程两边除以则得到下列同解方程组: 记,构造迭代形式

迭代法解线性方程组

迭代法解线性方程组作业 沈欢00986096 北京大学工学院,北京100871 2011年10月12日 摘要 由所给矩阵生成系数矩阵A和右端项b,分析系数矩阵A,并用Jacobi迭代法、GS迭代法、SOR(逐步松弛迭代法)解方程组Ax=b 1生成系数矩阵A、右端项b,并分析矩阵A 由文件”gr900900c rg.mm”得到了以.mm格式描述的系数矩阵A。A矩阵是900?900的大型稀 疏对称矩阵。于是,在matlaB中,使用”A=zeros(900,900)”语句生成900?900的零矩阵。再 按照.mm文件中的描述,分别对第i行、第j列的元素赋对应的值,就生成了系数矩阵A,并 将A存为.mat文件以便之后应用。 由于右端项是全为1的列向量,所以由语句”b=ones(900,1)”生成。 得到了矩阵A后,求其行列式,使用函数”det(A)”,求得结果为”Inf”,证明行列式太大,matlaB无法显示。由此证明,矩阵A可逆,线性方程组 Ax=b 有唯一解。 接着,判断A矩阵是否是对称矩阵(其实,这步是没有必要的,因为A矩阵本身是对称矩阵,是.mm格式中的矩阵按对称阵生成的)。如果A是对称矩阵,那么 A?A T=0 。于是,令B=A?A T,并对B求∞范数。结果显示: B ∞=0,所以,B是零矩阵,也就是:A是对称矩阵。 然后,求A的三个条件数: Cond(A)= A ? A?1 所求结果是,对应于1范数的条件数为:377.2334;对应于2范数的条件数为:194.5739;对应 于3范数的条件数为:377.2334; 1

从以上结果我们看出,A是可逆矩阵,但是A的条件数很大,所以,Ax=b有唯一解并且矩阵A相对不稳定。所以,我们可以用迭代方法来求解该线性方程组,但是由于A的条件数太大迭代次数一般而言会比较多。 2Jacobi迭代法 Jacobi迭代方法的程序流程图如图所示: 图1:Jacobi迭代方法程序流程图 在上述流程中,取x0=[1,1,...,1]T将精度设为accuracy=10?3,需要误差满足: error= x k+1?x k x k+1

MATLAB求解常微分方程数值解

利用MATLAB求解常微分方程数值解

目录 1. 内容简介 (1) 2. Euler Method(欧拉法)求解 (1) 2.1. 显式Euler法和隐式Euler法 (2) 2.2. 梯形公式和改进Euler法 (3) 2.3. Euler法实用性 (4) 3. Runge-Kutta Method(龙格库塔法)求解 (5) 3.1. Runge-Kutta基本原理 (5) 3.2. MATLAB中使用Runge-Kutta法的函数 (7) 4. 使用MATLAB求解常微分方程 (7) 4.1. 使用ode45函数求解非刚性常微分方程 (8) 4.2. 刚性常微分方程 (9) 5. 总结 (9) 参考文献 (11) 附录 (12) 1. 显式Euler法数值求解 (12) 2. 改进Euler法数值求解 (12) 3. 四阶四级Runge-Kutta法数值求解 (13) 4.使用ode45求解 (14)

1.内容简介 把《高等工程数学》看了一遍,增加对数学内容的了解,对其中数值解法比较感兴趣,这大概是因为在其它各方面的学习和研究中经常会遇到数值解法的问题。理解模型然后列出微分方程,却对着方程无从下手,无法得出精确结果实在是让人难受的一件事情。 实际问题中更多遇到的是利用数值法求解偏微分方程问题,但考虑到先从常微分方程下手更为简单有效率,所以本文只研究常微分方程的数值解法。把一个工程实际问题弄出精确结果远比弄清楚各种细枝末节更有意思,因此文章中不追求非常严格地证明,而是偏向如何利用工具实际求解出常微分方程的数值解,力求将课程上所学的知识真正地运用到实际方程的求解中去,在以后遇到微分方程的时候能够熟练运用MATLAB得到能够在工程上运用的结果。 文中求解过程中用到MATLAB进行数值求解,主要目的是弄清楚各个函数本质上是如何对常微分方程进行求解的,对各种方法进行MATLAB编程求解,并将求得的数值解与精确解对比,其中源程序在附录中。最后考察MATLAB中各个函数的适用范围,当遇到实际工程问题时能够正确地得到问题的数值解。 2.Euler Method(欧拉法)求解 Euler法求解常微分方程主要包括3种形式,即显式Euler法、隐式Euler法、梯形公式法,本节内容分别介绍这3种方法的具体内容,并在最后对3种方法精度进行对比,讨论Euler法的实用性。 本节考虑实际初值问题 使用解析法,对方程两边同乘以得到下式

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

数值分析实验五 班级: 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

fortran下欧拉法求解常微分方程(实例)

1. Euler 公式 100(,)() i i i i y y hf x y y y x +=+??=? 实例: ,00(,),0,1,01f x y x y x y x =-==≤≤ 精确解为:1x y x e -=+- 程序代码: DIMENSION x(0:20),y(0:20),z(0:20),k(0:21) DOUBLE PRECISION x,y,z,k,h,x0,y0,z0,k0,n f(x,y)=x-y n=20 h=1/n x(0)=0 y(0)=0 DO i=0,n-1 y(i+1)=y(i)+f(x(i),y(i))*h x(i+1)=x(i)+h ENDDO k(0)=0 DO i=0,n z(i)=k(i)+exp(-k(i))-1 k(i+1)=k(i)+h END DO open(10,file='1.txt') WRITE(10,10) (x(i),y(i),z(i),i=0,20) WRITE(*,10) (x(i),y(i),z(i),i=0,20) 10 FORMAT(1x,f10.8,2x,f10.8,2x,f10.8/) END 输出结果: 0.00000000 0.00000000 0.00000000 0.05000000 0.00000000 0.00122942 0.10000000 0.00250000 0.00483742 0.15000000 0.00737500 0.01070798 0.20000000 0.01450625 0.01873075 0.25000000 0.02378094 0.02880078 ???=='00)(),(y x y y x f y ???=='0 0)(),(y x y y x f y

基于Matlab的牛顿迭代法解非线性方程组

基于Matlab 实现牛顿迭代法解非线性方程组 已知非线性方程组如下 2211221212 10801080x x x x x x x ?-++=??+-+=?? 给定初值0(0,0)T x =,要求求解精度达到0.00001 首先建立函数F(x),方程组编程如下,将F.m 保存到工作路径中: function f=F(x) f(1)=x(1)^2-10*x(1)+x(2)^2+8; f(2)=x(1)*x(2)^2+x(1)-10*x(2)+8; f=[f(1) f(2)]; 建立函数DF(x),用于求方程组的Jacobi 矩阵,将DF.m 保存到工作路径中: function df=DF(x) df=[2*x(1)-10,2*x(2);x(2)^2+1,2*x(1)*x(2)-10]; 编程牛顿迭代法解非线性方程组,将newton.m 保存到工作路径中: clear; clc x=[0,0]'; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',0,x(1),x(2)); N=4; for i=1:N y=df\f'; x=x-y; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',i,x(1),x(2)); if norm(y)<0.0000001 break ; else end end

运行结果如下: 0 0.0000000 0.0000000 1 0.8000000 0.8800000 2 0.9917872 0.9917117 3 0.9999752 0.9999685 4 1.0000000 1.0000000

实验解线性方程组的基本迭代法实验

数值分析实验报告

0 a 12 K a 1,n 1 K a 2,n 1 U O M 则有: 第一步: Jacobi 迭代法 a 1n a 2n M , 则有: A D L U a n 1,n Ax b A A x D b L U (D L U)x b Dx (L U)x b x D (L U)x D b 令 J D (L U) 则称 J 为雅克比迭代矩阵 f D b 由此可得雅克比迭代的迭代格式如下: x (0) , 初始向量 x (k 1) Jx (k) f ,k 0,1,2,L 第二步 Gauss-Seidel 迭代法 Ax b (D L U )x b (D L)x Ux b x (D L) Ux (D L) b A D L U a 11 a 12 L a 1n a 11 A a 21 a 22 L a 2n a 22 M MM MO a n1 a n2 L a nn a 11 得到 D a 22 O a nn 由 a 21 0 M M O a n 1,1 a n 1,2 L 0 a nn a n1 a n2 L a n,n a 21 L M M O a n 1,1 a n 1,2 L a n1 a n2 L a n,n 1 a 12 K a 1,n 1 a 1n 0 K a 2,n 1 a 2n O M M a n 1,n 10

令 G (D L) U ,则称G 为Gauss-Seidel 迭代矩阵 f (D L) b 由此可得 Gauss-Seidel 迭代的迭代格式如下: x (0) , 初始向量 第三步 SOR 迭代法 w0 AD L U 1 ( D 1 wL ((1 w)D wU )) (D 1 wL) ((1 w)D wU ) w w w 令M w 1 (D wL), N 1 ((1 w)D wU )则有:A MN w w Ax b AM L W N M (M N )x b Mx Nx b x M Nx M b N M, 令W f Mb 带入 N 的值可有 L W ((1 w)D wU) (D wL) 1((1 w)D wU) (D wL) f 1 b w 1(D wL) 1b 1 (D wL) w 称 L W 为 SOR 迭代矩阵,由此可得 SOR 迭代的迭代格式如下: x (0) ,初始向量 二、算法程序 Jacobi 迭代法的 M 文件: function [y,n]=Jacobi(A,b,x0,eps) %************************************************* %函数名称 Jacobi 雅克比迭代函数 %参数解释 A 系数矩阵 % b 常数项 % x0 估计解向量 x (k 1) Gx (k) f ,k 0,1,2,L (k 1) f,k 0,1,2,L

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