matlab微分方程的求解的方法
用Matlab解微分方程

用Matlab 软件求解微分方程1.解析解(1)一阶微分方程 求21y dxdy +=的通解:dsolve('Dy=1+y^2','x') 求y x dxdy -+=21的通解:dsolve('Dy=1+x^2-y','x') 求⎪⎩⎪⎨⎧=+=1)0(12y y dx dy 的特解:dsolve('Dy=1+y^2',’y(0)=1’,'x')(2)高阶微分方程 求解⎩⎨⎧-='==-+'+''.2)2(,2)2(,0)(222πππy y y n x y x y x 其中,21=n ,命令为: dsolve('x^2*D2y+x*Dy+(x^2-0.5^2)*y=0','y(pi/2)=2,Dy(pi/2)=-2/pi','x') 求042=-+'-'''x y y y 的通解,命令为:dsolve('D3y-2*Dy+y-4*x=0','x')输出为:ans=8+4*x+C1*exp(x)+C2*exp(-1/2*(5^(1/2)+1)*x)+C3*exp(1/2*(5^(1/2)-1)*x)(3)一阶微分方程组求⎩⎨⎧+-='+=').(3)(4)(),(4)(3)(x g x f x g x g x f x f 的通解:[f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','x') 输出为: f =exp(3*x)*(cos(4*x)*C1+sin(4*x)*C2)g =-exp(3*x)*(sin(4*x)*C1-cos(4*x)*C2)若再加上初始条件1)0(,0)0(==g f ,则求特解:[f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','f(0)=0,g(0)=1','x')输出为: f =exp(3*x)*sin(4*x)g =exp(3*x)*cos(4*x)2.数值解(1)一阶微分方程⎪⎩⎪⎨⎧=≤≤-=.1)0(,10,2y x y x y dxdy 现以步长h=0.1用“4阶龙格—库塔公式”求数值解: 先建立“函数M —文件”:function f=eqs1(x,y)f=y-2*x/y;再命令: 格式为:[自变量,因变量]=ode45(‘函数文件名’,节点数组,初始值) 命令为: [x,y]=ode45('eqs1',0:0.1:1,1)若还要画图,就继续命令: plot(x,y)(2)一阶微分方程组⎪⎩⎪⎨⎧==+-='≤≤-+='.3.0)0(,2.0)0(,2sin ,10,2cos 21212211y y y y x y x y y x y 只须向量化,即可用前面方法: function f=eqs2(x,y)f=[cos(x)+2*y(1)-y(2);sin(x)-y(1)+2*y(2)];将此函数文件,以文件名eqs2保存后,再下命令:[x,y]=ode45('eqs2',0:0.1:1,[0.2;0.3])(注:输出的y 是矩阵,第i 列为函数i y 的数值解)要画图,继续命令:hold on,plot(x,y(:,1)),plot(x,y(:,2)),hold off(3)高阶微分方程先化成一阶微分方程组,再用前面方法。
使用Matlab进行微分方程求解的方法

使用Matlab进行微分方程求解的方法引言微分方程是数学中非常重要的一部分,广泛应用于物理、经济、工程等领域。
对于大部分微分方程的解析解往往难以求得,而数值解法则成为了一种常用的解决手段。
Matlab作为一种强大的科学计算软件,也提供了丰富的工具和函数用于求解微分方程,本文将介绍一些常见的使用Matlab进行微分方程求解的方法。
一、数值求解方法1. 欧拉方法欧拉方法是最简单的一种数值求解微分方程的方法,它将微分方程的微分项用差分的方式进行近似。
具体的公式为:y(n+1) = y(n) + hf(x(n), y(n))其中,y(n)表示近似解在第n个点的值,h为步长,f(x, y)为微分方程的右端项。
在Matlab中使用欧拉方法进行求解可以使用ode113函数,通过设定不同的步长,可以得到不同精度的数值解。
2. 中点法中点法是较为精确的一种数值求解微分方程的方法,它的计算公式为:k1 = hf(x(n), y(n))k2 = hf(x(n) + h/2, y(n) + k1/2)y(n+1) = y(n) + k2中点法通过计算两个斜率的平均值来得到下一个点的值,相较于欧拉方法,中点法能提供更精确的数值解。
3. 4阶龙格库塔法龙格库塔法是一类高阶数值求解微分方程的方法,其中4阶龙格库塔法是最常用的一种。
它的计算公式为:k1 = hf(x(n), y(n))k2 = hf(x(n) + h/2, y(n) + k1/2)k3 = hf(x(n) + h/2, y(n) + k2/2)k4 = hf(x(n) + h, y(n) + k3)y(n+1) = y(n) + (k1 + 2k2 + 2k3 + k4)/64阶龙格库塔法通过计算多个斜率的加权平均值来得到下一个点的值,相较于欧拉方法和中点法,它的精度更高。
二、Matlab函数和工具除了可以使用以上的数值方法进行微分方程求解之外,Matlab还提供了一些相关的函数和工具,方便用户进行微分方程的建模和求解。
MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法

MATLAB常微分⽅程数值解——欧拉法、改进的欧拉法与四阶龙格库塔⽅法MATLAB常微分⽅程数值解作者:凯鲁嘎吉 - 博客园1.⼀阶常微分⽅程初值问题2.欧拉法3.改进的欧拉法4.四阶龙格库塔⽅法5.例题⽤欧拉法,改进的欧拉法及4阶经典Runge-Kutta⽅法在不同步长下计算初值问题。
步长分别为0.2,0.4,1.0.matlab程序:function z=f(x,y)z=-y*(1+x*y);function R_K(h)%欧拉法y=1;fprintf('欧拉法:x=%f, y=%f\n',0,1);for i=1:1/hx=(i-1)*h;K=f(x,y);y=y+h*K;fprintf('欧拉法:x=%f, y=%f\n',x+h,y);endfprintf('\n');%改进的欧拉法y=1;fprintf('改进的欧拉法:x=%f, y=%f\n',0,1);for i=1:1/hx=(i-1)*h;K1=f(x,y);K2=f(x+h,y+h*K1);y=y+(h/2)*(K1+K2);fprintf('改进的欧拉法:x=%f, y=%f\n',x+h,y);endfprintf('\n');%龙格库塔⽅法y=1;fprintf('龙格库塔法:x=%f, y=%f\n',0,1);for i=1:1/hx=(i-1)*h;K1=f(x,y);K2=f(x+h/2,y+(h/2)*K1);K3=f(x+h/2,y+(h/2)*K2);K4=f(x+h,y+h*K3);y=y+(h/6)*(K1+2*K2+2*K3+K4);fprintf('龙格库塔法:x=%f, y=%f\n',x+h,y);end结果:>> R_K(0.2)欧拉法:x=0.000000, y=1.000000欧拉法:x=0.200000, y=0.800000欧拉法:x=0.400000, y=0.614400欧拉法:x=0.600000, y=0.461321欧拉法:x=0.800000, y=0.343519欧拉法:x=1.000000, y=0.255934改进的欧拉法:x=0.000000, y=1.000000改进的欧拉法:x=0.200000, y=0.807200改进的欧拉法:x=0.400000, y=0.636118改进的欧拉法:x=0.600000, y=0.495044改进的欧拉法:x=0.800000, y=0.383419改进的欧拉法:x=1.000000, y=0.296974龙格库塔法:x=0.000000, y=1.000000龙格库塔法:x=0.200000, y=0.804636龙格库塔法:x=0.400000, y=0.631465龙格库塔法:x=0.600000, y=0.489198龙格库塔法:x=0.800000, y=0.377225龙格库塔法:x=1.000000, y=0.291009>> R_K(0.4)欧拉法:x=0.000000, y=1.000000欧拉法:x=0.400000, y=0.600000欧拉法:x=0.800000, y=0.302400改进的欧拉法:x=0.000000, y=1.000000改进的欧拉法:x=0.400000, y=0.651200改进的欧拉法:x=0.800000, y=0.405782龙格库塔法:x=0.000000, y=1.000000龙格库塔法:x=0.400000, y=0.631625龙格库塔法:x=0.800000, y=0.377556>> R_K(1)欧拉法:x=0.000000, y=1.000000欧拉法:x=1.000000, y=0.000000改进的欧拉法:x=0.000000, y=1.000000改进的欧拉法:x=1.000000, y=0.500000龙格库塔法:x=0.000000, y=1.000000龙格库塔法:x=1.000000, y=0.303395注意:在步长h为0.4时,要将for i=1:1/h改为for i=1:0.8/h。
matlab数值求解常微分方程快速方法

MATLAB是一种用于科学计算和工程应用的高级编程语言和交互式环境。
它在数学建模、模拟和分析等方面有着广泛的应用。
在MATLAB 中,常微分方程的数值求解是一个常见的应用场景。
在实际工程问题中,通常需要对常微分方程进行数值求解来模拟系统的动态行为。
本文将介绍MATLAB中对常微分方程进行数值求解的快速方法。
1. 基本概念在MATLAB中,可以使用ode45函数来对常微分方程进行数值求解。
ode45是一种常用的Runge-Kutta法,它可以自适应地选取步长,并且具有较高的数值精度。
使用ode45函数可以方便地对各种类型的常微分方程进行求解,包括一阶、高阶、常系数和变系数的微分方程。
2. 函数调用要使用ode45函数进行常微分方程的数值求解,需要按照以下格式进行函数调用:[t, y] = ode45(odefun, tspan, y0)其中,odefun表示用于描述微分方程的函数,tspan表示求解的时间跨度,y0表示初值条件,t和y分别表示求解得到的时间序列和对应的解向量。
3. 示例演示为了更好地理解如何使用ode45函数进行常微分方程的数值求解,下面我们以一个具体的例子来进行演示。
考虑如下的一阶常微分方程:dy/dt = -2*y其中,y(0) = 1。
我们可以编写一个描述微分方程的函数odefun:function dydt = odefun(t, y)dydt = -2*y;按照上述的函数调用格式,使用ode45函数进行求解:tspan = [0 10];y0 = 1;[t, y] = ode45(odefun, tspan, y0);绘制出解曲线:plot(t, y);4. 高级用法除了基本的函数调用方式外,MATLAB中还提供了更多高级的方法来对常微分方程进行数值求解。
可以通过设定选项参数来控制数值求解的精度和稳定性,并且还可以对刚性微分方程进行求解。
5. 性能优化在实际工程应用中,常常需要对大规模的常微分方程进行数值求解。
matlab差分法解微分方程

matlab差分法解微分方程在MATLAB中,差分法是一种常用的数值方法,用于解决微分方程。
差分法的基本思想是将微分方程中的导数用离散的差分近似表示,然后通过迭代计算得到方程的数值解。
下面我将从多个角度来解释如何使用差分法在MATLAB中解微分方程。
1. 离散化,首先,我们需要将微分方程离散化,将自变量和因变量分成若干个离散的点。
例如,可以选择一个均匀的网格,将自变量的取值离散化为一系列的点。
这样,微分方程中的导数可以用差分近似来表示。
2. 差分近似,使用差分近似来代替微分方程中的导数。
最常见的差分近似方法是中心差分法。
对于一阶导数,可以使用中心差分公式,f'(x) ≈ (f(x+h) f(x-h)) / (2h),其中h是离散化步长。
对于二阶导数,可以使用中心差分公式,f''(x) ≈ (f(x+h) 2f(x) + f(x-h)) / (h^2)。
根据微分方程的类型和边界条件,选择适当的差分近似方法。
3. 矩阵表示,将差分近似后的微分方程转化为矩阵形式。
通过将微分方程中的各项离散化,可以得到一个线性方程组。
这个方程组可以用矩阵表示,其中未知量是离散化后的因变量。
4. 数值求解,使用MATLAB中的线性代数求解函数,例如backslash运算符(\)或者LU分解等,求解得到线性方程组的数值解。
这个数值解就是微分方程的近似解。
需要注意的是,差分法是一种数值方法,所得到的解是近似解,精确度受离散化步长的影响。
通常情况下,可以通过减小离散化步长来提高数值解的精确度。
此外,对于某些特殊类型的微分方程,可能需要采用更高级的差分方法,如龙格-库塔法(Runge-Kutta method)或有限元方法(Finite Element Method)等。
综上所述,差分法是一种常用的数值方法,可以在MATLAB中用于解决微分方程。
通过离散化、差分近似、矩阵表示和数值求解等步骤,可以得到微分方程的数值解。
Matlab求解微分方程及偏微分方程

第四讲Matlab求解微分方程(组)理论介绍:Matlab求解微分方程(组)命令求解实例:Matlab求解微分方程(组)实例实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的, 特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法.一.相关函数、命令及简介1.在Matlab中,用大写字母D表示导数,Dy表示y关于自变量的一阶导数, D2y表示y关于自变量的二阶导数,依此类推.函数dsolve用来解决常微分方程(组)的求解问题,调用格式为:X=dsolve(<eqnl,,,eqn2函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解.注意,系统缺省的自变量为t2.函数dsolve求解的是常微分方程的精确解法,也称为常微分方程的符号解. 但是,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB具有丰富的函数,我们将其统称为solver,其一般格式为:[T,Y]=solver(odefun,tspan,yO)说明:(1 )solver 为命令ode45、ode23、odel 13、odel5s、ode23s、ode23t、ode23tb、odel5i 之一.(2)odefun是显示微分方程),=f (t,y)在积分区间tspan =[心心]上从心到“用初始条件儿求解.(3)如果要获得微分方程问题在其他指定时间点bG©…心上的解,则令(span = 『“,•••『/■](要单调的).(4)因为没有一种算法可以有效的解决所有的ODE问题,为此,Matlab提供T多种求解器solver,对于不同的ODE问题,采用不同的solver.程(组)的初值问题的解的Matlab常用程序,其中:ode23采用龙格-库塔2阶算法,用3阶公式作误差估计来调节步长,具有低等的精度.。
MATLAB微分方程几种求解方法及程序

第五章 控制系统仿真§5.2 微分方程求解方法以一个自由振动系统实例为例进行讨论。
如下图1所示弹簧-阻尼系统,参数如下: M=5 kg, b=1 N.s/m, k=2 N/m, F=1NF图1 弹簧-阻尼系统假设初始条件为:00=t 时,将m 拉向右方,忽略小车的摩擦阻力,m x 0)0(= s m x /0)0(=•求系统的响应。
)用常微分方程的数值求解函数求解包括ode45、ode23、ode113、ode15s 、ode23s 等。
wffc1.m myfun1.m一、常微分方程的数值求解函数ode45求解 解:系统方程为 F kx x b x m =++•••这是一个单变量二阶常微分方程。
将上式写成一个一阶方程组的形式,这是函数ode45调用规定的格式。
令: x x =)1( (位移))1()2(••==x x x (速度) 上式可表示成:⎥⎦⎤⎢⎣⎡--=⎥⎦⎤⎢⎣⎡=⎥⎥⎦⎤⎢⎢⎣⎡••)1(*20)2(*101)2()2()2()1(x x x x x x x 下面就可以进行程序的编制。
%写出函数文件myfun1.mfunction xdot=myfun1(t,x)xdot=[x(2);1-10*x(2)-20*x(1)];% 主程序wffc1.mt=[0 30];x0=[0;0];[tt,xx]=ode45(@myfun1,t,x0);plot(tt,yy(:,1),':b',tt,yy(:,2),'-r') legend('位移','速度')title('微分方程的解 x(t)')二、方法2:F kx x b x m =++•••251)()()(2++==s s s F s X s G%用传递函数编程求解ksys1.mnum=1;den=[5 1 2];%printsys(num,den)%t=0:0.1:10;sys=tf(num,den);figure(1)step(sys)figure(2)impulse(sys)figure(3)t=[0:0.1:10]';ramp=t;lsim(sys,ramp,t);figure(4)tt=size(t);noise=rand(tt,1);lsim(sys,noise,t)figure(5)yy=0.1*t.^2;lsim(num,den,yy,t)w=logspace(-1,1,100)';[m p]=bode(num,den,w);figure(6)subplot(211);semilogx(w,20*log10(m)); grid onsubplot(212);semilogx(w,p)grid on[gm,pm,wpc,wgc]=margin(sys)figure(7)margin(sys)figure(8)nyquist(sys)figure(9)nichols(sys)方法3:F kx x b x m =++•••125=++•••x x xx x x 4.02.02.0--=•••% 主程序wffc1.mt=[0 30];x0=[0;0];[tt,yy]=ode45(@myfun1,t,x0);figure(1)plot(tt,yy(:,1),':b',tt,yy(:,2),'-r') hold onplot(tt,0.2-0.2*yy(:,2)-0.4*yy(:,1),'-.k ')legend('位移','速度','加速度') title('微分方程的解')figure(2)plot(yy(:,1),yy(:,2))title('平面相轨迹')%写出函数文件myfun1.mfunction xdot=myfun1(t,x)xdot=[x(2);0.2-0.2*x(2)-0.4*x(1)];。
matlab傅里叶谱方法求解微分方程

matlab傅里叶谱方法求解微分方程1. 前言微分方程作为数学中重要的研究对象之一,其在各个领域均有着重要的应用。
而求解微分方程的方法也有很多种,其中傅里叶谱方法是一种常用且有效的方法之一。
本文将介绍如何使用matlab中的傅里叶谱方法求解微分方程,并通过一个具体的例子来说明其求解过程和结果。
2. 傅里叶谱方法简介傅里叶谱方法(Fourier spectral method)是一种基于傅里叶级数展开的方法,通过将微分方程转化为频域上的代数方程来求解。
其基本思想是将微分方程中的未知函数表示为一组正交基(通常是正弦函数和余弦函数)的线性组合,然后通过傅里叶级数的性质将微分方程转化为方便求解的代数方程。
3. matlab中傅里叶谱方法的实现在matlab中,可以使用fft函数来进行傅里叶变换,将微分方程转化为频域上的代数方程。
接下来,我们通过一个具体的例子来演示如何使用matlab中的傅里叶谱方法求解微分方程。
4. 例子:求解一维热传导方程考虑一维热传导方程:∂u/∂t = α*∂^2u/∂x^2其中,u(x, t)为温度分布,α为热传导系数。
为了使用傅里叶谱方法求解该方程,首先需要进行空间上的离散化,将u(x, t)表示为傅里叶级数的形式:u(x, t) = Σ(A_k(t)*exp(i*k*2πx/L))其中,A_k(t)为待定系数,L为空间的长度,k为频率。
将上述形式代入热传导方程,得到:∂A_k/∂t = -α*(2πk/L)^2*A_k通过这一步变换,我们将原本的偏微分方程转化为了关于A_k(t)的一组常微分方程,可以通过常微分方程的数值计算方法求解。
5. 结果展示通过matlab编写代码,可以对上述常微分方程进行数值求解,得到A_k(t)的解。
进而通过傅里叶级数的线性叠加,可以得到u(x, t)的近似解,并画出其空间分布随时间的演化图。
这样就可以直观地观察到热传导方程的解随时间的变化规律。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
则称以上迭代公式为p阶公式,p的大小反映了截断误差 的高低,高阶高精度。要得到一个p阶公式,关键在于
如何选取j(x, y(x), h)使之满足阶的要求。
options = odeset('reltol',rt,'abstol',at) 这里的rt和at分别为设定的相对误差和绝对误差。(rt=1e-7)
上一页 下一页
主页
MATLAB软件求解
数学实验
例④
输入:
dx dt
3x
4
y
dy
dt
4 x
3y
x(0) 0
y(0)
1
[x,y]=dsolve('Dx=3*x+4*y','Dy=-4*x+3*y')
[x,y]=dsolve('Dx=3*x+4*y','Dy=-4*x+3*y','x(0)=0,y(0)=1')
上一页 下一页
主页
数学实验
计算结果 (1)步长h=0.1的数值解比较表
x
精确解 向前欧拉 向后欧拉
0
1
1
1
0.1
1.0048
1
1.0091
0.2
1.0187
1.01
1.0264
0.3
1.0408 1.029 1.0513
0.4
1.0703 1.0561 1.0830
0.5
1.1065 1.0905 1.1209
上一页 下一页
主页
返回
使用改进欧拉公式的例
数学实验
步长 h= 0.1 的数值解比较表
x
精确解 向前欧拉 向后欧拉 改进欧拉
0
1
1
1
1
0.1
1.0048
1
1.0091
1.005
0.2
1.0187
1.01
1.0264
1.019
0.3
1.0408
1.029
1.0513 1.0412
0.4
1.0703 1.0561 1.0830 1.0708
注意:① y ' Dy,y ' '
D2y
② 自变量名可以省略,默认变量名 ‘t’。
上一页 下一页
主页
MATLAB软件求解
数学实验
例① dy 1 y2 , y(0) 1
dx
输入:y=dsolve ('Dy=1+y^2') y1=dsolve('Dy=1+y^2','y(0)=1','x')
yn+1 = yn + h f(xn, yn)
yn+1 yn + h f(xn +1, yn +1) 特点:① f(x,y)取值于区间[xn, xn+1]的右端点.
② 非线性方程, 称‘隐式公式’。
方法:迭代( y’= f (x, y) )
x=[];y=[]; x(1)=x0; y(1)=y0; for n=1:k
相平面图 5
4
3
2
y
1
0
-1
-2
-2
-1
0
1
2
3
4
5
x
上一页 下一页
主页
微分方程图解法
数学实验
y
斜率场 5
4
3
2
1
0
-1
-2
-2
-1
0
1
2
3
4
5
x
上一页 下一页
主页
MATLAB软件求解
数学实验
解析解
y=dsolve('eqn1','eqn2', …, ' c1 ',…, ' x ')
微分方程组
初值条件 指明变量
0.5
1.1065 1.0905 1.1209 1.1071
0.6
1.1488 1.1314 1.1645 1.1494
0.7
1.1966 1.1783 1.2132 1.1972
0.8
1.2493 1.2305 1.2665 1.2500
0.9
1.3066 1.2874 1.3241 1.3072
引入自变量点列{xn} → {yn},
在x0x1x2…xn…上求y(xn)的近似 值yn.通常取等步长 h,即xn = x0+ n×h,或
xn = xn-1+ h,(n=1,2,…)。
上一页 下一页
主页
1、欧拉方法
数学实验
在小区间[xn, xn+1]上用差商代替微商(近似),
y(xn1) y(xn ) y' h
转化 yn+1 = (yn + h xn+1+ h )/(1+h)
上一页 下一页
主页
1、欧拉方法
数学实验
x1(1)=0;y1(1)=1;y2(1)=1;h=0.1;(died.m) for k=1:10
x1(k+1)=x1(k)+h; y1(k+1)=(1-h)*y1(k)+h*x1(k)+h; y2(k+1)=(y2(k)+h*x1(k+1)+h)/(1+h); end x1,y1,y2,(y1——向前欧拉解,y2——向后欧拉解) x=0:0.1:1; y=x+exp(-x)(解析解) plot(x,y,x1,y1,'k:',x1,y2,'r--')
输出:y= tan(t-C1)
(通解)
y1= tan(x+1/4*pi) (特解)
上一页 下一页
主页
例② 常系数的二阶微分方程
数学实验
y' '2 y'3y 0, y(0) 1, y' (0) 0
输入:
y=dsolve('D2y-2*Dy-3*y=0','x')
y=dsolve('D2y-2*Dy-3*y=0','y(0)=1,Dy(0)=0','x')
无解析表达式!
上一页 下一页
主页
MATLAB软件求解
数学实验
例④ 非线性微分方程
x'(t)2 x(t)2 1, x(0) 0
x=dsolve('(Dx)^2+x^2=1','x(0)=0')
x = sin(t)
-sin(t)
若欲求解的某个数值解,如何求解?
t=pi/2; eval(x)
微分方程模型
数学实验
定义:含有导数的方程称为微分方程。如 f(x, y(x), y’(x))=0
1、微分方程的一般形式:
F(x, y, y’,…,y(n) ) = 0 隐式
或
y(n) = f (x, y, y’,…,y (n-1) ) 显式
上一页 下一页
主页
微分方程模型
数学实验
特殊情形:
dy f (t, y) dt
1
1.3679 1.3487 1.3855 1.3685
上一页 下一页
主页
2、龙格-库塔法
数学实验
龙格-库塔法是利用泰勒展式将y(x+h)在x处展开,并 取其前面若干项来近似y(x+h)而得到公式
y(x+h) y(x) + h j (x, y(x), h)
如果y(xn) yn,则y(xn+1)的近似值为:
2
0
-2 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 t
6
4
2
0
-2 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 t
上一页 下一页
主页
y
微分方程图解法
数学实验
如果撇开自变量的取值T,直接利用X, Y的分量作 为坐标,就可以在xoy平面上画出解的轨迹,称为相 平面轨迹图。
0.8
1.2493 1.2475 1.2511
0.9
1.3066 1.3047 1.3084
1
1.3679 1.3660 1.3697
结论:显然迭代步长h 的选取对精度有影响。
上一页 下一页
主页
图形显示
1.4
Z
1.3
1.2
有什么方
法可以使精度
1.1
提高?
1
0
向后欧拉法
x+exp(-x)
数学实验
0.5
1) 向前欧拉公式: (y’= f (x, y) )
y (xn+1) y(xn) + h f(xn, y(xn)) (迭代式) yn+1 yn + h f(xn, yn) (近似式) 特点:f(x,y)取值于区间[xn, xn+1]的左端点.
上一页 下一页
主页
1、欧拉方法
数学实验
2) 向后欧拉公式
解:1) 解析解: y = x + e-x