用Matlab软件求常微分方程的解或通解

合集下载

微分方程符号解

微分方程符号解

一.常微分方程的通解(解析解)在Matlab 中可用函数dsolve()求解一般微分方程,包括可分离变量微分方程、齐次方程、一阶、二阶、n 阶线性齐次和非齐次微分方程、可降阶的高阶微分方程等,调用格式为 dsolve(‘微分方程’) 给出微分方程的解析解,表示为t 的函数。

dsolve(‘微分方程’,’变量x ’) 给出微分方程的解析解,表示为x 的函数。

注意输入微分方程时,y '应输入Dy ,y ''应输入D2y 等,D 应大写。

求下列微分方程的通解:)(2y y a y x y '+='-' 0sin cos cos sin =+y x dxdyy x 0)21(12=++⎪⎪⎭⎫ ⎝⎛-yx y xe dx dy y x e 232++=+t t y dt dy tx e y x cos 2-='''x dx y d x 2)1(222=+ 0)(222=-dxdydx y d y022=+dx dy dx y d x 0222=+-y dx dy dx y d x e y dx dy dx y d x=+-22205222=+-y dx dy dx y d x e y dxdy dx y d x2sin 5222=+-x y dxy d 222sin =- 0=++y x dy dx y 解:syms x y z t a bdsolve('Dy-x*Dy=a*(y^2+Dy)','x')dsolve('sin(x)*cos(y)*Dy+cos(x)*sin(y)=0','x')dsolve('2*exp(x/y)*(1-x/y)*Dy+(1+2*exp(x/y))=0','x') dsolve('t*Dy+y=t^2+3*t+2')dsolve('D3y=exp(2*x)-cos(x)','x') dsolve('(1+x^2)*D2y=2*x','x') dsolve('y*D2y-(Dy)^2=0','x') dsolve('x*D2y+Dy=0','x') dsolve('D2y-2*Dy+y=0','x')dsolve('D2y-2*Dy+y=exp(x)/x','x') dsolve('D2y-2*Dy+5*y=0','x')dsolve('D2y-2*Dy+5*y=exp(x)*sin(2*x)','x') dsolve('D2y-y=sin(x)^2','x') dsolve('y*Dx+x+y=0','y')如果微分方程的解为隐函数,即不能表示成显式解,则Matlab 用兰伯特的W 函数Lambertw()表示微分方程的解。

matlab解常微分方程例题

matlab解常微分方程例题

matlab解常微分方程例题当涉及到使用MATLAB解常微分方程(ODE)的例题时,我们可以采用MATLAB中的ode45函数来进行求解。

ode45是一种常用的ODE求解器,它基于龙格-库塔方法。

下面我将以一个简单的例题来说明如何使用MATLAB解常微分方程。

假设我们要解决以下的常微分方程:dy/dt = -2y + 4t.初始条件为y(0) = 1。

首先,我们需要定义一个匿名函数来表示方程右侧的表达式,即-2y + 4t。

在MATLAB中,可以这样定义这个函数:f = @(t, y) -2y + 4t.接下来,我们需要定义时间范围和初始条件:tspan = [0 5] % 时间范围从0到5。

y0 = 1 % 初始条件y(0) = 1。

然后,我们可以使用ode45函数进行求解:[t, y] = ode45(f, tspan, y0)。

最后,我们可以绘制出解的图像:plot(t, y)。

xlabel('t')。

ylabel('y')。

title('Solution of dy/dt = -2y + 4t')。

这样,我们就得到了常微分方程的数值解,并用图像表示出来。

需要注意的是,这只是一个简单的例题,实际应用中可能会涉及更复杂的常微分方程。

但是使用MATLAB的ode45函数求解常微分方程的基本步骤是相似的,定义方程右侧的函数,设定时间范围和初始条件,然后使用ode45函数进行求解,并绘制出解的图像。

希望以上的解答能够满足你的需求。

如果你有更多关于MATLAB 解常微分方程的问题,欢迎继续提问。

matlab_常微分方程数值解法

matlab_常微分方程数值解法
d2x 2x2 0
dt 2
简朴问题可以求得解析解,多数实际问题靠数值求解 。
第4页
一阶常微分方程(ODE )初值问题 : ODE :Ordinary Differential Equation
dy
f
(x,
y)
dx
x0 x xn
y(x0 ) y0
数值解法就是求y(x)在某些分立旳节点 xn 上旳近似值 yn,用以近似y(xn)
x0
y0
x1 f y(x), x dx
x0
x2 f y(x), x dx
x1
y(x1) f y(x1), x1 h
第17页
同样,在[x0,xn+1] ,积分采用矩形近似,得:
y(xn1) y0
f xn1
x0
y(x), x dx
y(xn ) f y(xn ), xn h
yn y(xn )
第5页
2、欧拉近似办法
2.1 简朴欧拉(L.Euler, 1707-1783)办法。
dy
dx
f
(y, x)
y(x0 ) y0
欧拉数值算法就是由初值通过递推求解,递推求解
就是从初值开始,后一种函数值由前一种函数值得到。核 心是构造递推公式。
y0 y1 y2 yn
第6页
i 1,2,...
第36页
没有一种算法可以有效地解决所有旳 ODE 问题,因此 MATLAB 提供了多种ODE函数。
函数 ODE类
特点
阐明

ode45
非刚性 单步法;4,5 阶 R-K 措施;合计 大部分场合旳首选措施
截断误差为 (△x)3
ode23
非刚性 单步法;2,3 阶 R-K 措施;合计 使用于精度较低旳情形

matlab求解微分方程解析解

matlab求解微分方程解析解

matlab求解微分方程解析解在数学和工程学科中,微分方程是一种重要的数学工具,它涉及到很多实际问题的模型和解决方法。

而Matlab作为一款强大的数学软件,可以方便地求解微分方程的解析解。

Matlab中求解微分方程的一种常见方法是使用符号计算工具箱(Symbolic Math Toolbox),它可以处理符号表达式和符号函数,包括微积分、代数、矩阵、符号等数学操作。

首先,我们需要定义微分方程的符号变量和初值条件。

例如,我们假设要求解的微分方程为dy/dx = x^2,初值条件为y(0)=1,则可以使用如下代码:syms x yode = diff(y,x) == x^2;cond = y(0) == 1;然后,我们可以将微分方程和初值条件作为参数传递给dsolve函数来求解微分方程的解析解。

例如:sol = dsolve(ode, cond);其中,sol为求解得到的符号表达式,可以使用vpa函数将其转换为数值解。

例如:sol_num = vpa(sol, 5);这样,我们就得到了微分方程的解析解,并将其转换为5位有效数字的数值解。

除了使用符号计算工具箱,Matlab还提供了许多数值方法来求解微分方程的数值解。

例如,可以使用ode45函数来求解微分方程的数值解。

例如,求解dy/dx = x^2,y(0)=1的数值解可以使用如下代码:fun = @(x,y) x^2;[t,y] = ode45(fun, [0,1], 1);其中,fun为微分方程的函数句柄,[0,1]为求解区间,1为初值条件。

t和y分别为求解得到的时间序列和解向量。

总之,Matlab提供了多种方法来求解微分方程的解析解和数值解,可以根据实际问题的需要选择不同的方法来求解。

matlab求解常微分方程

matlab求解常微分方程

matlab求解常微分⽅程本⽂主要介绍matlab中求解常微分⽅程(组)的dsolve和ode系列函数,并通过例⼦加深读者的理解。

⼀、符号介绍D: 微分符号;D2表⽰⼆阶微分,D3表⽰三阶微分,以此类推。

⼆、函数功能介绍及例程1、dsolve 函数dsolve函数⽤于求常微分⽅程组的精确解,也称为常微分⽅程的符号解。

如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。

1)函数格式Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’)其中,‘eq1,eq2,…’:表⽰微分⽅程或微分⽅程组;’cond1,cond2,…’:表⽰初始条件或边界条件;‘Name’:表⽰变量。

