文档库 最新最全的文档下载
当前位置:文档库 › 数学模型之微分方程及其MATLAB求解

数学模型之微分方程及其MATLAB求解

数学模型之微分方程及其MATLAB求解

---卫星轨迹等经典例题求解分析1. 考虑初值问题画图

y'''?3y ''?y 'y = 0 y(0) = 0 y '(0) =1 y ' '(0) = ?1

2、

3、

【实验步骤与程序】

1.

M -文件建立m函数文件

function y=f(t,x)

y=[x(2);x(3);9*x(3)^2+x(1)*x(2)];

求解微分方程,命令如下:

x0=[0;1;-1];

[t,y]=ode45(@mm,[0,2.5],x0);

plot(y(:,1),y(:,2));

figure(2);

plot3(y(:,1),y(:,2),y(:,3))

2、M -文件建立m函数文件

function dx=appollo(t,x)

mu=1/82.45;

mustar=1-mu;

r1=sqrt((x(1)+mu)^2+x(3)^2);

r2=sqrt((x(1)-mustar)^2+x(3)^2);

dx=[x(2)

2*x(4)+x(1)-mustar*(x(1)+mu)/r1^3-mu*(x(1)-mustar)/r2^3 x(4)

-2*x(2)+x(3)-mustar*x(3)/r1^3-mu*x(3)/r2^3];

求解微分方程,命令如下:

x0=[1.2;0;0;-1.04935751];

options=odeset('reltol',1e-8);

[t,y]=ode45(@appollo,[0,20],x0,options); plot(y(:,1),y(:,3))

title('Appollo卫星运动轨迹')

xlabel('x')

ylabel('y')

3、M -文件建立m函数文件

functiondy=odefun(t,x)

fun=@(dxy)[dxy(1)*sin(x(4))+dxy(2)^2+2*x(1)*x(3)-x(1)*dxy(1)*x(4) x(1)*dxy(1)*dxy(2)+cos(dxy(2))-3*x(3)*x(2)];

options=optimset('display','off');

y=fsolve(fun,x([1,3]),options);%使用fsolve求解出x''和y''

dy=[x(2);y(1);x(4);y(2)];%状态变量一阶微分值

求解微分方程,命令如下:

[t,y]=ode45(@odefun,[0 3],[1 0 0 1]');

plot(t,y)

legend('x','x''','y','y''')

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法的实用性。 本节考虑实际初值问题 使用解析法,对方程两边同乘以得到下式

用Matlab解微分方程

用Matlab 软件求解微分方程 1.解析解 (1)一阶微分方程 求21y dx dy +=的通解:dsolve('Dy=1+y^2','x') 求y x dx dy -+=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)一阶微分方程

用MATLAB解常微分方程

