用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);```。

  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软件,使我懂得无论做什么事情都应该学会耐心、细致。

相关文档
最新文档