没有指定变量时,matlab默认的变量为t;2)例程例1.1(dsolve 求解微分⽅程)求解微分⽅程:dsolve('Dy=3*x^2','x')例1.2(加上初始条件)求解微分⽅程:例2(dsolve 求解微分⽅程组)求解微分⽅程组:由于x,y均为t的导数,所以不需要在末尾添加’t’。

2、ode函数在上⽂中我们介绍了dsolve函数。

但有⼤量的常微分⽅程,虽然从理论上讲,其解是存在的,但我们却⽆法求出其解析解,此时,我们需要寻求⽅程的数值解。

ode是Matlab专门⽤于解微分⽅程的功能函数。

该求解器有变步长(variable-step)和定步长(fixed-step)两种类型。

不同类型有着不同的求解器,具体说明如下图。

其中,ode45求解器属于变步长的⼀种,采⽤Runge-Kutta算法;其他采⽤相同算法的变步长求解器还有ode23。

ode45表⽰采⽤四阶-五阶Runge-Kutta算法,它⽤4阶⽅法提供候选解,5阶⽅法控制误差,是⼀种⾃适应步长(变步长)的常微分⽅程数值解法,其整体截断误差为(Δx)^5。

解决的是Nonstiff(⾮刚性)常微分⽅程。

matlab中dsolve函数的用法

matlab中dsolve函数的用法

matlab中dsolve函数的用法Matlab中的dsolve函数是一个用于求解微分方程的函数。

该函数可以解析地求解常微分方程和偏微分方程,并返回其解析解或数值解。

在使用dsolve函数之前,我们首先需要了解微分方程的基本概念。

微分方程是描述自然界中各种变化规律的数学方程,是数学与物理、工程等学科的重要交叉点。

微分方程可以分为常微分方程和偏微分方程两类,常微分方程中的未知函数只依赖于一个变量,而偏微分方程中的未知函数依赖于多个变量。

在Matlab中,我们可以使用dsolve函数来求解常微分方程。

dsolve函数的基本语法如下所示:y = dsolve('diff(y,x) = x^2','y(0) = 0')其中,第一个参数是微分方程的字符串表达式,第二个参数是初始条件。

在上述例子中,我们要求解的微分方程是dy/dx = x^2,并且初始条件为y(0) = 0。

函数返回的结果是一个符号表达式,可以通过subs函数将其中的符号变量替换为具体的数值。

在对常微分方程进行求解时,dsolve函数可以处理一阶或高阶的常微分方程,可以是线性或非线性的,可以是齐次或非齐次的。

对于一些常见的常微分方程,dsolve函数可以直接给出解析解,而对于一些复杂的方程,dsolve函数可以给出通解或特解。

除了常微分方程,dsolve函数还可以用于求解偏微分方程。

对于一些简单的偏微分方程,dsolve函数可以给出解析解,而对于一些复杂的方程,dsolve函数可以给出数值解。