实验四 求微分方程的解 一、问题背景与实验目的 实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法,既要研究微分方程(组)的解析解法(精确解),更要研究微分方程(组)的数值解法(近似解). 对微分方程(组)的解析解法(精确解),Matlab 有专门的函数可以用,本实验将作一定的介绍. 本实验将主要研究微分方程(组)的数值解法(近似解),重点介绍 Euler 折线法. 二、相关函数(命令)及简介 1.dsolve ('equ1','equ2',…):Matlab 求微分方程的解析解.equ1、equ2、…为方程(或条件).写方程(或条件)时用 Dy 表示y 关于自变量的一阶导数,用用 D2y 表示 y 关于自变量的二阶导数,依此类推. 2.simplify(s ):对表达式 s 使用 maple 的化简规则进行化简. 例如: syms x simplify(sin(x)^2 + cos(x)^2) ans=1 3.[r,how]=simple(s):由于 Matlab 提供了多种化简规则,simple 命令就是对表达式 s 用各种规则进行化简,然后用 r 返回最简形式,how 返回形成这种形式所用的规则. 例如: syms x [r,how]=simple(cos(x)^2-sin(x)^2) r = cos(2*x) how = combine 4.[T,Y] = solver(odefun,tspan,y 0) 求微分方程的数值解. 说明: (1) 其中的 solver 为命令 ode45、ode23、ode113、ode15s 、ode23s 、ode23t 、ode23tb 之一. (2) odefun 是显式常微分方程:?????==0 0)() ,(y t y y t f dt dy (3) 在积分区间 tspan =],[0f t t 上,从0t 到f t ,用初始条件0y 求解.

Matlab求解微分方程(组)及偏微分方程(组)

第四讲 Matlab 求解微分方程(组) 理论介绍:Matlab 求解微分方程(组)命令 求解实例:Matlab 求解微分方程(组)实例 实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法. 一.相关函数、命令及简介 1.在Matlab 中,用大写字母D 表示导数,Dy 表示y 关于自变量的一阶导数,D2y 表示y 关于自变量的二阶导数,依此类推.函数dsolve 用来解决常微分方程(组)的求解问题,调用格式为: X=dsolve(‘eqn1’,’eqn2’,…) 函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解. 注意,系统缺省的自变量为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 0[,]f t t =上从0t 到f t 用初始条件0y 求解. (3)如果要获得微分方程问题在其他指定时间点012,,, ,f t t t t 上的解,则令 tspan 012[,,,]f t t t t =(要求是单调的). (4)因为没有一种算法可以有效的解决所有的ODE 问题,为此,Matlab 提供

数学模型之微分方程及其MATLAB求解

数学模型之微分方程及其MATLAB求解 ---卫星轨迹等经典例题求解分析1. 考虑初值问题画图 y'''?3y ''?y 'y = 0 y(0) = 0 y '(0) =1 y ' '(0) = ?1 2、 3、 【实验步骤与程序】 1. M -文件建立m函数文件

function y=f(t,x) y=[x(2);x(3);9*x(3)^2+x(1)*x(2)]; 求解微分方程,命令如下: x0=[0;1;-1]; [t,y]=ode45(@mm,[0,2.5],x0); plot(y(:,1),y(:,2)); figure(2); plot3(y(:,1),y(:,2),y(:,3))

2、M -文件建立m函数文件 function dx=appollo(t,x) mu=1/82.45; mustar=1-mu; r1=sqrt((x(1)+mu)^2+x(3)^2); r2=sqrt((x(1)-mustar)^2+x(3)^2); dx=[x(2) 2*x(4)+x(1)-mustar*(x(1)+mu)/r1^3-mu*(x(1)-mustar)/r2^3 x(4) -2*x(2)+x(3)-mustar*x(3)/r1^3-mu*x(3)/r2^3];

求解微分方程,命令如下: x0=[1.2;0;0;-1.04935751]; options=odeset('reltol',1e-8); [t,y]=ode45(@appollo,[0,20],x0,options); plot(y(:,1),y(:,3)) title('Appollo卫星运动轨迹') xlabel('x') ylabel('y')

用matlab求解常微分方程

实验六 用matlab 求解常微分方程 1.微分方程的概念 未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。如果未知函数是一元函数,称为常微分方程。常微分方程的一般形式为 0),,",',,()(=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 =++++-- 若上式中的系数n i t a i ,,2,1),( =均与t 无关,称之为常系数。 2.常微分方程的解析解 有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy 可化为 dt y dy =+1,两边积分可得通解为 1-=t ce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解. 线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。 一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程 ),,",',()1()(-=n n y y y t f y 设)1(21,,',-===n n y y y y y y ,可将上式化为一阶方程组 ?????????====-),,,,(''''2113221n n n n y y y t f y y y y y y y 反过来,在许多情况下,一阶微分方程组也可化为高阶方程。所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。 3.微分方程的数值解法 除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程无限世界,应用中主要依靠数值解法。考虑一阶常微分方程初值问题 ???=<<=000)()),(,()('y t y t t t t y t f t y f

Matlab求解微分方程(组)及偏微分方程(组)

第四讲 Matlab 求解微分方程(组) 理论介绍:Matlab 求解微分方程(组)命令 求解实例:Matlab 求解微分方程(组)实例 实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法. 一.相关函数、命令及简介 1.在Matlab 中,用大写字母D 表示导数,Dy 表示y 关于自变量的一阶导数,D2y 表示y 关于自变量的二阶导数,依此类推.函数dsolve 用来解决常微分方程(组)的求解问题,调用格式为: X=dsolve(‘eqn1’,’eqn2’,…) 函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解. 注意,系统缺省的自变量为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 0[,]f t t =上从0t 到f t 用初始条件0y 求解. (3)如果要获得微分方程问题在其他指定时间点012,,,,f t t t t 上的解,则令 tspan 012[,,, ]f t t t t =(要单调的). (4)因为没有一种算法可以有效的解决所有的ODE 问题,为此,Matlab 提供了多种求解器solver ,对于不同的ODE 问题,采用不同的solver.

利用matlab编写S函数求解微分方程

利用matlab编写S函数求解微分方程自动化专业综合设计报告 自动化专业综合设计报告

函数求解微S编写设计题目:利用 matlab 分方程 自动化系统仿真实验室所在 实验室: 郭卫平 指导教师: 律迪迪学生姓名 200990519114 班级文自0921 学号 成绩评定: 自动化专业综合设计报告

一、设计目的 了解使用simulink的扩展工具——S-函数,s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API 等的,它的魅力在于完美结合了simulink 框图简洁明快的特点和编程灵活方便的优点,提供了增强和扩展sinulink能力的强大机制,同时也是使用RTW实现实时仿真的关键。 二、设计要求 求解解微分方程 y'=y-2x/y 自动化专业综合设计报告 y(0)=1 要求利用matlab编写S函数求解 三、设计内容(可加附页) 【步骤1】获取状态空间表达式。

在matlab中输入 dsolve(‘Dy=y-2*x/y','y(0)=1', 'x') 得到 y=(2*x+1).^(1/2); 【步骤2】建立s函数的m文件。 利用21·用S函数模板文件。 以下是修改之后的模板文件sfuntmpl.m 的内容。 function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag) %SFUNTMPL S-function M-file General template define you can With % M-file S-functions, you own ordinary differential system equations (ODEs), discrete % equations, and/or just about any type of algorithm to be used within a %

常微分方程组的MATLAB求解范例

微分方程求解是系统仿真、数学模型实现以及很多工程问题求解的核心部分,应用MATLAB可以方便地对一阶常微分方程组进行求解,这里将对其基本方法进行介绍。值得注意的是,高阶微分方程组可以通过引进参变量化为一阶常微分方程组,也可以同样方便解决。 若有一个微分方程(组)的参变量为列向量,即,且它参变量随时间变化的微分方程可以有以下方程描述: 这里的f函数是一个列向量,即, i=1,2,3…,n,它可以是任意非线性函数。 则一般微分方程可以如此求解: [t,x]=ode45(f,timespan,x0) 对于刚性方程,即一些解变化缓慢,一些解变化剧烈,且两者相差较为悬殊的这种方程,通常调用ode15s而非o de45进行求解。 例1: 解:编写function或者用匿名函数 表达f=y-2*x/y即可; function dy=f(t,y) dy=y-2*t/y; end 命令: t=[0,1];%y0=1; [x,y]=ode45('f',t,1);%注意 这里的x相当于自变量t plot(x,y,x,sqrt(1+2*x)),legend('数值解','解析解');

可见求解效果不错。 例2、 解:编写function function dx=f(t,x)%返回值是列向量 dx=[-x(2)-x(3); x(1)+0.2*x(2); 0.2+(x(1)-5.7)*x(3)]; end 命令: t=[0,100]; y0=[0 0 0]';%注意是列向量 [x,y]=ode45('f',t,y0); plot(x,y); 例3、 这是一个二阶微分方程组,可以引进变量,由此ODE可以化成如下形式 可以采用和例2相同的方法求解: function dx=f(t,x) dx=[x(2); -(x(1)^2-1)*x(2)-x(1)]; End

第五讲matlab求解微分方程

第五讲 Matlab求解微分方程 教学目的:学会用MATLAB求简单微分方程的解析解、数值解,加深对微分方程概念和应用的理解;针对一些具体的问题,如追击问题,掌握利用软件求解微分方程的过程;了解微分方程模型解决问题思维方法及技巧;体会微分方程建摸的艺术性. 教学重点:利用机理分析建模微分方程模型,掌握追击问题的建模方法,掌握利用MATLAB求解数值解. 教学难点:利用机理分析建模微分方程模型,通过举例,结合图形以及与恰当的假设突破教学难点. 1微分方程相关函数(命令)及简介

因为没有一种算法可以有效地解决所有的 ODE 问题,为此,Matlab 提供了多种求解器 Solver,对于不同的ODE 问题,采用不同的Solver.

要特别的是:ode23、ode45 是极其常用的用来求解非刚性的标准形式的一阶常微分方程(组)的初值问题的解的 Matlab 的常用程序,其中: ode23 采用龙格-库塔2 阶算法,用3 阶公式作误差估计来调节步长,具有低等的精度. ode45 则采用龙格-库塔4 阶算法,用5 阶公式作误差估计来调节步长,具有中等的精度. 2 求解微分方程的一些例子 几个可以直接用 Matlab 求微分方程精确解的例子: 例1:求解微分方程 22x xe xy dx dy -=+,并加以验证. 求解本问题的Matlab 程序为: syms x y %line1 y=dsolve('Dy+2*x*y=x*exp(-x^2)','x') %line2 diff(y,x)+2 *x*y-x*exp(-x^2) %line3 simplify(diff(y,x)+2*x*y-x*exp(-x^2)) %line4 说明:(1) 行line1是用命令定义x,y 为符号变量.这里可以不写,但为确保正确性,建议写上; (2) 行line2是用命令求出的微分方程的解: 1/2*exp(-x^2)*x^2+exp(-x^2)*C1 (3) 行line3使用所求得的解.这里是将解代入原微分方程,结果应该为0,但这里给出: -x^3*exp(-x^2)-2*x*exp(-x^2)*C1+2*x*(1/2*exp(-x^2)*x^2+exp(-x^

Matlab解微分方程(ODE+PDE)

常微分方程: 1 ODE解算器简介(ode**) 2 微分方程转换 3 刚性/非刚性问题(Stiff/Nonstiff) 4 隐式微分方程(IDE) 5 微分代数方程(DAE) 6 延迟微分方程(DDE) 7 边值问题(BVP) 偏微分方程(PDEs)Matlab解法 偏微分方程: 1 一般偏微分方程组(PDEs)的命令行求解 2 特殊偏微分方程(PDEs)的PDEtool求解 3 陆君安《偏微分方程的MATLAB解法 先来认识下常微分方程(ODE)初值问题解算器(solver) [T,Y,TE,YE,IE] = odesolver(odefun,tspan,y0,options) sxint = deval(sol,xint) Matlab中提供了以下解算器: 输入参数: odefun:微分方程的Matlab语言描述函数,必须是函数句柄或者字符串,必须写成Matlab

规范格式(也就是一阶显示微分方程组),这个具体在后面讲解 tspan=[t0 tf]或者[t0,t1,…tf]:微分变量的范围,两者都是根据t0和tf的值自动选择步长,只是前者返回所有计算点的微分值,而后者只返回指定的点的微分值,一定要注意对于后者tspan必须严格单调,还有就是两者数据存储时使用的内存不同(明显前者多),其它没有任何本质的区别 y0=[y(0),y’(0),y’’(0)…]:微分方程初值,依次输入所有状态变量的初值,什么是状态变量在后面有介绍 options:微分优化参数,是一个结构体,使用odeset可以设置具体参数,详细内容查看帮助 输出参数: T:时间列向量,也就是ode**计算微分方程的值的点 Y:二维数组,第i列表示第i个状态变量的值,行数与T一致 在求解ODE时,我们还会用到deval()函数,deval的作用就是通过结构体solution计算t 对应x值,和polyval之类的很相似! 参数格式如下: sol:就是上次调用ode**函数得道的结构体解 xint:需要计算的点,可以是标量或者向量,但是必须在tspan范围内 该函数的好处就是如果我想知道t=t0时的y值,不需要重新使用ode计算,而直接使用上次计算的得道solution就可以 [教程] 微分方程转换为一阶显示微分方程组方法 好,上面我们把Matlab中的常微分方程(ODE)的解算器讲解的差不多了,下面我们就具体开始介绍如何使用上面的知识吧! 现实总是残酷的,要得到就必须先付出,不可能所有的ODE一拿来就可以直接使用,因此,在使用ODE解算器之前,我们需要做的第一步,也是最重要的一步,借助状态变量将微分

Matlab求解常微分方程边值问题的方法

Matlab 求解常微分方程边值问题的方法:bvp4c 函数 常微分方程的边值问题,即boundary value problems ,简称BVP 问题,是指表达形式为 (,)((),())0'=??=?y f x y g y a y b 或(,,)((),(),)0'=??=? y f x y p g y a y b p 的方程组(p 是未知参数),在MA TLAB 中使用积分器bvp4c 来求解。 [命令函数] bvp4c [调用格式] sol=bvp4c(odefun,bcfun,solinit,options,p1,p2,…) sol 为一结构体,sol.x 、sol.y 、sol.yp 分别是所选择的网格点及其对应的y(x)与y'(x)数值; bvp4c 为带边值条件常微分方程积分器的函数命令;odefun 为描述微分方程组的函数文件;bcfun 为计算边界条件g(f(a),f(b),p)=0的函数文件;solinit 为一结构体,solinit.x 与solinit.y 分别是初始网格的有序节点与初始估计值,边界值条件分别对应a=solinit.x(l)和b=solinit.x(end); options 为bvpset 命令设定的可选函数,可采用系统默认值;p1, p2…为未知参数。 例 求常微分方程0''+=y y 在(0)2=y 与(4)2=-y 时的数值解。 [解题过程] 仍使用常用方法改变方程的形式: 令1=y y ,21'=y y ,则原方程等价于标准形式的方程组1221 ?'=??'=-??y y y y ; 将其写为函数文件twoode.m ; 同时写出边界条件函数对应文件twobc.m ; 分别使用结构solinit 和命令bvp4c 确定y-x 的关系; 作出y-x 的关系曲线图。 [算例代码] solinit =bvpinit(linspace(0,4,5),[1 0]); % linspace(0,4,5)为初始网格,[1,0]为初始估计值 sol=bvp4c(@twoode,@twobc,solinit); % twoode 与twobc 分别为微分方程与边界条件的函数,solinit 为结构 x=linspace(0,4); %确定x 范围 y=deval(sol,x); %确定y 范围 plot(x,y(1,:)); %画出y-x 的图形 %定义twoode 函数(下述代码另存为工作目录下的twoode.m 文件) function dydx= twoode(x,y) %微分方程函数的定义 dydx =[y(2) -abs(y(1))]; %定义twobc 函数(下述代码另存为工作目录下的twobc.m 文件) function res= twobc(ya,yb); %边界条件函数的定义 res=[ya(1);yb(1)+2];

用MATLAB编程求解微分方程

用MATLAB 编程 1..求解微分方程的解, 22x dy xy xe dx -+=并加以验证。 clear all clc syms x y y=dsolve('Dy+2*x*y=x*exp(-x*x)','x'); diff(y,x)+2*x*y-x*exp(-x*x); b=simplify(diff(y,x)+2*x*y-x*exp(-x*x)) 2..求微分方程'0x xy y e +-=在初始条件下的特解,并画出函数图形 clear all clc syms x y y=dsolve('x*Dy+y-exp(x)=0','y(1)=2*exp(1)','x') ezplot(y) 结果 y = (exp(x)+exp(1))/x -6-4-20 246-30-20 -10 10 20 30 40 50 x (exp(x)+exp(1))/x

3..求微分方程组530t dx x y e dt dy x y dt ?++=????--=??在初始条件0,0x t x y ==下的特解,并画出解函数的图形 clear all clc syms x y t [x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0','x(0)=1','y(0)=1','t') x=simple(x); y=simple(y); ezplot(x,y,[0,1.3]) axis auto 结果 x = -4*exp((-1+15^(1/2))*t)*(19/110*15^(1/2)+6/11)+exp((-1+15^(1/2))*t)*(19/110*15^(1/ y = exp((-1+15^(1/2))*t)*(19/110*15^(1/2)+6/11)+exp(-(1+15^(1/2))*t)*(-19/110*15^(1/2)-30-20-10 010205 10 15 20 25 30 35 40 45 50 x y x = -8/55 exp(-t+t 151/2) 151/2+...+2/11 exp(t), y = exp((-1+151/2) t) (19/110 151/2+6/11)+...-1/11 exp(t)

常微分方程组的MATLAB求解方法

一、常微分方程组(ODEs) 简介 (1) 1. 简谐振动 (1) 2. 电路Vander Pol 方程 (1) 3. 生物种群的Volterra-Lotka 方程 (2) 4. 蝴蝶效应Lorenz 方程 (2) 二、MATLAB 数值求解ODEs的方法 (3) 1. 多变量常微分方程组的求解 (4) 2. 高阶常微分方程如何表示? (4) 3. 相图和极限环怎么绘制? (4) 个人在学习自动控制原理、现代控制理论、非线性动力学等课程时,经常遇到求解常微分方程组的问题。很多人知道MATLAB 是简便易行的一个工具,但是不会调用它自带的ode 求解器,往往还在自己编写单步欧拉法的程序,不仅求解精度差,而且程序不规范,还浪费了大量时间。以下我就工程中常见的一些非线性系统,利用MATLAB 自带的求解器,说明一下如何求解ODE 方程组、以及如何绘制相轨迹和极限环的问题。供相关专业工科大学生参考和借鉴。 一、常微分方程组(ODEs) 简介 以下列出了一些较为著名的非线性动力学系统的数学表达式,大都是由常微分方程组表达的。这种形式在工程中应用非常广泛,如力学中的非线性振动、航天领域的弹道计算、控制工程中的非线性系统等,由于自然界的大多数现象都表现出非线性,因此对于该种动力系统的研究以及微分方程的求解也具有重大的意义。以下列出一些工程应用中常见的一些由ODE 方程组所描述的动力系统。 1. 简谐振动 该式是一个2 阶非线性常微分方程。 2. 电路Vander Pol 方程

Fig 1. VanderPol 系统时域响应 3. 生物种群的 Volterra-Lotka 方程 Fig 2. Volterra-Lotka 方程时域响应(左) Fig 3 非线性动力学方程的极限环(右) 左图的捕食者 -猎物随时间变化的曲线表现出强烈的非线性,而状态变量 x 、y 的 变化却呈现出一个规则的鹅卵石状。 4. 蝴蝶效应 Lorenz 方程

matlab微分方程的求解

Matlab 程序设计:微分方程求解 主讲人:王佐才 1.引言 Matlab能够求解的微分方程包括:常微分方程的初值问题,常微分方程的边值问题,时变常微分方程的初值问题,以及偏微分方程。 2.常微分方程的初值问题 Matlab可以求解的常微分方程包括: 显示常微分方程:y′=f(t, y) 线性隐式常微分方程:M(t,y)y′=f(t, y), 其中,M(t,y)为矩阵。 全隐式常微分方程:f(t, y, y′)=0 3.利用Matlab编程时需要用的主要命令 ode45: 基于显示Runge-Kutta(4,5)方法求解。对于多数方程来讲,ode45是最佳的尝试函数命令。 ode23:基于显示Runge-Kutta(2,3)方法求解。 ode113:利用变阶Adams-Bashforth-Moulton 算法求解。与ode45函数相比,该方程对于精密度步长及方程难于估计时效更好,但是该方法是多步算法,需要用到前面几个节点的信息来求解当前节点,效率较低。 4.ode45调用格式 [t, x]=ode45(@myode, [t0:dt:t1], initial_condition) 从调用格式来看,首先必须生成函数文件“myode”。 function dydt=myode(t,y) dydt=[fun1; fun2;…;funn]; end 5.应用实例一:求解微分方程:(1+y2)y′?2y=0,初值y(0)=1时, t从0 至10时刻的解。 function dydt=myode(t,y) dydt=[y(1)*2./(1+y(1).^2)]; end [t, y]=ode45(@myode, [0:0.01:10], [1])

实验七用matlab求解常微分方程

实验七 用matlab 求解常微分方程 一、实验目的: 1、熟悉常微分方程的求解方法,了解状态方程的概念; 2、能熟练使用dsolve 函数求常微分方程(组)的解析解; 3、能熟练应用ode45\ode15s 函数分别求常微分方程的非刚性、刚性的数值解; 4、掌握绘制相图的方法 二、预备知识: 1.微分方程的概念 未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。如果未知函数是一元函数,称为常微分方程。常微分方程的一般形式为 0),,",',,()(=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 =++++-- 若上式中的系数 n i t a i ,,2,1),( =均与t 无关,称之为常系数。 2.常微分方程的解析解 有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy 可化为 dt y dy =+1,两边积分可得通解为 1-=t ce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解. 线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。 一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程 ),,",',()1()(-=n n y y y t f y 设) 1(21,,',-===n n y y y y y y ,可将上式化为一阶方程组 ?????????====-),,,,(''''2113221n n n n y y y t f y y y y y y y 反过来,在许多情况下,一阶微分方程组也可化为高阶方程。所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。 3.微分方程的数值解法 除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程无限世界,应用中主要依靠数值解法。考虑一阶常微分方程初值问题

微分方程在MATLAB中的实现

微分方程在MATLAB中的实现 作者:吴建宏 时间:2011.09.20 ********************************************* 作者简介: 吴建宏,男,毕业于哈尔滨工业大学(威海),现就读于同济大学,攻读汽车电子方向,有两年的MATLAB实践经验,个人喜欢建模,编程和电控方面的。真诚愿意和各位志同道合的朋友一起探讨交流,一起搭建广阔的知识平台。 *********************************************

PART ONE 微分方程简介 一、微分方程基本概念 微分方程:未知函数以及它们的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。其中,未知函数的最高阶数称为微分方程的阶。 偏微分方程:如果未知函数是多元函数,那么这个微分方程就是偏微分方程。常微分方程:如果未知函数是一元函数,那么这个微分方程就是常微分方程。 二、微分方程的解法 高等数学里讲过,微分方程的解法有分离变量法,常数变易法,特征值法……而在解决工程实际问题时候,利用MATLAB 求解微分方程的方法主要有符号解法和数值解法。其中,符号解法主要可以求解可以用特征值法求解的常系数微分方程和少数特殊的微分方程,有很大的局限性,而且运行时间较长,优点就是可以得到精确的数学表达式。大部分实际的微分方程不得不通过数值解法来求解,优点就是运行时间快,可以解决复杂的线性或者非线性微分方程。缺点就是解是近似值。 PART TWO 微分方程的符号解法(dsolve ) 微分方程的符号解法主要是函数dsolve ,这个函数用起来很简单,最重要的是要知道神马时候能够用dsolve ,神马时候不能用,当运行出错的时候,该怎么处理。接下来进入正文。 一、语法 r =dsolve('eq1,eq2,...','cond1,cond2,...','v') r =dsolve('eq1','eq2',...,'cond1','cond2',...,'v') 二、语法详解 1.eq1,eq2……用来代表看上去能够用高等数学介绍过的手段求解出来的微分方程,如果实在不太熟悉或者忘了,没关系,后面会提供出现错误时候的处理措施;v 代表自变量,默认值为时间t 。边界条件/初始值用cond1,cond2,...来表示。 2.在eq1,eq2……中,用D 来代表变量的微分,例如?y 用Dy 表示,而? ?y 用y D 2来表示。 3.初始值的边界条件用b a y =)(或者b a Dy =)(来表示。如果初始值的个数小于变量的个数,输出的结果中就会出现待定系数。 4.Dsolve 能够接受的最大输入初始条件是12个 5.如果是一个等式一个输出,输出的结果是非线性的符号表达式;如果是多个等式和多个输出,将会按照左边输出参数[y1,y2……]中的顺序输出相应的符号表达式;如果是多等式,单输出,返回一个结构体数组。 出现错误时候怎么处理?如果dsolve 不能找到有限解,它会试图去找方程的隐式解,当找到隐式解得时候,就会返回警告标志;如果既找不到有限解,也找不到隐式解,就会返回empty 的错误警告"warning Warning:explicit solution could not be found"。在这两种情况下都只能通过使用数值解法来解决。

用MATLAB解常微分方程

实验四求微分方程的解 一、问题背景与实验目的 实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程, 真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限 的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组) 的解法,既要研究微分方程(组)的解析解法(精确解),更要研究微分方程(组) 的数值解法(近似解). 对微分方程(组)的解析解法(精确解),Matlab 有专门的函数可以用,本实 验将作一定的介绍. 本实验将主要研究微分方程(组)的数值解法(近似解),重点介绍Euler 折线 法. 二、相关函数(命令)及简介 1. dsolve ('equ1','equ2';…):Matlab 求微分方程的解析解.equ1、equ2、… 为方 程(或条件).写方程(或条件)时用 Dy 表示y 关于自变量的一阶导数, 用用D2y 表示y 关于自变量的二阶导数,依此类推. 2. simplify (s ):对表达式s 使用maple 的化简规则进行化简. 例如: syms x sim pl ify (si n (x )A2 + cos (x )^2) an s=1 3. [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 ine 4. [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

利用MATLAB求解微分方程

第三章 MATLAB 上机练习题目 (4)利用MATLAB 求解微分方程 一、 答卷形式:新建一个word 文档,将以下每道练习题使用的命令(或程 序)及其运行结果按顺序排列在该word 文档中,文档中必须写上自己的名字和学号,并以自己的名字命名,最后提交该word 文档。 二、 练习题目: 1、利用dsolve 命令求解下列微分方程的通解,并用命令simplify 化简。 (1)x y xe '''= (2)33x y y y y e ''''''+++= (3)4cos x y y e x '''-=+ 2、利用dsolve 命令求解下列微分方程的特解,并用命令ezplot 在指定区间内画出积分曲线。 (1)Logistic 模型:0.2(1),(0)3,[0,60]500 dx x x x t dt =-=∈ (2)2(1)0,(0)0,(0)1,[1,1]x y xy y y x ''''--===∈- (3)2633109,(0),(0),[5,0.25]77 x y y y e y y x ''''-+===∈- 3、求解快速静脉注射条件下,药物在体内分布的二室模型的特解 21213211112212 ()V df k k f k g dt V V dg k f k g dt V ?=-++????=-??初始条件为01(0)/,(0)0f T V g == 4、求微分方程2,(0)1x y y y y '=-=的解析解和其在[0,1]上的数值解,计算它们之间的误差,分别用不同的线型和颜色将解析解和数值解绘制在一张图上。计算数值解时,要求步长为0.01。 5、求微分方程组 ???????=-+=++00y x dt dy y x dt dx 在初始条件0|,1|00====t t y x 下的特解(解析解),并利用ezplot 命令画出解

相关文档
相关文档 最新文档