常微分方程数值解法
- 格式:doc
- 大小:1.08 MB
- 文档页数:22
常微分方程的数值解法及其应用研究引言:常微分方程是数学中的重要分支,广泛应用于自然科学、工程技术和社会经济等领域。
常微分方程的解析解往往难以获得,因此数值解法的研究成为解决实际问题的有效手段。
本文将介绍常微分方程的数值解法以及其在各个领域的应用。
一、常微分方程的数值解法1. 欧拉方法欧拉方法是最基本的数值解法之一,通过将微分方程中的函数进行逐步的线性近似,得到方程的递推关系,并根据该关系逼近解析解。
欧拉方法具有简单、易于实现的优点,但在稳定性和精度方面存在一定的局限性。
2. 改进的欧拉方法改进的欧拉方法通过使用中点梯形公式,对欧拉方法的误差进行修正,提高了数值解的准确性。
改进的欧拉方法在简单性和准确性方面取得了一定的平衡。
3. 4阶龙格-库塔法4阶龙格-库塔法是一类常用的数值解法,通过计算多个近似解,并按照一定的权重进行加权平均,得到更高精度的数值解。
4阶龙格-库塔法具有高精度和较好的稳定性,被广泛应用于各个领域。
4. 多步法多步法是一类基于历史步长的数值解法,利用之前计算的步长来估计下一个步长的近似值。
常见的多步法包括亚当斯方法和预报校正方法等。
多步法在一定程度上提高了数值解的稳定性和准确性。
5. 常微分方程的辛方法辛方法是一类特殊的数值解法,能够保持微分方程的守恒性质。
辛方法在长时间积分和保持能量守恒方面具有优势,被广泛应用于天体力学和分子动力学等领域。
二、常微分方程数值解法的应用1. 物理科学中的应用常微分方程的数值解法在物理学中有广泛的应用,如天体力学中的行星轨道计算、量子力学中的薛定谔方程求解等。
数值解法处理了复杂的物理现象,为物理学研究提供了可行的途径。
2. 工程技术中的应用常微分方程的数值解法在工程技术中被广泛应用,如电路分析、结构力学、流体力学等。
通过数值解法,可以模拟和分析复杂的工程问题,提供设计和优化方案。
3. 经济学中的应用经济学中的许多问题可以转化为常微分方程的形式,如经济增长模型、市场供需关系等。
介绍常微分方程数值解法常微分方程(ordinary differential equations,ODE)可用于描述许多日常存在的物理系统。
处理ODE问题常常被称为数值求解法,这指的是找到概括ODE或者其他适用于数学模型的解决方案来模括这些ODE。
这种解决方案可能在一系列不同方案中发挥重要作用,以此来提供更好的解释和预测。
常微分方程与几何图形更为相关,它利用二维或者三维空间中曲线的绘制以及分析。
通过引入一些不同的方法,可以对不同的常微分方程中的量进行描述,使得可以通过数值方法的解析来进行研究。
数值解法可能是时间消耗较多的,但有助于验证几何图形中的某些过程,以此帮助揭示数学模型。
四种常见的常微分方程数值解法四种常见的常微分方程数值解法是:前向差分法、向后差分法、中点法和全分方法。
•前向差分法:前向差分法的基本概念是利用ODE的特定解来表达时间步的影响。
这是一种基本的数值法,可以在ODE中确定任意位置的点作为终点。
在这里,任何这样的点都可以表示为ODE右边的时间步。
•向后差分法:它是反过来基于前向差分法。
它要求对ODE中的时间步进行逆向推导,以获得某一特定点的解。
向后差分法要求推导反向解中点,以便可以从每一步中获取该点的解。
•中点法:这是一种非常基本的数值解法,可以用来求解ODE中的某一步的解,但不具有直观的方法解释。
主要的思想是在每一次时间步中通过求出ODE的中点来寻找解。
•全分方法:这是一种更复杂的数值解法,它要求将ODE中的每一步解细分并解决。
与前面提到的三种解法不同,它首先要求将ODE分解成若干离散区间,然后计算每一段区间中的点。
这种解法可以更准确地进行处理,但时间消耗较多,因此比较少被使用。
优化方案在需要解决常微分方程时,为了得到最佳的结果,有必要考虑一些优化措施。
•首先,应考虑将一个复杂的ODE拆分成一些更易解决的问题。
这样做的结果是,预见到解决此ODR的总耗时将会降低。
•其次,为了加快计算速度,可以考虑使用预解算法。
常微分方程的数值解法1. 引言常微分方程是自变量只有一个的微分方程,广泛应用于自然科学、工程技术和社会科学等领域。
由于常微分方程的解析解不易得到或难以求得,数值解法成为解决常微分方程问题的重要手段之一。
本文将介绍几种常用的常微分方程的数值解法。
2. 欧拉方法欧拉方法是最简单的一种数值解法,其具体步骤如下:- 将自变量的区间等分为n个子区间;- 在每个子区间上假设解函数为线性函数,即通过给定的初始条件在每个子区间上构造切线;- 使用切线的斜率(即导数)逼近每个子区间上的解函数,并将其作为下一个子区间的初始条件;- 重复上述过程直至达到所需的精度。
3. 改进的欧拉方法改进的欧拉方法是对欧拉方法的一种改进,主要思想是利用两个切线的斜率的平均值来逼近每个子区间上的解函数。
具体步骤如下: - 将自变量的区间等分为n个子区间;- 在每个子区间上构造两个切线,分别通过给定的初始条件和通过欧拉方法得到的下一个初始条件;- 取两个切线的斜率的平均值,将其作为该子区间上解函数的斜率,并计算下一个子区间的初始条件;- 重复上述过程直至达到所需的精度。
4. 二阶龙格-库塔方法二阶龙格-库塔方法是一种更为精确的数值解法,其基本思想是通过近似计算解函数在每个子区间上的平均斜率。
具体步骤如下: - 将自变量的区间等分为n个子区间;- 在每个子区间上计算解函数的斜率,并以该斜率的平均值近似表示该子区间上解函数的斜率;- 利用该斜率近似值计算下一个子区间的初始条件,并进一步逼近解函数;- 重复上述过程直至达到所需的精度。
5. 龙格-库塔法(四阶)龙格-库塔法是目前常用的数值解法之一,其精度较高。
四阶龙格-库塔法是其中较为常用的一种,其具体步骤如下:- 将自变量的区间等分为n个子区间;- 在每个子区间上进行多次迭代计算,得到该子区间上解函数的近似值;- 利用近似值计算每个子区间上的斜率,并以其加权平均值逼近解函数的斜率;- 计算下一个子区间的初始条件,并进一步逼近解函数;- 重复上述过程直至达到所需的精度。
常微分方程组数值解法一、引言常微分方程组是数学中的一个重要分支,它在物理、工程、生物等领域都有广泛应用。
对于一些复杂的常微分方程组,往往难以通过解析方法求解,这时候数值解法就显得尤为重要。
本文将介绍常微分方程组数值解法的相关内容。
二、数值解法的基本思想1.欧拉法欧拉法是最基础的数值解法之一,它的思想是将时间连续化,将微分方程转化为差分方程。
对于一个一阶常微分方程y'=f(x,y),其欧拉公式为:y_{n+1}=y_n+hf(x_n,y_n)其中h为步长,x_n和y_n为第n个时间点上x和y的取值。
2.改进欧拉法改进欧拉法是对欧拉法的改良,其公式如下:y_{n+1}=y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_n+hf(x_n,y_n))] 3.四阶龙格-库塔方法四阶龙格-库塔方法是目前最常用的数值解法之一。
其公式如下:k_1=f(x_n,y_n)k_2=f(x_n+\frac{h}{2},y_n+\frac{h}{2}k_1)k_3=f(x_n+\frac{h}{2},y_n+\frac{h}{2}k_2)k_4=f(x_n+h,y_n+hk_3)y_{n+1}=y_n+\frac{h}{6}(k_1+2k_2+2k_3+k_4)其中,k_i为中间变量。
三、常微分方程组的数值解法1.欧拉法对于一个二阶常微分方程组:\begin{cases} y'_1=f_1(x,y_1,y_2) \\ y'_2=f_2(x,y_1,y_2)\end{cases}其欧拉公式为:\begin{cases} y_{n+1,1}=y_{n,1}+hf_1(x_n,y_{n,1},y_{n,2}) \\y_{n+1,2}=y_{n,2}+hf_2(x_n,y_{n,1},y_{n,2}) \end{cases}其中,x_n和y_{n,i}(i=1, 2)为第n个时间点上x和y_i的取值。
第八章 常微分方程的数值解法一.内容要点考虑一阶常微分方程初值问题:⎪⎩⎪⎨⎧==00)(),(y x y y x f dx dy微分方程的数值解:设微分方程的解y (x )的存在区间是[a,b ],在[a,b ]内取一系列节点a= x 0< x 1<…< x n =b ,其中h k =x k+1-x k ;(一般采用等距节点,h=(b-a)/n 称为步长)。
在每个节点x k 求解函数y(x)的近似值:y k ≈y(x k ),这样y 0 , y 1 ,...,y n 称为微分方程的数值解。
用数值方法,求得f(x k )的近似值y k ,再用插值或拟合方法就求得y(x)的近似函数。
(一)常微分方程处置问题解得存在唯一性定理对于常微分方程初值问题:⎪⎩⎪⎨⎧==00)(),(y x y y x f dx dy如果:(1) 在B y y A x x 00≤-≤≤,的矩形内),(y x f 是一个二元连续函数。
(2) ),(y x f 对于y 满足利普希茨条件,即2121y y L y x f y x f -≤-),(),(则在C x x 0≤≤上方程⎪⎩⎪⎨⎧==00)(),(y x y y x f dxdy的解存在且唯一,这里C=min((A-x 0),x 0+B/L),L 是利普希茨常数。
定义:任何一个一步方法可以写为),,(h y x h y y k k k 1k Φ+=+,其中),,(h y x k k Φ称为算法的增量函数。
收敛性定理:若一步方法满足: (1)是p 解的.(2) 增量函数),,(h y x k k Φ对于y 满足利普希茨条件.(3) 初始值y 0是精确的。
则),()()(p h O x y kh y =-kh =x -x 0,也就是有0x y y lim k x x kh 0h 0=--=→)((一)、主要算法 1.局部截断误差局部截断误差:当y(x k )是精确解时,由y(x k )按照数值方法计算出来的1~+k y 的误差y (x k+1)- 1~+k y 称为局部截断误差。
注意:y k+1和1~+k y 的区别。
因而局部截断误差与误差e k +1=y (x k +1) -y k +1不同。
如果局部截断误差是O (h p+1),我们就说该数值方法具有p 阶精度。
1. 显式欧拉格式:⎩⎨⎧=+=+001)(),(y x y y x hf y y k k k k k =1,2,⋯n-1.显式欧拉格式的特点:(1)、单步方法; (2)、显式格式;(3)、局部截断误差)(2h O 因而是一阶精度 。
隐式欧拉格式⎩⎨⎧=+=+++00111)(),(y x y y x hf y y k k k k2. 两步欧拉格式:⎩⎨⎧=+=-+001)(),(y x y y x hf 2y y k k 1k k k =1,2,⋯n-1.两步欧拉格式的局部截断误差)(3h O ,因而是二阶精度 3. 梯形方法:=+1k y []⎪⎩⎪⎨⎧=+⋅+=+++00)(),(),(y x y y x f y x f 2h y y k k 1k 1k k 1k ; 3.改进的欧拉方法:预测值: ),(^k k k 1k y x f h y y ⋅+=+校正值: =+1k y ⎥⎦⎤⎢⎣⎡+⋅+++),(),(^k k 1k 1k k y x f y x f 2h y 。
或改写为:⎪⎪⎩⎪⎪⎨⎧+=+=+=++)(21),(),(11c p k p k k c k k k p y y y y x f h y y y x f h y y4、梯形方法与改进欧拉方法的截断误差是O(h 3),具有二阶精度。
5、龙格-库塔法的思想1). 二阶龙格-库塔法计算公式: ⎪⎩⎪⎨⎧λ+λ-+=++==+))((),(),(211121K K 1h y y hK p y h p x f K y x f K k k k k k k当:21=λp 时,得一簇龙格-库塔公式,其局部截断误差均为O (h 3)都是二阶精度。
特别取1p ==λ,21,就是改进欧拉公式。
取1p =λ=,21,得二阶龙格—库塔法为:⎪⎩⎪⎨⎧+=++==+21121)2,2(),(hK y y K h y h x f K y x f K k k kk k k ,称为二阶中点格式。
2)、经典龙格-库塔格式(也称为标准龙格-库塔方法):⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧++++=++=++=++==+)22(6),()2,2()2,2(),(432113423121K K K K h y y hK y h x f K K h y h x f K K h y h x f K y x f K kk k k kk kk k k 四阶龙格-库塔方法的截断误差为()5h O ,具有四阶精度。
一般一阶常微分方程初值问题用四阶龙格-库塔方法计算,其精度均满足实际问题精度要求。
3).变步长龙格-库塔方法: 从节点x k 出发,以步长h 据四阶龙格-库塔方法求出一个近似值)(1h k y +,然后以步长h/2求出一个近似值)2/(1h k y +,得误差事后估计式:)()(1)2/(1)2/(1h k h k h k 1k y y 151y y ++++-≈- 根据)(1)2/(1h k h k y y ++-=∆来选取步长h 。
4). RKF 格式:变步长龙格-库塔方法,因频繁加倍或折半步长会浪费计算量。
Felhberg 改进了传统龙格-库塔方法,得到RKF 格式,较好解决了步长的确定,而且提高了精度与稳定性,为Matlab 等许多数值计算软件采用。
4/5阶RKF 格式:由4阶龙格-库塔方法与5阶龙格-库塔方法结合而成。
⎪⎭⎫⎝⎛+-+++=⎪⎭⎫⎝⎛-+++=++654311^5431155250956430285611282566561351651410121972565140821625K K K K K h y y K K K K h y y n n n n⎪⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎪⎨⎧-+-+-+=-+-++=+-++=+++=++==)401141041859256535442278,2()410484551336808216439,()219772962197720021971932,1312()329323,83()4,4(),(443216432153214213121K K K K K y h x f K K K K K y h x f K K K K y h x f K K K y h x f K K h y h x f K y x f K n n n n n nn n n n n nFelhberg 得到的最佳步长hs ,其中h 为当前步长,4/111^⎪⎪⎪⎪⎭⎫⎝⎛-ε=++n n y y h s .ε为精度要求,若s<0.75,步长折半;若s>1.5步长加倍。
6.亚当斯方法(Adams) 1).显式Adams 方法:记:),(k k k y x f f =;二阶显式Adams 方法:][211-+-+=k k k k f f 3hy y ;三阶显式Adams 方法:][2211--++-+=k k k k k f 5f 16f 231hy y ;四阶显式Adams 方法:]5559379[241231k k k k k k f f f f hy y +-+-+=---+.2). 隐式Adams 方法二阶隐式Adams 方法:][211++-+=k k k k f f 3hy y ;三阶隐式Adams 方法:]8[2111-++-++=k k k k k f f f 51hy y ;四阶隐式Adams 方法:)9195(241121+--+++-+=k k k k k k f f f f hy y3).Adams 预报-校正系统:先用显式格式作为预测值,再用隐式格式来校正。
预测值: )9375955(243211---+-+-+=k k k k k k f f f f hy y校正值:()),9195(2411121++--+++-+=k k k k k k k y x f f f f hy y 4).改进的Adams 预报-校正系统:预测:)9375955(243211---+-+-+=k k k k k k f f f f hy p改进:)(k k 1k 1k p c 270251p m -+=++校正值:())519,9(2421111--++++-++=k k k k k k k f f f m x f hy c 改进:)(1k 1k 1k 1k p c 27019c y ++++--= 7.收敛与稳定性对于固定的kh x x k +=0,如果数值解y k 当,0h →(同时+∞→n )时趋向于准确解y (x k ),则称该数值方法方法是收敛的。
如果一种数值方法,在节点值y k 上大小为δ的扰动,于以后各节点值y m (m >k )上产生的偏差均不超过δ,则称数值方法是稳定的.一般,隐式格式较显式格式有较好的稳定性。
8.刚性方程组:考虑n 阶常微分方程组:)(x Ay y φ+=',⋯⋯⋯(*)若矩阵A 的特征值λ1,λ2,⋯λn 的实部Re(λi )<0,i=1,2,⋯,n.,则称)Re()Re(i ni 1i n i 1min max S λλ=≤≤≤≤为*式的刚性比,当刚性比很大时称*式为刚性方程组。
刚性方程组需采用稳定性较好的方法。
二. MATLAB 的有关命令[t ,x]=solver (’f’,ts,x0,options )t:输出的自变量值, x: 输出的函数值;solver :包括ode45、 ode23 、ode113、ode15、sode23s.非刚性系统:ode23:用2阶(及3阶)龙格-库塔算法。
ode45:用4阶(及5阶)龙格-库塔-算法。
ode113(Adams-Bashforth-Moulton PECE)多步方法。
刚性系统:ode15s(Gear 方法)多步方法ode23s(二阶modified Rosenbroack formula)单步。
ode23t(trapezoidal rule)solve DAEs. ode23tb(TR-BDF2)低精度算法。
f :由待解方程写成的m-文件名ts=[t0,tf],t0、tf 为自变量的初值和终值 x0:函数的初值options=odeset(’reltol’,rt,’abstol’,at ), rt ,at :分别为设定的相对误差和绝对误差. (缺省时设定相对误差10-3, 绝对误差10-6) 注意:1、在解n 个未知函数的方程组时,x0和x 均为n 维向量,m-文件中的待解方程组应以x 的分量形式写成.2、使用Matlab 软件求数值解时,高阶微分方程必须等价地变换成一阶微分方程组.四.重点算法Matlab 程序Euler 格式、function[x,y]=naeuler(dyfun,xspan,y0,h) x=xspan(1):h:xspan(2); y(1)=y0;for n=1:length(x)-1y(n+1)=y(n)+h*feval(dyfun,x(n),y(n)); endx=x';y=y';隐式Euler 格式function[x,y]=naeulerb(dyfun,xspan,y0,h) x=xspan(1):h:xspan(2); y(1)=y0;for n=1:length(x)-1y(n+1)=iter(dyfun,x(n+1),y(n),h);endx=x';y=y';function y=iter(dyfun,x,y,h)y0=y;e=1e-4;K=1e+4;y=y+h*feval(dyfun,x,y);y1=y+2*e;k=1;while abs(y-y1)>ey1=y;y=y0+h*feval(dyfun,x,y);k=k+1;if k>K,error('迭代发散');endend改进Euler格式function[x,y]=naeulerg(dyfun,xspan,y0,h)x=xspan(1):h:xspan(2);y(1)=y0;for n=1:length(x)-1K1=feval(dyfun,x(n),y(n));y(n+1)=y(n)+h*K1;K2=feval(dyfun,x(n+1),y(n+1));y(n+1)=y(n)+h*(K1+K2)/2;endx=x';y=y';4阶经典Runge-Kutta格式function[x,y]=nak4(dyfun,xspan,y0,h)x=xspan(1):h:xspan(2);y(1)=y0;for n=1:length(x)-1K1=feval(dyfun,x(n),y(n));K2=feval(dyfun,x(n)+h/2,y(n)+h/2*K1);K3=feval(dyfun,x(n)+h/2,y(n)+h/2*K2);K4=feval(dyfun,x(n+1),y(n)+h*K3);y(n+1)=y(n)+h*(K1+2*K2+2*K3+K4)/6; endx=x';y=y';变步长4阶经典Runge-Kutta格式function[x,y]=nark4v(dyfun,xspan,y0,e,h)if nargin<5,h=(xspan(2)-xspan(1))/10;endn=1;x(n)=xspan(1);y(n)=y0;[y1,y2]=comput(dyfun,x(n),y(n),h);while x(n)<xspan(2)-eps;if abs(y2-y1)/10>ewhile abs(y2-y1)/10>eh=h/2;[y1,y2]=comput(dyfun,x(n),y(n),h);end elsewhile abs(y2-y1)/10<=e h=2*h;[y1,y2]=comput(dyfun,x(n),y(n),h); endh=h/2;h=min(h,xspan(2)-x(n)); [y1,y2]=comput(dyfun,x(n),y(n),h); endn=n+1;x(n)=x(n-1)+h;y(n)=y2;[y1,y2]=comput(dyfun,x(n),y(n),h); endx=x';y=y';function [y1,y2]=comput(dyfun,x,y,h); y1=rk4(dyfun,x,y,h); y21=rk4(dyfun,x,y,h/2);y2=rk4(dyfun,x+h/2,y21,h/2); function y=rk4(dyfun,x,y,h); K1=feval(dyfun,x,y);K2=feval(dyfun,x+h/2,y+h/2*K1); K3=feval(dyfun,x+h/2,y+h/2*K2); K4=feval(dyfun,x+h,y+h*K3); y=y+h*(K1+2*K2+2*K3+K4)/6;五.试验例题例1 不同方法的精度比较用多种方法解下述初值问题,并与其准确解x e y x +=-进行比较。