对于偏微分方程的求解,我们需要指定每个变量的偏导数,以及每个变量的初始条件。

除了基本的微分方程求解功能,dsolve函数还提供了一些高级的功能,如求解微分方程的特解、求解微分方程的稳定解等。

此外,dsolve函数还可以用于求解微分方程的边值问题和初值问题。

在使用dsolve函数时,我们需要注意一些注意事项。

首先,当我们求解微分方程时,需要将微分方程转化为标准形式,即将未知函数的导数写在等式的左边,并将初始条件写在等式的右边。

用MATLAB求解微分方程

用MATLAB求解微分方程
用MATLAB求解微分方程
1. 微分方程的解析解
求微分方程(组)的解析解命令:
dsolve(‘方程1’, ‘方程2’,…‘方程n’, ‘初始条件’, ‘自变量’)
结 果:u = tan(t-c)
解 输入命令:dsolve('Du=1+u^2','t')
STEP2
STEP1
解 输入命令: y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x')
导弹追踪问题
设位于坐标原点的甲舰向位于x轴上点A(1, 0)处的乙舰发射导弹,导弹头始终对准乙舰.如果乙舰以最大的速度v0(是常数)沿平行于y轴的直线行驶,导弹的速度是5v0,求导弹运行的曲线方程.又乙舰行驶多远时,导弹将它击中? 解法一(解析法)
由(1),(2)消去t整理得模型:
解法二(数值解)
结 果 为:x = (c1-c2+c3+c2e -3t-c3e-3t)e2t y = -c1e-4t+c2e-4t+c2e-3t-c3e-3t+c1-c2+c3)e2t z = (-c1e-4t+c2e-4t+c1-c2+c3)e2t
2、取t0=0,tf=12,输入命令: [T,Y]=ode45('rigid',[0 12],[0 1 1]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+')
3、结果如图
图中,y1的图形为实线,y2的图形为“*”线,y3的图形为“+”线.

matlab编写龙格库塔法或欧拉法求解常微分方程数值解

matlab编写龙格库塔法或欧拉法求解常微分方程数值解

龙格库塔法(Runge-Kutta method)和欧拉法(Euler's method)是两种常用的数值求解常微分方程的方法。

这里分别给出它们的MATLAB实现:1. 龙格库塔法(Runge-Kutta method):```matlabfunction [y, t] = runge_kutta(f, y0, t0, tf, h)% f: 微分方程函数,输入为[y, t],输出为dy/dt% y0: 初始值% t0: 初始时间% tf: 结束时间% h: 步长N = round((tf - t0) / h); % 计算迭代次数t = zeros(1, N + 1); % 初始化时间向量y = zeros(size(y0), N + 1); % 初始化解向量t(1) = t0;y(:, 1) = y0;for i = 1:Nk1 = h * f(y(:, i), t(i));k2 = h * f(y(:, i) + k1 / 2, t(i) + h / 2);k3 = h * f(y(:, i) + k2 / 2, t(i) + h / 2);k4 = h * f(y(:, i) + k3, t(i) + h);y(:, i + 1) = y(:, i) + (k1 + 2 * k2 + 2 * k3 + k4) / 6;t(i + 1) = t(i) + h;endend```2. 欧拉法(Euler's method):```matlabfunction [y, t] = euler_method(f, y0, t0, tf, h)% f: 微分方程函数,输入为[y, t],输出为dy/dt% y0: 初始值% t0: 初始时间% tf: 结束时间% h: 步长N = round((tf - t0) / h); % 计算迭代次数t = zeros(1, N + 1); % 初始化时间向量y = zeros(size(y0), N + 1); % 初始化解向量t(1) = t0;y(:, 1) = y0;for i = 1:Ny(:, i + 1) = y(:, i) + h * f(y(:, i), t(i));t(i + 1) = t(i) + h;endend```使用这两个函数时,需要定义一个表示微分方程的函数`f`,例如:```matlabfunction dydt = my_ode(y, t)dydt = -y; % 一个简单的一阶线性微分方程:dy/dt = -yend```然后调用相应的求解函数,例如:```matlaby0 = 1; % 初始值t0 = 0; % 初始时间tf = 5; % 结束时间h = 0.1; % 步长[y_rk, t_rk] = runge_kutta(@my_ode, y0, t0, tf, h);[y_euler, t_euler] = euler_method(@my_ode, y0, t0, tf, h);```。

matlab求解常微分方程

matlab求解常微分方程

用matlab 求解常微分方程在MATLAB 中,由函数dsolve ()解决常微分方程(组)的求解问题,其具体格式如下:r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')'eq1,eq2,...'为微分方程或微分方程组,'cond1,cond2,...',是初始条件或边界条件,'v'是独立变量,默认的独立变量是't'。

函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。

例1:求解常微分方程1dy dx x y =+的MATLAB 程序为:dsolve('Dy=1/(x+y)','x'),注意,系统缺省的自变量为t ,因此这里要把自变量写明。

其中:Y=lambertw(X)表示函数关系Y*exp(Y)=X 。

例2:求解常微分方程的MATLAB 程序为:2'''0yy y −=Y2=dsolve('y*D2y-Dy^2=0','x')Y2=dsolve('D2y*y-Dy^2=0','x')我们看到有两个解,其中一个是常数0。

例3:求常微分方程组253ttdxx y edtdyx y edt⎧++=⎪⎪⎨⎪−−=⎪⎩通解的MATLAB程序为:[X,Y]=dsolve('Dx+5*x+y=exp(t),Dy-x-3*y=exp(2*t)','t')例4:求常微分方程组2210cos,24,tttdx dyx t xdt dtdx dyy e ydt dt=−=⎧+−==⎪⎪⎨⎪++==⎪⎩2通解的MATLAB程序为:[X,Y]=dsolve('Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(-2*t)','x(0)=2,y(0)=0','t')以上这些都是常微分方程的精确解法,也称为常微分方程的符号解。

matlab解微分方程的通解

matlab解微分方程的通解

matlab解微分方程的通解
一、MATLAB解微分方程的通解
MATLAB有两种不同的函数可以解微分方程,一种是dsolve,另一种是ode45。

1.dsolve函数
dsolve函数是最常用的求解微分方程的函数,它可以求解一阶、二阶及更高阶的常微分方程,它能够得到方程的通解,但是它只能解指定类型的非线性方程,例如:常微分方程的通解,初值问题的解。

使用dsolve函数时应该按照以下步骤:
(1)输入微分方程,将其表示为一个字符串;
(2)调用dsolve函数,并传入字符串;
(3)调用结果,观察输出;
(4)如果输出为“未定义”,则需要检查输入的字符串是否正确;
(5)如果输出正确,则可以根据输出解析得到通解。

例1:解以下微分方程:
y″+2y′+5y=0
解:
首先将微分方程表示为字符串:
syms y
eqn=diff(y,2)+2*diff(y,1)+5*y==0
然后调用dsolve函数:
ySol=dsolve(eqn)
解析输出:
ySol=C1*exp(-3*t)+C2*exp(-2*t)
得到方程的通解为:
y=C1*exp(-3*t)+C2*exp(-2*t)
2.ode45函数
ode45函数是MATLAB中用于求解微分方程的另一种函数,它可以求解一阶、二阶及更高阶的常微分方程,以及积分方程、常系数线性微分方程等。

使用ode45函数时应该按照以下步骤:
(1)创建微分方程的函数;
(2)定义起始点和终止点;
(3)调用ode45函数,并传入函数及起始点和终止点;
(4)观察输出;
(5)根据结果获取通解。

matlab解常微分方程

matlab解常微分方程

matlab解常微分方程
Matlab是一种非常强大的数学软件,可以用来解决各种数学问题。

在工程、物理、生物学和其他科学领域中,常微分方程是一种非常重要的数学工具,用于模拟和解决许多问题。

使用Matlab可以方便地求解常微分方程。

Matlab提供了几种解常微分方程的函数,包括ode45、ode23、ode15s等。

这些函数可以解决一般常微分方程、刚性常微分方程、偏微分方程等。

使用这些函数可以简单地解决一些复杂的数学问题,并且可以快速地得到结果。

除了内置函数,Matlab还提供了一些工具箱,如Symbolic Math Toolbox和Partial Differential Equation Toolbox等。

这些工具箱提供了更高级的功能,可以用来求解更复杂的问题。

在使用Matlab解常微分方程时,需要了解一些数学知识,如常微分方程的基本概念、初值问题、边值问题、刚性问题等。

此外,还需要了解一些Matlab编程知识,如函数定义、变量赋值、循环、条件语句等。

总之,Matlab是一个非常强大的工具,可以用来解决各种数学问题,特别是常微分方程。

使用Matlab可以简单地解决一些复杂的数学问题,并且可以快速地得到结果。

- 1 -。

Matlab学习——求解微分方程(组)

Matlab学习——求解微分方程(组)

Matlab学习——求解微分⽅程(组)介绍:1.在 Matlab 中,⽤⼤写字母 D 表⽰导数,Dy 表⽰ y 关于⾃变量的⼀阶导数,D2y 表⽰ y 关于⾃变量的⼆阶导数,依此类推.函数 dsolve ⽤来解决常微分⽅程(组)的求解问题,调⽤格式为X=dsolve(‘eqn1’,’eqn2’,…)如果没有初始条件,则求出通解,如果有初始条件,则求出特解系统缺省的⾃变量为 t。

2.函数 dsolve 求解的是常微分⽅程的精确解法,也称为常微分⽅程的符号解.但是,有⼤量的常微分⽅程虽然从理论上讲,其解是存在的,但我们却⽆法求出其解析解,此时,我们需要寻求⽅程的数值解,在求常微分⽅程数值解⽅⾯,MATLAB 具有丰富的函数,将其统称为 solver,其⼀般格式为:[T,Y]=solver(odefun,tspan,y0)说明:(1)solver 为命令 ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb、ode15i 之⼀.(2)odefun 是显⽰微分⽅程y ' = f (t , y) 在积分区间 tspan = [t 0 , t f ] 上从t0 到t f⽤初始条件 y0求解.(3)如果要获得微分⽅程问题在其他指定时间点t 0 , t1 , t 2 , , t f上的解,则令tspan = [t 0 , t1 , t 2 , t f ](要求是单调的).(4)因为没有⼀种算法可以有效的解决所有的 ODE 问题,为此,Matlab 提供了多种求解器 solver,对于不同的 ODE 问题,采⽤不同的 solver3.在 matlab 命令窗⼝、程序或函数中创建局部函数时,可⽤内联函数 inline,inline 函数形式相当于编写 M 函数⽂件,但不需编写 M-⽂件就可以描述出某种数学关系.调⽤ inline 函数,只能由⼀个 matlab 表达式组成,并且只能返回⼀个变量,不允许[u,v]这种向量形式.因⽽,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应⽤ inline 函数,inline 函数的⼀般形式为:FunctionName=inline(‘函数内容’, ‘所有⾃变量列表’)例如:(求解 F(x)=x^2*cos(a*x)-b ,a,b 是标量;x 是向量)在命令窗⼝输⼊:Fofx=inline('x.^2.*cos(a.*x)-b','x','a','b');g = Fofx([pi/3 pi/3.5],4,1)系统输出为:g=-1.5483 -1.7259注意:由于使⽤内联对象函数 inline 不需要另外建⽴ m ⽂件,所有使⽤⽐较⽅便,另外在使⽤ ode45 函数的时候,定义函数往往需要编辑⼀个 m ⽂件来单独定义,这样不便于管理⽂件,这⾥可以使⽤ inline 来定义函数。

matlab求解常微分方程的准确解

matlab求解常微分方程的准确解

matlab求解常微分方程的准确解使用Matlab求解常微分方程的准确解一、引言常微分方程是研究自然界现象和工程实际问题中常见的数学工具之一。

求解常微分方程的准确解对于理解问题的本质和性质具有重要意义。

本文将介绍如何使用Matlab来求解常微分方程的准确解,并通过具体的例子进行演示。

二、常微分方程的基本概念常微分方程是指包含未知函数及其导数的方程。

一般形式为:dy/dx = f(x,y)其中,y是未知函数,x是自变量,f(x,y)是已知函数。

常微分方程的解是指能够满足方程的函数y(x)。

三、Matlab的符号计算工具箱Matlab提供了符号计算工具箱,可以对方程进行符号计算。

通过符号计算工具箱,我们可以求解常微分方程的准确解。

四、使用Matlab求解常微分方程的步骤1. 定义未知函数和自变量。

在Matlab中,可以使用符号变量来定义未知函数和自变量。

2. 定义常微分方程。

使用符号变量来定义常微分方程。

3. 求解常微分方程。

使用dsolve函数来求解常微分方程的准确解。

4. 绘制准确解的图像。

使用ezplot函数来绘制准确解的图像。

五、具体例子假设我们要求解一阶线性常微分方程:dy/dx + y = x其中,y是未知函数,x是自变量。

1. 定义未知函数和自变量。

在Matlab中,可以使用符号变量来定义未知函数和自变量。

syms y(x)2. 定义常微分方程。

使用符号变量来定义常微分方程。

eqn = diff(y,x) + y == x3. 求解常微分方程。

使用dsolve函数来求解常微分方程的准确解。

sol = dsolve(eqn)4. 绘制准确解的图像。

使用ezplot函数来绘制准确解的图像。

ezplot(sol)六、总结本文介绍了如何使用Matlab求解常微分方程的准确解。

通过符号计算工具箱,我们可以方便地求解常微分方程,并得到准确解的图像。

使用Matlab求解常微分方程的准确解可以帮助我们更好地理解问题的本质和性质,并为进一步的分析和应用提供基础。

实验七用matlab求解常微分方程(最新整理)

实验七用matlab求解常微分方程(最新整理)

实验七 用matlab 求解常微分方程一、实验目的:1、熟悉常微分方程的求解方法,了解状态方程的概念;2、能熟练使用dsolve 函数求常微分方程(组)的解析解;3、能熟练应用ode45\ode15s 函数分别求常微分方程的非刚性、刚性的数值解;4、掌握绘制相图的方法二、预备知识:1.微分方程的概念未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。

如果未知函数是一元函数,称为常微分方程。

常微分方程的一般形式为),,",',,()(=n y y y y t F 如果未知函数是多元函数,成为偏微分方程。

联系一些未知函数的一组微分方程组称为微分方程组。

微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。

若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为)()(')()(1)1(1)(t b y t a y t a y t a y n n n n =++++-- 若上式中的系数ni t a i ,,2,1),( =均与t 无关,称之为常系数。

2.常微分方程的解析解有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy可化为dt y dy=+1,两边积分可得通解为1-=tce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解.线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。

高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。

一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程),,",',()1()(-=n n y y y t f y 设)1(21,,',-===n n y y y y y y ,可将上式化为一阶方程组⎪⎪⎪⎩⎪⎪⎪⎨⎧====-),,,,(''''2113221n n nn y y y t f y yy y y y y反过来,在许多情况下,一阶微分方程组也可化为高阶方程。

用MATLAB解常微分方程

用MATLAB解常微分方程

实验四求微分方程的解一、问题背景与实验目的实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程, 真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限 的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组) 的解法,既要研究微分方程(组)的解析解法(精确解),更要研究微分方程(组) 的数值解法(近似解).对微分方程(组)的解析解法(精确解),Matlab 有专门的函数可以用,本实 验将作一定的介绍.本实验将主要研究微分方程(组)的数值解法(近似解),重点介绍Euler 折线 法.二、相关函数(命令)及简介1. dsolve ('equ1','equ2';…):Matlab 求微分方程的解析解.equ1、equ2、… 为方程(或条件).写方程(或条件)时用 Dy 表示y 关于自变量的一阶导数, 用用D2y 表示y 关于自变量的二阶导数,依此类推.2. simplify (s ):对表达式s 使用maple 的化简规则进行化简.例如:syms xsim pl ify (si n (x )A2 + cos (x )^2) an s=13. [r,how]=simple (s ):由于 Matlab 提供了多种化简规则,simpie 命令就是 对表达式s 用各种规则进行化简,然后用r 返回最简形式,how 返回形成这种 形式所用的规则.例如:syms x[r,how]=sim ple (cos (x )A2-si n (x )A2) r = cos (2*x ) how = comb ine4. [T,Y] = solver ( odefun,tspan,y ))求微分方程的数值解.说明:(1)其中的 solver 为命令 ode45、ode23、ode113 ode15s ode23s 、ode23t 、 ode23tb 之一.⑶ 在积分区间tspan=[t 0,t f ]上,从t o 到t f ,用初始条件y 求解.⑵odefu n 是显式常微分方程:詈 f(t ,y)y(t 0) y o⑷ 要获得问题在其他指定时间点t0,t1,t2,上的解,则令tspan=[tott, ,t f ](要求是单调的).(5)因为没有一种算法可以有效地解决所有的ODE问题,为此,Matlab提供了多种求解器Solver,对于不同的ODE问题,采用不同的Solver.⑹要特别的是:ode23、ode45是极其常用的用来求解非刚性的标准形式的一阶常微分方程(组)的初值问题的解的Matlab的常用程序,其中:ode23采用龙格-库塔2阶算法,用3阶公式作误差估计来调节步长,具有低等的精度.ode45则采用龙格-库塔4阶算法,用5阶公式作误差估计来调节步长,有中等的精度.5. ezplot(x,y,[tmin,tmax]):符号函数的作图命令.x,y为关于参数t 号函数,[tmin,tmax]为t的取值范围.6.iniine():建立一个内联函数.格式:inline('expr', 'var1', 'var2',…),括号里的表达式要加引号.例:Q = dblquad(inline('y*sin(x)'), pi, 2*pi, 0, pi)的符注意x三、实验内容1.几个可以直接用Matlab 求微分方程精确解的例子:例1:求解微分方程dy2xy xe dx求解本问题的Matlab 程序为:syms x yy=dsolve('Dy+2*x*y=x*ex p(-xA2)','x') diff(y,x)+2*x*y-x*ex 卩(帜八2)sim plify(diff(y,x)+2*x*y-x*ex 卩(帜八2))说明:(1)行Iine1是用命令定义x,y 为符号变量.这里可以不写,但为确保正确性, 建议写上;⑵ 行Iine2是用命令求出的微分方程的解:1/2*ex p(-xA2)*xA2+ex p(-xA2)*C1(3)行Iine3使用所求得的解.这里是将解代入原微分方程,结果应该为0, 但这里给出:-x^3*ex p(-xA2)-2*x*ex p(-xA2)*C1+2*x*(1/2*ex p(-xA2)*xA2+ex p(-xA2)*C1)确是微分方程的解.e x 0在初始条件y(1) 2e 下的特解,并画出解函 数的图形.求解本问题的Matlab 程序为:syms x yy=dsolve('x*Dy+y-ex p(x)=0','y(1)=2*ex p(1)', 'x')ezpl ot(y)e e x微分方程的特解为:y=1/x*exp(x)+1/x* exp (1) (Matlab 格式),即卩 y --------- 解函数的图形如图1:2 x,并加以验证.%li ne1 %li ne2 %li ne3 %li ne4⑷行 Iine4 用 simplify()函数对上式进行化简,结果为0,表明y y(x)的例2:求微分方程xy' y并画出解函数的图形.求解本问题的Matlab 程序为:syms x y t[x,y]=dsolve('Dx+5*x+y=ex p(t)','Dy-x-3*y=0','x(0)=1','y(0)=0','t') sim ple(x); sim ple(y);ezpl ot(x,y,[0,1.3]);axis auto微分方程的特解(式子特别长)以及解函数的图形均略.2. 用ode23 ode45等求解非刚性的标准形式的一阶常微分方程(组)的初值问 题的数值解(近似解)•例4:求解微分方程初值问题dy22y(0) 1间[0, 0.5].fun=i niin eC-2*y+2*x^2+2*x','x','y'); [x,y]=ode23(fu n, [0,0.5],1); x'; y';plot(x,y,'o-') >> x' ans =0.0000 0.0400 0.0900 0.1400 0.2900 0.34000.39000.4400>> y'-30dx例3:求微分方程组dtdy5xx 3ye t在初始条件x|t 0 1,yl t 0 0下的特解,2x 2x的数值解,求解范围为区0.1900 0.2400 0.49000.50001/x exp(x)+1/x exp(1)5040302010-10-20-6-4-2246x0.9247 0.8434 0.7754 0.7199 0.6764 0.62220.61050.6084 0.6154 0.61792.ans =1.0000 0.6440图形结果为图0.6例5:求解描述振荡器的经典的Ver der Pol 微分方程分析:令 d 2y dt 2y 0,y(0) 1, y'(0) 0, 7.X 1 y ,x 2dx 1 则 dx 1 dt , dtdx 2 X 2,~dr2(1 X 1 )X 2 X 1.先编写函数文件verderpol.m : fun ctio nxp rime = verder pol(t,x) global mu; xp rime = [x(2) ;mu*(1-x(1)^2)*x (2) -x(1)]; 再编写命令文件vdp 1.m : global mu; mu = 7; y0=[1;0][t,x] = ode45('verderpol',[0,40],y0); x1=x(:,1);x2=x(:,2); plot(t,x1)图形结果为图3.0.950.90.850.80.750.70.650.150.20.250.30.350.40.450.50.053. 用Euler 折线法求解前面讲到过,能够求解的微分方程也是十分有限的.下面介绍用Euler 折线 法求微分方程的数值解(近似解)的方法.Euler 折线法求解的基本思想是将微分方程初值问题dx S y(x 0) y 。

常微分方程的数值解的matlab命令实现方法

常微分方程的数值解的matlab命令实现方法

常微分方程的数值解的matlab命令实现方法常微分方程的数值解在 MATLAB 中可以通过 ode 函数或 dsolve 函数进行求解。

其中,ode 函数可以求解一阶常微分方程,而 dsolve 函数可以求解二阶及以上的常微分方程。

下面是具体的实现方法:1. 一阶常微分方程的求解对于一阶常微分方程,可以使用 ode 函数求解。

假设我们要求解的常微分方程为:dx/dt = f(x, t)可以使用以下命令进行求解:y0 = [a, 0]; % 初值条件tspan = [0, 20]; % 时间区间[t, y] = ode45(@(t, y) odefun(t, y, a), tspan, y0); % 求解其中,odefun 函数用于定义常微分方程的解,它是一个自定义函数,其形式可以为:dy/dt = f(t, y)其中,dy 是 y 的求导,f(t, y) 是常微分方程的系数矩阵。

在 MATLAB 中,可以使用 dy[] 函数来计算 y 的求导,例如:dy = dy[](t, y);最后,使用 ode45 函数求解常微分方程的解,其中 tspan 是时间区间,y0 是初值条件。

2. 二阶常微分方程的求解对于二阶常微分方程,可以使用 dsolve 函数求解。

假设我们要求解的二阶常微分方程为:d2y/dt2 + p(t)dyy/dt + q(t)dy/dt + r(t)y = 0可以使用以下命令进行求解:syms t pqr;y0 = [a1, a2, a3]; % 初值条件[t, y] = dsolve(@(t, y) dy0(t, y), t, y0); % 求解其中,dy0 函数用于定义二阶常微分方程的解,其形式可以为:d2y/dt2 + p(t)dyy/dt + q(t)dy/dt + r(t)y = 0其中,d2y/dt2 是 y 的二阶求导,其它项是 y 的求导。

在 MATLAB 中,可以使用 dy0[] 函数来计算 y 的二阶求导。

matlab算法-求解微分方程数值解和解析解

matlab算法-求解微分方程数值解和解析解

MATLAB是一种用于数学计算、工程和科学应用程序开发的高级技术计算语言和交互式环境。

它被广泛应用于各种领域,尤其在工程和科学领域中被用于解决复杂的数学问题。

微分方程是许多工程和科学问题的基本数学描述,求解微分方程的数值解和解析解是MATLAB算法的一个重要应用。

1. 求解微分方程数值解在MATLAB中,可以使用各种数值方法来求解微分方程的数值解。

其中,常见的方法包括欧拉法、改进的欧拉法、四阶龙格-库塔法等。

这些数值方法可以通过编写MATLAB脚本来实现,从而得到微分方程的近似数值解。

以常微分方程为例,可以使用ode45函数来求解微分方程的数值解。

该函数是MATLAB中用于求解常微分方程初值问题的快速、鲁棒的数值方法,可以有效地得到微分方程的数值解。

2. 求解微分方程解析解除了求解微分方程的数值解外,MATLAB还可以用于求解微分方程的解析解。

对于一些特定类型的微分方程,可以使用符号计算工具箱中的函数来求解微分方程的解析解。

通过符号计算工具箱,可以对微分方程进行符号化处理,从而得到微分方程的解析解。

这对于研究微分方程的性质和特点非常有帮助,也有助于理论分析和验证数值解的准确性。

3. MATLAB算法应用举例在实际工程和科学应用中,MATLAB算法求解微分方程问题非常常见。

在控制系统设计中,经常需要对系统的动态特性进行分析和设计,这通常涉及到微分方程的建模和求解。

通过MATLAB算法,可以对系统的微分方程进行数值求解,从而得到系统的响应曲线和动态特性。

另外,在物理学、生物学、经济学等领域的建模和仿真中,也经常需要用到MATLAB算法来求解微分方程问题。

4. MATLAB算法优势相比于其他数学软件和编程语言,MATLAB在求解微分方程问题上具有明显的优势。

MATLAB提供了丰富的数值方法和工具,能够方便地对各种微分方程进行数值求解。

MATLAB具有直观的交互式界面和强大的绘图功能,能够直观地展示微分方程的数值解和解析解,有利于分析和理解问题。

二阶常微分方程matlab的数值解和解析解分析总报告

二阶常微分方程matlab的数值解和解析解分析总报告

2013-6-14
(1)通解随初始条件变化情况 Ex1: a=2,b=3,c=1,y(0)=0;y'(0)=0,w=1
Ex2: a=2,b=3,c=1,y(0)=2;y'(0)=0,w=1
Ex3: a=2,b=3,c=1,y(0)=2;y'(0)=4,w=1
(2)通解随a,b,c变化情况 Ex1: a=2,b=3,c=1,y(0)=0;y'(0)=0,w=1
?讨论思路1通解随初始条件变化情况2通解随abc变化情况b24ac0两个不同的实根b24ac0两个相同的重根b24ac0两个不同的复数根3通解随w变化情况1
Matቤተ መጻሕፍቲ ባይዱab解二阶常微分方程
方程:a*y''(t)+b*y'(t)+c=sin(wt) 求解:1.解析解 2.数值解(欧拉方法) 目的:1.比较两种求解方式的拟合情况 2.通解随w变化的规律
Ex4: a=-2,b=3,c=1,y(0)=0;y'(0)=0,w=1
Ex5: a=2,b=-3,c=1,y(0)=0;y'(0)=0,w=1
Ex6: a=2,b=3,c=-1,y(0)=2y'(0)=1,w=1
b^2-4ac=0情况
2013-6-14
EX: a=2 ,b=2*sqrt(2) ,c=1,y(0)=0;y'(0)=0,w=1
2013-6-14
2013-6-14
2013-6-14
b^2-4ac<0情况
2013-6-14
(3).b^2-4ac<0 EX:a=4,b=-1,c=2,y(0)=0;y'(0)=0,w=1
EX:a=4,b=1,c=2,y(0)=3,y'(0)=0,w=1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《高等数学》实验报告实验人员:系(班): 学号: 姓名: 实验地点:电教楼五号机房实验名称:Matlab 高等数学实验实验时间:2014-6-3 16:30--18:30
实验名称:用Matlab 软件求常微分方程的解(或通解)实验目的:熟练掌握Matlab 软件求常微分方程的解(或通解)实验内容:(给出实验程序与运行结果)1、求微分方程的特解. 1、⎪⎩⎪⎨⎧===+-10)0(,6)0(034'22y y y dx dy dx y d 程序:>> dsolve('D2y-4*Dy+3*y','y(0)=6,Dy(0)=10','x')
ans = 4*exp(x)+2*exp(3*x)吕梁学院《高等数学》实验报告
2、⎪⎩⎪⎨⎧===++0)0(,2)0(044'22y y y dx dy dx y d 程序:>>dsolve('4*D2y+4*Dy+y','y(0)=2,Dy(0)=0','x') ans =
2*exp(-1/2*x)+exp(-1/2*x)*x 3、⎪⎩
⎪⎨⎧===++15)0(',0)0(029422y y y dx dy dx y d 程序:>>dsolve('D2y+4*Dy+29*y=0','y(0)=9,Dy(0)=15','x') ans = 33/5*exp(-2*x)*sin(5*x)+9*exp(-2*x)*cos(5*x)4、⎪⎩⎪⎨⎧===+-3)0(',0)0(013422y y y dx dy dx y d 程序:>>dsolve('D2y-4*dy+13*y=0','y(0)=0','Dy(0)=3','x') ans = 3/13*sin(13^(1/2)*x)*13^(1/2)-4/13*cos(13^(1/2)*x)*dy+4/13*dy 5、⎪⎩⎪⎨⎧-===--5)0(',0)0(04322y y y dx dy dx y d 程序:>>dsolve('D2y-3*Dy-4*y','y(0)=0,Dy(0)=-5','x') ans = exp(-x)-exp(4*x)
二、求齐次非线性微分方程的通解1、133222+=--x y dx dy dx y d 程序:>>dsolve('D2y-2*Dy-3*y=3*x+1','x') ans = exp(-x)*C2+exp(3*x)*C1+1/3-x
2、x xe y dx dy dx y d 22265=+- 程序:>>dsolve('D2y-5*Dy+6*y=x*exp(2*x)','x') ans = exp(3*x)*C2+exp(2*x)*C1-1/2*x*exp(2*x)*(2+x)
3、x x y dx y d cos 422=+ 程序:>>dsolve('D2y+4*y=x*cos(x)','x') ans = sin(2*x)*C2+cos(2*x)*C1+2/9*sin(x)+1/3*x*cos(x)
4、x e y dx y d x cos 22+=+ 程序:>>dsolve('D2y+y=exp(x)','x') ans = sin(x)*C2+cos(x)*C1+1/2*exp(x)
>>dsolve('D2y+y=cos(x)','x') ans = sin(x)*C2+cos(x)*C1+1/2*cos(x)+1/2*sin(x)*x 则原式=
sin(x)*C2+cos(x)*C1+1/2*exp(x)+sin(x)*C2+cos(x)*C1+1/2*cos(x)+1/2*sin(x)*x 5、x y dx dy dx y d 2sin 5222=+- 程序:>>dsolve('D2y-2*Dy+5*y=sin(2*x)','x') ans =exp(x)*sin(2*x)*C2+exp(x)*cos(2*x)*C1+1/17*sin(2*x)+4/17*cos(2*x)3、微分方程实例1、试求的经过点M (0,1)且在此点与直线相切的积分曲线。

x y =''12+=x y 由题意得⎪⎩
⎪⎨⎧===21)0(,1)0('"y y x y 程序:>>dsolve('D2y=x','y(0)=1,Dy(0)=1/2','x') ans = 1/6*x^3+1/2*x+1实验心得: Matlab 是一个画图和解题的好工具,图的精美与准确让
我佩服数学实验课内容简单、易理解,但也有挑战性。

我觉得数学建模很枯燥,很乏味,但是慢慢了解了Matlab软件基础和功能后,我越发喜欢这个看似无所不能的软件。

随着对软件的不断深入,我觉得Matlab 软件还是很有意思的,即使Matlab软件界面全部是英文,而且有很多专业的词汇,很多地方作为初学者的我还看不太懂,特别是一些细节方面的问题,比如“:”“;”的区别、“.*”和“*”的区别等等,但随着我一边上网查阅相关资料,一边解决老师的上机作业,我体会到在面对不知道的问题的时候要学会自己去寻找方法解决。

同时,通过使用Matlab软件,使我懂得无论做什么事情都应该学会耐心、细致。

相关文档
最新文档