matlab简介(解常微分方程绘制函数图像)
MATLAB第十三讲常微分方程初值问题数值解法 ppt课件
1.483240
0.8 1.649783
1.612452
1.0 1.784770
1.732051
误差
0.008602 0.016572 0.025726 0.037331 0.052719
与准确解 y 12x相比,可看出欧拉公式的计算结
果精度很差.
上页 下页
欧拉公式具有明显的几何意义, 就是用折线近似代
或表示为下列平均化形式
yp yc
yn yn
hf hf
( x n , y n ), ( x n1 , y p ),
f(x ,y 1 ) f(x ,y 2 ) L y 1 y 2 .
它表明f满足利普希茨条件,且L的大小反映了右端函 数f关于y变化的快慢,刻画了初值问(1.1)式和(1.2)式 是否为好条件. 这在数值求解中也是很重要的.
上页 下页
虽然求解常微分方程有各种各样的解析方法,但 解析方法只能用来求解一些特殊类型的方程,实际问 题中归结出来的微分方程主要靠数值解法.
利普希茨常数(简称Lips.常数).
上页 下页
定理1 设f在区域D={(x, y)|axb,yR}上连续, 关 于y满足利普希茨条件,则对任意x0[a, b], y0R,常 微分方程初值问题(1.1)式和(1.2)式当x[a, b]时存在 唯一的连续可微解y(x) .
解的存在唯一性定理是常微分方程理论的基本内 容,也是数值方法的出发点,此外还要考虑方程的解 对扰动的敏感性,它有以下结论.
可得欧拉法(2.1)的公式误差为
y (x n 1 ) y n 1 h 2 2y (n ) h 2 2y (x n ), (2 .3 )
称为此方法的局部截断误差.
上页 下页
用matlab求解常微分方程-(最新版)
实验六用matlab 求解常微分方程1.微分方程的概念未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。
如果未知函数是一元函数,称为常微分方程。
常微分方程的一般形式为),,",',,()(n yy y y t F 如果未知函数是多元函数,成为偏微分方程。
联系一些未知函数的一组微分方程组称为微分方程组。
微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。
若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为)()(')()(1)1(1)(t b yt a y t a y t a yn n n n 若上式中的系数n it a i ,,2,1),(均与t 无关,称之为常系数。
2.常微分方程的解析解有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1y dtdy可化为dtydy 1,两边积分可得通解为1tcey .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解.线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。
高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。
一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程),,",',()1()(n n yy y t f y设)1(21,,',n n yy y y y y ,可将上式化为一阶方程组),,,,(''''2113221n n nn y y y t f y y y y y y y 反过来,在许多情况下,一阶微分方程组也可化为高阶方程。
所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。
matlab欧拉法解常微分方程
matlab欧拉法解常微分方程matlab欧拉法解常微分方程欧拉法是解决微分方程数值计算的一种基本方法,是通过估算函数图像的变化来得到函数的近似值。
而matlab是一种强大的数值计算软件,也能轻易地实现欧拉法解常微分方程的计算。
步骤一:选择解题模型选择合适的数学模型很重要。
对于已经给定的微分方程,需要将它化为标准的形式。
例如,我们有如下的微分方程:y’ = 2y - 3,y(0) = 1将其化为标准的形式:dy/dx = 2y -3 将初始值y(0) = 1带入。
步骤二:确定计算步长确定计算步长h。
步长的大小与计算精度有直接关系,步长太小,计算量将很大,而精度较高;步长太大,精度较低。
步长的计算公式为:h = (b-a)/n其中,a和b是区间限制,n是初始步数。
步骤三:使用欧拉法求解微分方程根据欧拉法的公式,假设在t时刻函数y的值是y(t),求在下一个时刻t+h如何估算y值,公式为:y(t+h) = y(t)+ h * y'(t)将y'(t)=2y-3代入上式,得:y(t+h) = y(t)+ h* (2y(t)-3)接下来,根据初始值y(0) = 1,带入计算步长可得出一系列的近似值。
步骤四:绘制函数图像对于计算结果,应绘制出函数的近似图像。
通过matlab绘制y(x)的图像,也可以通过计算的数据进行近似曲线的绘制。
步骤五:测试计算结果通过计算结果与初始值进行比较,看算法是否正确和有效。
也可以将步长不同的计算结果进行比较,判断精度和计算效率的高低。
欧拉法解常微分方程在matlab中的使用,相较于手工计算,更具有高效、准确、方便的优势。
正因如此,在各类数学、物理、工程等领域中都有着广泛的应用。
第14章常微分方程的MATLAB求解
因此,方程 ,设其通解为
就成为 ,又
,这是一个关于变量 的一阶微分方程 因此又得到一个一阶微分方程
对它进行积分,便得到方程 的通解为 型的微分方程:方程中不显含自变量x ,为了求出它的解,我们令 ,并利用复合函数求导法则把 化为对 的导数,即 这样,方程 ,设它的通解为 就成为 这是一个关于变量 分离变量并积分,便得方程 的一阶微分方程 的通解为
14.6 边值问题的数值解
1.打靶法
打靶法也称为试射法,其基本思想是把边值问题作初值问题来求解,从满足 左端边界条件的解曲线中寻找也满足右端边界条件的解。
线性方程边值问题的打靶法:
考虑如下给出的二阶线性边值问题 该边值问题的打靶法求解过程可以由如下步骤完成:(1)计算下面齐次微分方程在区间 上的数值解 , ,初值条件: ;(2)计算下面齐 次微分方程在区间 上的数值解 , ,初值条件: ;(3)计算下面初值问题在区间 ,初值条件 : 计算 题的数值解 上的数值解 , ;(4)若
微分方程:一般的,凡表示未知函数、未知函数的导数与自变量之间的关系的方程,叫做微 分方程,有时也简称方程。 微分方程的阶:微分方程中所出现的未知函数的最高阶导数的阶数,叫做微分方程的阶 微分方程的解:找出这样的函数,把这函数代入微分方程能使该方程成为恒等式。这个函数 就叫做微分方程的解。 微分方程的通解:如果微分方程的解中含有任意常数,且任意常数的个数与微分方程的阶数 相同,这样的解叫做微分方程的通解。 初始条件:设微分方程中的未知函数为 ,如果微分方程是一阶的,通常用来确定任 意常数的条件是 时, 或写成 其中 都是给定的值;如果微分方程是二阶的,通常用来确定任意常数的条件是
其中 和 都是给定的值,上述这种条件叫做初始条件。 确定了通解中的任意常数以后,就得到微分方程的特解。求微分方程 件 的特解是这样一个问题,叫做一阶微分方程的初值问题,记作
matlab常微分方程数值解法精品PPT课件
2012
第七讲 常微分方程数值解法
内容提要
引言 欧拉近似方法 龙格-库塔(R-K)方法 MATLAB的常微分方程函数 小结
1、引言
物理学所研究的各种物质运动中,有许多物质运动的 过程是用常微分方程来描述的。
例如,质点的加速运动,简谐振动等。
F m dv dt
d2x 2x2 0
f xn1
x0
y(x), x dx
y(xn ) f y(xn ), xn h
作如下近似
yn y(xn )
得:
yn1 yn f yn , xn h
2.1.4 欧拉法误差
利用泰勒级数得:
y xn1 y(xn h)
y(xn )
hy(xn )
1 2
h2
y(xn )
y(xn )
x2 …. xn ….
y(x0) y(x1) y(x2) …. y(xn) ….
y0
y1 y2 …. yn ….
在xn节点上,微分方程可以写为
y(xn1) y(xn ) f y(xn ) , xn h
作如下近似:
yn y(tn )
则得到欧拉解法递推公式的一般形式:
yn1 yn f ( yn , xn ) h
hf
y(xn ),
xn
1 2
h2 y(xn )
作如下近似
yn y(xn )
yn1 yn f yn , xn h
局部截断误差
y
y0
dy dx
x0 x x0
y0 f ( y0 , x0 ) x x0
此切线与x=x1交点纵坐标为:
y1 y0 f ( y0 , x0 ) x1 x0
matlab常微分方程 ppt课件
odeplot 随计算过程,显示解向
量
属性名 OutputSel
Refine
2020/4/10
参数设置
取值
含义
若不使用缺省设置,则
有效值: 正整数向 量 缺省值:[]
OutputFcn所表现的是那 些正整数指定的解向量 中的分量的曲线或数据 。若为缺省值时,则缺 省地按上面情形进行操
作
有效值: 正整数k>1 缺省值:k
y1 (0 ) y 0
y0
y
2
(
0
)
y1
yn
(
0
)
yn
• (3)根据(1)与(2)的结果,编写能计 算
• 导数的M-函数文件odefile。
• (4)将文件odefile与初始条件传递给求解
• 器Solver中的一个,运行后就可得到ODE
• 的、在指定时间区间上的解列向量y(其中包 2含020/4y/10及不同阶的导数)。
参数设置
属性名 NormControl Events
取值
含义
有效值: on、off 缺省值:
off
为‘on’时,控制解向量 范数的相对误差,使每 步计算中,满足: norm(e)<=max(RelTol*n orm(y),AbsTol)
有效值: 为‘on’时,返回相应的 on、off 事件记录
2020/4/10
例3
x' x 2
x(0)
1
创建函数function2, 保存在function2.m中
function f=function2(t,x)
f=-x.^2;
在命令窗口中执行 >> [t,x]=ode45('function2',[0,1],1); >> plot(t,x,'-',t,x,'o'); >> xlabel('time t0=0,tt=1'); >> ylabel('x values x(0)=1');
如何使用MATLAB求解微分方程(组)ppt课件
差,输出参数,事件等,可缺省。 9
使用ODE?时如何编 写微分方程 ?
方式一:带额外参数,使用时需对参数进行赋值
function odefun(t,x,flag,R,L,C) %用flag说明R、L、C为变 量
xdot=zeros(2,1);
%表明其为列向量
xdot(1)=-R/L*x(1)-1/L*x(2)+1/L*f(t);
2
Where ?
工程控制
ODE
医学生理
航空航天
金融分析
3
Where ?
算法开发 数据分析
数值计算 MAT LAB
数据可视化
4
When ?
当对问题进行建模后,有常微分方程 需要求解时。
在生物建模中,经常需要求解常微分 方程。如药物动力学的房室模型的建模 仿真。
5
方法 ode23
ode45
数 ode113
当无法藉由微积分技巧求 得解析解时,这时便只能利 用数值分析的方式来求得其 数值解了。实际情况下,常 微分方程往往只能求解出其
数值解。
在数学中,刚性方程是指一 个微分方程,其数值分析的解 只有在时间间隔很小时才会稳 定,只要时间间隔略大,其解 就会不稳定。
目前很难去精确地去定义哪 些微分方程是刚性方程,但是 大体的想法是:这个方程的解
y(1)=x(2);
y1
y2
y(2)= -t*x(1)+exp(t)*x(2)+3*sin(2*t);
end
1000
求解程序ห้องสมุดไป่ตู้键步骤
[t,y]=ode45('odefun',[3.9 4.0],[2 8])
y
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是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
一、基本功能MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
二、特点1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;2) 具有完备的图形处理功能,实现计算结果和编程的可视化;3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
fft解常微分方程matlab
fft解常微分方程matlabFFT(快速傅里叶变换)是一种常用的数值计算方法,可以用于解决各种数学问题,包括常微分方程。
在本文中,我们将介绍如何使用FFT解常微分方程,并提供一些MATLAB代码示例。
让我们回顾一下常微分方程的基本概念。
常微分方程是描述自然现象中变化的数学模型,通常采用微分方程的形式表示。
解决微分方程的过程通常需要使用数值方法,其中FFT是一种常用的方法之一。
使用FFT解常微分方程的基本思路是将微分方程转化为傅里叶空间中的代数方程,然后使用FFT求解。
具体来说,我们可以将微分方程表示为:y''(t) + ay'(t) + by(t) = f(t)其中,y(t)是未知函数,a和b是常数,f(t)是已知函数。
我们可以将y(t)表示为傅里叶级数的形式:y(t) = ∑ c(k) exp(ikωt)其中,c(k)是傅里叶系数,ω是角频率。
将y(t)代入微分方程中,可以得到:-ω^2 c(k) + iωac(k) + bc(k) = F(k)其中,F(k)是f(t)的傅里叶系数。
我们可以将上述方程表示为矩阵形式:A c = F其中,A是一个三对角矩阵,c和F是向量。
我们可以使用FFT求解上述方程,得到傅里叶系数c(k),然后将其代入y(t)的傅里叶级数中,即可得到y(t)的解。
下面是一个MATLAB代码示例,演示如何使用FFT解常微分方程:% 定义常数和函数a = 0.1;b = 1;f = @(t) sin(t);% 定义时间和频率向量N = 1024;t = linspace(0, 2*pi, N+1);t = t(1:N);dt = t(2) - t(1);w = (2*pi/dt) * linspace(0, N-1, N) / N;% 计算傅里叶系数F = fft(f(t)) / N;A = -w.^2 + 1i*a*w + b;c = F ./ A;% 计算解y = real(ifft(c)) * N;% 绘制结果plot(t, y);xlabel('t');ylabel('y(t)');在上述代码中,我们首先定义了常数a、b和函数f(t),然后定义了时间和频率向量。
常微分方程matlab求解命令方法.ppt
N(t)表示人口数量,取人口变化率r =0.015,微分方程
dN 0.015N dt
N(1994) 12
18 16 14 12 1990 1995 2000 2005 2010 2015 2020
编辑窗口 function z=fun1(t,N) z=0.015*N;
命令窗口 ode23('fun1',[1994,2020],12)
y0 —— 初始条件 注: 函数F(t,y) 必须返回列向量. 数值解 y 的每一行对应于列向量T中的每一行数据
4/16
捕食者与被捕食者问题
海岛上有狐狸和野兔,当野兔数量增多时,狐狸捕食 野兔导致狐群数量增长;大量兔子被捕食使狐群进入 饥饿状态其数量下降;狐群数量下降导致兔子被捕食 机会减少,兔群数量回升。微分方程模型如下
1 2
k
t 2v sin
8/16
2008电影《集结号》展现出视听震撼的战争场面, 92式山炮,炮弹初速: 198米/秒,最大射程:2788米 利用实验程序确定阻力系数 k
function Xmax=mlab72(k) alfa=pi/4; v=198;g=9.8; t=0;dt=.1; x=0;y=0; while y>=0;
微分方程与计算机模拟
常微分方程数值解方法 捕食者与被捕食者问题 有阻力抛射曲线问题 卫星轨道模拟问题
1/16
数值方法求常微分方程初值问题
求解步骤:
y f (x, y)
y(
x
0
)
y0
(1)用函数文件定义一阶微分方程(或方程组)右端函数; (2)用MATLAB命令ode23()求数值解或绘积分曲线。
matlab简介(解常微分方程绘制函数图像)
MATLAB简介MATLAB是矩阵实验室(Matrix Labora tory)的简称,是美国Mat hWork s公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
一、基本功能MATLAB是由美国m a thwo rks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortra n)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Math ematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MA TLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATL AB来解算问题要比用C,FORTRA N等语言完成相同的事情简捷得多,并且MATL AB也吸收了像Map le等软件的优点,使MATLA B成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRA N,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MAT LAB函数库中方便自己以后调用,此外许多的M A TLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
常微分方程matlab
常微分方程matlab摘要:I.常微分方程简介A.常微分方程的定义B.常微分方程的应用领域II.MATLAB 在常微分方程中的应用A.MATLAB 的基本功能B.MATLAB 解决常微分方程的常用方法1.分离变量法2.齐次线性微分方程3.非齐次线性微分方程4.一阶微分方程组5.高阶微分方程组III.MATLAB 常微分方程求解实例A.分离变量法求解实例B.齐次线性微分方程求解实例C.非齐次线性微分方程求解实例D.一阶微分方程组求解实例E.高阶微分方程组求解实例IV.MATLAB 常微分方程可视化A.常微分方程图形绘制功能B.可视化实例正文:常微分方程是一种数学模型,用于描述许多现实世界中的动态过程。
例如,物理、化学、生物学、经济学等领域的问题都可以通过常微分方程来描述。
随着科技的发展,计算机数值计算在常微分方程的研究中扮演着越来越重要的角色。
MATLAB 作为一款功能强大的数学软件,在常微分方程的求解和可视化方面具有显著优势。
MATLAB 提供了丰富的常微分方程求解函数,可以通过ode45、ode23 等函数解决一阶、二阶及高阶微分方程组。
此外,MATLAB 还可以通过分离变量法、齐次线性微分方程、非齐次线性微分方程等方法解决各种类型的常微分方程问题。
为了更好地理解MATLAB 在常微分方程中的应用,我们来看一个具体的例子。
假设我们有一个非齐次线性微分方程:y"" + 3y" + 2y = sin(x),我们可以通过以下MATLAB 代码求解该方程:```matlab% 定义常微分方程的初始条件x0 = 0;y0 = 1;y1 = 0;% 利用MATLAB 求解非齐次线性微分方程[~, y] = ode45(@(t, y) [y"" + 3*y" + 2*y - sin(t)], [0, 10], [x0, y0, y1]);% 绘制解的图像figure;plot3(x, y(:, 1), y(:, 2));xlabel("x");ylabel("y");zlabel("y");title("非齐次线性微分方程的解");```通过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是一种强大的数学软件,可以用来求解常微分方程。
本文将介绍如何使用MATLAB求解常微分方程,并通过一个实例来说明其应用。
首先,我们需要了解常微分方程的基本概念。
常微分方程是指未知函数的导数与自变量之间的关系式。
一般形式为dy/dx = f(x, y),其中y 是未知函数,x是自变量,f(x, y)是已知函数。
常微分方程的解是满足该方程的函数。
在MATLAB中,我们可以使用ode45函数来求解常微分方程。
ode45是一种常用的数值求解器,它基于龙格-库塔方法,可以高效地求解一阶和二阶常微分方程。
下面以一个简单的例子来说明如何使用MATLAB求解常微分方程。
假设我们要求解的方程是dy/dx = x^2 + y,初始条件为y(0) = 1。
首先,我们需要定义一个匿名函数,表示方程的右侧函数f(x, y)。
在MATLAB中,可以使用@符号来定义匿名函数,代码如下:f = @(x, y) x^2 + y接下来,我们可以使用ode45函数来求解方程。
代码如下:[x, y] = ode45(f, [0, 1], 1)其中,[0, 1]表示求解的区间是从0到1,1表示初始条件y(0) = 1。
运行以上代码后,MATLAB会返回一个包含x和y的向量,分别表示求解得到的自变量和因变量的取值。
最后,我们可以使用plot函数将求解得到的结果可视化。
代码如下:plot(x, y)运行以上代码后,MATLAB会绘制出方程的解的图像。
通过以上步骤,我们就成功地使用MATLAB求解了常微分方程。
当然,MATLAB还提供了其他的求解器和函数,可以用来求解更复杂的常微分方程。
在实际应用中,我们可以根据具体的问题选择合适的求解器和函数。
总之,MATLAB是一个强大的数学软件,可以用来求解常微分方程。
通过使用MATLAB,我们可以高效地求解常微分方程,并得到方程的解。
matlab解隐式常微分方程
matlab解隐式常微分方程隐式常微分方程是指解析式中包含未知函数的导数的微分方程。
与显式常微分方程不同,隐式方程无法通过代数运算解出未知函数,需要通过数值方法求解。
而Matlab作为一款强大的数值计算工具,可以很好地解决隐式常微分方程的求解问题。
Matlab中求解隐式常微分方程的函数是ode15i,其使用方法与ode45等其他求解ODE的函数类似。
我们可以通过一个简单的例子来说明ode15i的使用方法。
假设我们要求解如下的隐式常微分方程:$$y''(t) + y(t) = 0$$其解析式为:$$y(t) = A\sin(t) + B\cos(t)$$其中A、B为常数。
现在我们使用ode15i函数来求解该隐式方程。
我们先定义隐式方程的函数句柄,其形式为:$$F(t,y,y',p) = y''(t) + y(t)$$其中p为待求解的参数,这里我们将其设为1。
代码如下:function dydt = myode(t,y,yp)dydt = [yp(1); -y(1)];end然后我们定义初值条件:$$y(0) = 0, y'(0) = 1$$代码如下:y0 = [0; 1];接下来,我们使用ode15i函数求解该隐式方程:[t,y] = ode15i(@myode,[0 10],y0,[],1);其中,@myode表示隐式方程的函数句柄,[0 10]表示求解的时间区间,y0为初值条件,[]表示没有事件函数,1为待求解的参数。
我们将求解结果绘制成图形:plot(t,y(:,1));运行以上代码,我们可以得到如下的求解结果:从图中可以看出,我们求解得到的结果与解析式的结果非常接近,证明了ode15i函数的有效性。
在实际应用中,隐式常微分方程的求解往往比较复杂,需要使用更加复杂的数值方法。
Matlab提供了多种求解ODE的函数,可以帮助我们快速、准确地求解各种类型的微分方程,为科学研究和工程应用提供了有力的支持。
用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 求解微分方程(组)实例实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法. 一.相关函数、命令及简介1.在Matlab 中,用大写字母D 表示导数,Dy 表示y 关于自变量的一阶导数,D2y 表示y 关于自变量的二阶导数,依此类推.函数dsolve 用来解决常微分方程(组)的求解问题,调用格式为:X=dsolve(‘eqn1’,’eqn2’,…)函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解.注意,系统缺省的自变量为t2.函数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.表1 Matlab中文本文件读写函数说明:ode23、ode45是极其常用的用来求解非刚性的标准形式的一阶微分方程(组)的初值问题的解的Matlab常用程序,其中:ode23采用龙格-库塔2阶算法,用3阶公式作误差估计来调节步长,具有低等的精度.ode45则采用龙格-库塔4阶算法,用5阶公式作误差估计来调节步长,具有中等的精度.3.在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 来定义函数. 二.实例介绍1.几个可以直接用Matlab 求微分方程精确解的实例 例1 求解微分方程2'2x y xy xe -+=程序:syms x y; y=dsolve(‘Dy+2*x*y=x*exp(-x^2)’,’x ’)例 2 求微分方程'0x xy y e +-=在初始条件(1)2y e =下的特解并画出解函数的图形.程序:syms x y; y=dsolve(‘x*Dy+y-exp(1)=0’,’y(1)=2*exp(1)’,’x ’);ezplot(y)例 3 求解微分方程组530tdx x y e dtdy x y dt⎧++=⎪⎪⎨⎪--=⎪⎩在初始条件00|1,|0t t x y ====下的特解并画出解函数的图形.程序:syms x y t[x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0','x(0)=1','y(0)=0','t') simple(x); simple(y)ezplot(x,y,[0,1.3]);axis auto2.用ode23、ode45等求解非刚性标准形式的一阶微分方程(组)的初值问题的数值解(近似解)例 4 求解微分方程初值问题2222(0)1dy y x xdx y ⎧=-++⎪⎨⎪=⎩的数值解,求解范围为区间[0,0.5].程序:fun=inline('-2*y+2*x^2+2*x','x','y');[x,y]=ode23(fun,[0,0.5],1); plot(x,y,'o-')例 5 求解微分方程22'2(1)0,(0)1,(0)0d y dyy y y y dt dtμ--+===的解,并画出解的图形.分析:这是一个二阶非线性方程,我们可以通过变换,将二阶方程化为一阶方程组求解.令12,,7dyx y x dtμ===,则 121221212,(0)17(1),(0)0dx x x dtdx x x x x dt⎧==⎪⎪⎨⎪=--=⎪⎩ 编写M-文件vdp.m function fy=vdp(t,x)fy=[x(2);7*(1-x(1)^2)*x(2)-x(1)]; end在Matlab 命令窗口编写程序 y0=[1;0][t,x]=ode45(@vdp,[0,40],y0);或[t,x]=ode45('vdp',[0,40],y0); y=x(:,1);dy=x(:,2); plot(t,y,t,dy)练习与思考:M-文件vdp.m 改写成inline 函数程序? 3.用Euler 折线法求解Euler 折线法求解的基本思想是将微分方程初值问题00(,)()dyf x y dxy x y ⎧=⎪⎨⎪=⎩ 化成一个代数(差分)方程,主要步骤是用差商()()y x h y x h +-替代微商dydx,于是00()()(,())()k k k k y x h y x f x y x h y y x +-⎧=⎪⎨⎪=⎩记1,(),k k k k x x h y y x +=+=从而1(),k k y y x h +=+于是0011(),,0,1,2,,1(,).k k k k k k y y x x x h k n y y hf x y ++=⎧⎪=+=-⎨⎪=+⎩例 6 用Euler 折线法求解微分方程初值问题22(0)1dyx y dxy y ⎧=+⎪⎨⎪=⎩的数值解(步长h 取0.4),求解范围为区间[0,2].分析:本问题的差分方程为00110,1,0.4,0,1,2,,1(,).k k k k k k x y h x x h k n y y hf x y ++===⎧⎪=+=-⎨⎪=+⎩程序:>> clear >> f=sym('y+2*x/y^2'); >> a=0; >> b=2; >> h=0.4; >> n=(b-a)/h+1; >> x=0; >> y=1;>> szj=[x,y];%数值解 >> for i=1:n-1y=y+h*subs(f,{'x','y'},{x,y});%subs ,替换函数 x=x+h; szj=[szj;x,y]; end >>szj>> plot(szj(:,1),szj(:,2))说明:替换函数subs 例如:输入subs(a+b,a,4) 意思就是把a 用4替换掉,返回 4+b ,也可以替换多个变量,例如:subs(cos(a)+sin(b),{a,b},[sym('alpha'),2])分别用字符alpha 替换a 和2替换b ,返回 cos(alpha)+sin(2)特别说明:本问题可进一步利用四阶Runge-Kutta 法求解,Euler 折线法实际上就是一阶Runge-Kutta 法,Runge-Kutta 法的迭代公式为001112341213243(),,(22),6(,),0,1,2,,1(,),22(,),22(,).k k k k k k k k k k k k y y x x x h h y y L L L L L f x y k n h h L f x y L h h L f x y L L f x h y hL ++=⎧⎪=+⎪⎪=++++⎪⎪=⎪=-⎨⎪=++⎪⎪⎪=++⎪⎪=++⎩相应的Matlab 程序为:>> clear >> f=sym('y+2*x/y^2'); >> a=0; >> b=2; >> h=0.4; >> n=(b-a)/h+1; >> x=0; >> y=1;>> szj=[x,y];%数值解 >> for i=1:n-1l1=subs(f, {'x','y'},{x,y});替换函数 l2=subs(f, {'x','y'},{x+h/2,y+l1*h/2}); l3=subs(f, {'x','y'},{x+h/2,y+l2*h/2}); l4=subs(f, {'x','y'},{x+h,y+l3*h}); y=y+h*(l1+2*l2+2*l3+l4)/6; x=x+h; szj=[szj;x,y]; end>>szj>> plot(szj(:,1),szj(:,2))练习与思考:(1)ode45求解问题并比较差异. (2)利用Matlab 求微分方程(4)(3)''20y y y -+=的解.(3)求解微分方程''2',2(1)0,030,(0)1,(0)0y y y y x y y --+=≤≤==的特解. (4)利用Matlab 求微分方程初值问题2''''00(1)2,|1,|3x x x y xy y y ==+===的解. 提醒:尽可能多的考虑解法 三.微分方程转换为一阶显式微分方程组Matlab 微分方程解算器只能求解标准形式的一阶显式微分方程(组)问题,因此在使用ODE 解算器之前,我们需要做的第一步,也是最重要的一步就是借助状态变量将微分方程(组)化成Matlab 可接受的标准形式.当然,如果ODEs 由一个或多个高阶微分方程给出,则我们应先将它变换成一阶显式常微分方程组.下面我们以两个高阶微分方程组构成的ODEs 为例介绍如何将它变换成一个一阶显式微分方程组.Step 1 将微分方程的最高阶变量移到等式左边,其它移到右边,并按阶次从低到高排列.形式为:()'''(1)'''(1)()'''(1)'''(1)(,,,,,,,,,,)(,,,,,,,,,,)m m n n m n x f t x x x x y y y y y g t x x x x y y y y ----⎧=⎨=⎩Step 2 为每一阶微分式选择状态变量,最高阶除外'''(1)123'''(1)123,,,,,,,,,m m n m m m m n x x x x x x x x x y x y x y x y--++++========注意:ODEs 中所有是因变量的最高阶次之和就是需要的状态变量的个数,最高阶的微分式不需要给它状态变量.Step 3 根据选用的状态变量,写出所有状态变量的一阶微分表达式''''122334123''12123,,,,(,,,,,),,(,,,,,)m m n m m m nm n x x x x x x x f t x x x x xx xg t x x x x +++++======练习与思考:(1)求解微分方程组**'''3312*'''3312()()22x x x y x r r y y y x y r r μμμμμμ⎧+-=+--⎪⎪⎨⎪=+--⎪⎩其中2r =1r =*1,μμ=-1/82.45,μ=(0) 1.2,x =(0)0,y ='(0)0,x ='(0) 1.049355751y =-(2)求解隐式微分方程组''''''''''''2235x y x y x y x y xy y ⎧+=⎨++-=⎩ 提示:使用符号计算函数solve 求'''',x y ,然后利用求解微分方程的方法 四.偏微分方程解法Matlab 提供了两种方法解决PDE 问题,一是使用pdepe 函数,它可以求解一般的PDEs,具有较大的通用性,但只支持命令形式调用;二是使用PDE 工具箱,可以求解特殊PDE 问题,PDEtoll 有较大的局限性,比如只能求解二阶PDE 问题,并且不能解决片微分方程组,但是它提供了GUI 界面,从复杂的编程中解脱出来,同时还可以通过File —>Save As 直接生成M 代码.1.一般偏微分方程(组)的求解(1)Matlab 提供的pdepe 函数,可以直接求解一般偏微分方程(组),它的调用格式为:sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t)@pdefun 是PDE 的问题描述函数,它必须换成标准形式:(,,)[(,,,)](,,,)m m u u u uc x t x x f x t u s x t u x t x x x-∂∂∂∂∂=+∂∂∂∂∂ 这样,PDE 就可以编写入口函数:[c,f,s]=pdefun(x,t,u,du),m,x,t 对应于式中相关参数,du 是u 的一阶导数,由给定的输入变量可表示出c,f,s 这三个函数.@pdebc 是PDE 的边界条件描述函数,它必须化为形式:(,,)(,,).*(,,,)0up x t u q x t u f x t u x∂==∂ 于是边值条件可以编写函数描述为:[pa,qa,pb,qb]=pdebc(x,t,u,du),其中a 表示下边界,b 表示上边界.@pdeic 是PDE 的初值条件,必须化为形式:00(,)u x t u =,故可以使用函数描述为:u0=pdeic(x)sol 是一个三维数组,sol(:,:,i)表示i u 的解,换句话说,k u 对应x(i)和t(j)时的解为sol(i,j,k),通过sol ,我们可以使用pdeval 函数直接计算某个点的函数值.(2)实例说明 求解偏微分2111222221220.024()0.17()u u F u u t xu u F u u tx ⎧∂∂=--⎪⎪∂∂⎨∂∂⎪=+-⎪∂∂⎩ 其中, 5.7311.46()x x F x e e -=-且满足初始条件12(,0)1,(,0)0u x u x ==及边界条件1(0,)0,u t x ∂=∂221(0,)0,(1,)1,(1,)0uu t u t t x∂===∂ 解:(1)对照给出的偏微分方程和pdepe 函数求解的标准形式,原方程改写为111221220.024()1.*()10.17u u F u u x u F u u u t x x ∂⎡⎤⎢⎥--⎡⎤⎡⎤⎡⎤∂∂∂=+⎢⎥⎢⎥⎢⎥⎢⎥-∂∂∂⎣⎦⎣⎦⎣⎦⎢⎥⎢⎥∂⎣⎦可见1121220.024()10,,,()10.17u F u u x m c f s F u u u x ∂⎡⎤⎢⎥--⎡⎤⎡⎤∂====⎢⎥⎢⎥⎢⎥-∂⎣⎦⎣⎦⎢⎥⎢⎥∂⎣⎦ %目标PDE 函数function [c,f,s]=pdefun(x,t,u,du) c=[1;1];f=[0.024*du(1);0.17*du(2)]; temp=u(1)-u(2);s=[-1;1].*(exp(5.73*temp)-exp(-11.46*temp)) end(2)边界条件改写为:下边界2010.*00f u ⎡⎤⎡⎤⎡⎤+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦上边界1110.*000u f -⎡⎤⎡⎤⎡⎤+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦%边界条件函数function [pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t) pa=[0;ua(2)]; qa=[1;0]; pb=[ub(1)-1;0]; qb=[0;1]; end(3)初值条件改写为:1210u u ⎡⎤⎡⎤=⎢⎥⎢⎥⎣⎦⎣⎦%初值条件函数 function u0=pdeic(x) u0=[1;0]; end(4)编写主调函数 clc x=0:0.05:1; t=0:0.05:2; m=0;sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t); subplot(2,1,1) surf(x,t,sol(:,:,1)) subplot(2,1,2) surf(x,t,sol(:,:,2))练习与思考: This example illustrates the straightforward formulation, computation, and plotting of the solution of a single PDE.2()u u t x xπ∂∂∂=∂∂∂ This equation holds on an interval 01x ≤≤ for times 0t ≥. The PDE satisfies the initial condition (,0)sin u x x π= and boundary conditions(0,)0;(1,)0t uu t e t xπ-∂=+=∂ 2.PDEtool 求解偏微分方程(1)PDEtool (GUI )求解偏微分方程的一般步骤在Matlab 命令窗口输入pdetool ,回车,PDE 工具箱的图形用户界面(GUI)系统就启动了.从定义一个偏微分方程问题到完成解偏微分方程的定解,整个过程大致可以分为六个阶段Step 1 “Draw 模式”绘制平面有界区域Ω,通过公式把Matlab 系统提供的实体模型:矩形、圆、椭圆和多边形,组合起来,生成需要的平面区域.Step 2 “Boundary 模式”定义边界,声明不同边界段的边界条件.Step 3 “PDE 模式”定义偏微分方程,确定方程类型和方程系数c,a,f,d ,根据具体情况,还可以在不同子区域声明不同系数.Step 4 “Mesh 模式”网格化区域Ω,可以控制自动生成网格的参数,对生成的网格进行多次细化,使网格分割更细更合理.Step 5 “Solve 模式”解偏微分方程,对于椭圆型方程可以激活并控制非线性自适应解题器来处理非线性方程;对于抛物线型方程和双曲型方程,设置初始边界条件后可以求出给定时刻t 的解;对于特征值问题,可以求出给定区间上的特征值.求解完成后,可以返回到Step 4,对网格进一步细化,进行再次求解.Step 6 “View 模式”计算结果的可视化,可以通过设置系统提供的对话框,显示所求的解的表面图、网格图、等高线图和箭头梯形图.对于抛物线型和双曲线型问题的解还可以进行动画演示.(2)实例说明用法求解一个正方形区域上的特征值问题:12|0u u u u λ∂Ω⎧-∆-=⎪⎨⎪=⎩ 正方形区域为:11,1 1.x x -≤≤-≤≤(1)使用PDE 工具箱打开GUI 求解方程(2)进入Draw 模式,绘制一个矩形,然后双击矩形,在弹出的对话框中设置Left=-1,Bottom=-1,Width=2,Height=2,确认并关闭对话框(3)进入Boundary 模式,边界条件采用Dirichlet 条件的默认值(4)进入PDE 模式,单击工具栏PDE 按钮,在弹出的对话框中方程类型选择Eigenmodes,参数设置c=1,a=-1/2,d=1,确认后关闭对话框(5)单击工具栏的 按钮,对正方形区域进行初始网格剖分,然后再对网格进一步细化剖分一次(6)点开solve菜单,单击Parameters选项,在弹出的对话框中设置特征值区域为[-20,20](7)单击Plot菜单的Parameters项,在弹出的对话框中选中Color、Height(3-D plot)和show mesh项,然后单击Done确认(8)单击工具栏的“=”按钮,开始求解。
MATLAB 微分方程的图示方法
一阶微分方程的计算和图示{范例}求一阶微分方程的解d 2d 1y y x x =+ (1) 画出一般情况下的解曲线。
当初始条件x = 0时,y = 2,画出特解的曲线。
[解析]分离变量得d 2d 1y x y x =+ 积分得ln y = 2ln(x + 1) + ln C即y = C (x + 1)2 (2)其中,C 是初始条件决定的积分常量。
利用初始条件可得C = 2,因此y = 2(x + 1)2 (3)[算法](1)设置横坐标向量,设置曲线的起点,计算常数向量,化为常数和横坐标矩阵,计算纵坐标矩阵,用plot 指令画曲线族。
(2)设置横坐标向量和纵坐标向量,化为矩阵,计算常数矩阵,根据起点坐标,用contour 指令画曲线族。
(3)设置横坐标向量和纵坐标向量,计算微分方程斜率的两个分量,设置起点,用streamline 指令画曲线族。
用quiver 指令画曲线的方向。
[程序]%一阶微分方程的图示%用plot 指令clear %清除变量xm=3; %最大横坐标x=-xm:0.01:xm; %横坐标向量ym=2; %最大纵坐标x0=-xm:0.5:xm; %起点横坐标向量c=ym./(x0+1).^2; %常数向量[C,X]=meshgrid(c,x); %常数和横坐标矩阵Y=C.*(X+1).^2; %纵坐标矩阵figure %创建图形窗口plot(x,Y,x,-Y) %画曲线族grid on %加网格axis([-xm,xm,-ym,ym]) %曲线范围y0=-ym:0.5:ym; %起点纵坐标向量c=y0/(xm+1)^2; %常数向量[C,X]=meshgrid(c,x); %常数和横坐标矩阵Y=C.*(X+1).^2; %纵坐标矩阵hold on%保持图像plot(x,Y) %画曲线族y=2*(x+1).^2; %单一曲线的纵坐标plot(x,y,'.') %画曲线fs=16; %字体大小title('微分方程的解曲线','FontSize',fs)%显示标题xlabel('\itx','FontSize',fs) %x标签ylabel('\ity','FontSize',fs) %y标签%用coutour指令y=-ym:0.01:ym; %纵坐标向量[X,Y]=meshgrid(x,y); %坐标矩阵C=Y./(X+1).^2; %常数矩阵contour(X,Y,C,c,'k','LineWidth',2) %画等值线%用流线指令dY=2*Y; %流线斜率的y分量dX=X+1; %流线斜率的x分量y0=ym*ones(size(x0)); %上边起点纵坐标figure %创建图形窗口%streamline(X,Y,dX,dY,x0,y0) %画流线streamline(X,Y,-dX,-dY,x0,y0) %画上边开始的反方向流线streamline(X,Y,-dX,-dY,x0,-y0) %画下边开始的反方向流线dy0=2*y0; %流线起点斜率的y分量dx0=x0+1; %流线起点斜率的x分量hold on%保持图像quiver(x0,y0,dx0,dy0) %画上边的箭头quiver(x0,-y0,dx0,-dy0) %画下边的箭头y0=-ym:0.5:ym; %起点纵坐标向量x0=xm*ones(size(y0)); %右边起点纵坐标streamline(X,Y,-dX,-dY,x0,y0) %画右边开始的反方向流线quiver(x0,y0,x0+1,2*y0) %画右边的箭头streamline(X,Y,-dX,-dY,-x0,y0) %画左边开始的反方向流线quiver(-x0,y0,-x0+1,2*y0) %画左边的箭头axis tight%曲线贴框grid on%加网格title('微分方程的解曲线','FontSize',fs)%显示标题xlabel('\itx','FontSize',fs) %x标签ylabel('\ity','FontSize',fs) %y标签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB简介
MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
一、基本功能
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
二、特点
1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
2) 具有完备的图形处理功能,实现计算结果和编程的可视化;
3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
三、优势
1.友好的工作平台编程环境
MATLAB由一系列工具组成。
这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。
包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。
随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。
2.强大的科学计算机数据处理能力
MATLAB是一个包含大量计算算法的集合。
其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能,可以用它来代替底层编程语言,如C和C++ 。
在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。
3.出色的图形处理功能
MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。
MATLAB同样表现了出色的处理能力。
同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。
另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。
4.应用广泛的模块集合工具箱
MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。
一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。
5.实用的程序接口和发布平台
新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MA TLAB运行的C和C++代码。
允许用户编写可以和MATLAB进行交互的C或C++语言程序。
另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。
6.应用软件开发(包括用户界面)
在开发环境中,使用户更方便地控制多个文件和图形窗口;在编程方面支持了函数嵌套,有条件中断等;在图形化方面,有了更强大的图形标注和处理功能,包括对性对起连接注释等;在输入输出方面,可以直接向Excel和HDF5进行连接。
四、matlab求解微分方程
微分方程的概念:未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。
如果未知函数是一元函数,称为常微分方程。
微分方程是数学科学联系实际问题的主要桥梁之一,它是含有未知数及其导数的方程。
常微分方程的求解是现代科学研究和工程技术中经常遇到的问题,然而,从实际问题中建立起来的微分方程往往具有非常复杂的形式,有写解析式难以计算,有的则根本不能用解析式来表达。
在实际上对初值问题,一般是要求得到解在若干个点上满足规定精确度的近似值,或者得到一个满足精确度要求的便于计算的表达式,所以利用数值解法求解实际问题显得非常重要。
MATLAB使用函数dsolve来求解常微分方程,其一般格式为:
dsolve(’eq1,eq2,…’,’cond1,cond2,…’,’v’)
其中eq1,eq2,…代表常微分方程式;cond1,cond2,…为初始条件,如果初始条件没有给出,则给出通解形式。
V为自变量,在默认情况下所有自变量都是对自变量t求导。
在函数dsolve所包含的表达式中,用字母D来表示求微分,其后的数字表示几重微分,后面的变量为因变量。
如以Dy代表一阶微分项y’,D2y代表二阶微分项y’’等。
例1:求解常微分方程
1
dy
dx x y
=
+的MATLAB程序为:
dsolve('Dy=1/(x+y)','x'),
例2:求解常微分方程2'''0yy y -=的MATLAB 程序为:Y2=dsolve('y*D2y-
Dy^2=0’,’x’)
例3:求常微分方程组253t t
dx x y e dt dy x y e dt ⎧++=⎪⎪⎨
⎪--=⎪⎩通解的MATLAB 程序为:
[X,Y]=dsolve('Dx+5*x+y=exp(t),Dy-x-3*y=exp(2*t)','t')
例4:求常微分方程组020210cos ,224,0t t t dx dy x t x dt dt dx dy y e y dt dt =-=⎧+-==⎪⎪⎨
⎪++==⎪⎩通解的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')
五、绘制函数图像
MATLAB 受到控制界广泛接受的一个重要原因是因为它提供了方便的绘图功能。
以下主要介绍2维图形对象的生成函数及图形控制函数的使用方法,还将简单地介绍一些图形的修饰与标注函数及操作和控MATLAB 各种图形对象的方法。
一. plot 函数
plot 函数是最基本的绘图函数,其基本的调用格式为:
plot(y)------绘制向量y 对应于其元素序数的二维曲线图,如果y 为复数向量,则绘制虚部对于实部的二维曲线图.
2.plot(x,y)------绘制由x,y 所确定的曲线.
x,y 是两组向量,且它们的长度相等,则plot(x,y)可以直观地绘出以x 为横坐标,y 为纵坐标的图形.
注:在MATLAB 中,如画图前已有打开的图形窗口,则再画图系统将自动擦掉坐标系中已有的图形对象,但设置了hold on 后,可以保持坐标系中已绘出的图形.
4.双Y 轴绘图:plotyy()函数.
其调用格式为:
plotyy(x1,y1,x2,y2)------绘制由x1,y1和x2,y2确定的两组曲线,其中x1,y1的坐标轴在图形窗口的左侧,x2,y2的坐标轴在图形窗口的右侧.
绘图结果:两条图线自动用不同的颜色区分,两个坐标的颜色与图线的颜色相对应,左边的Y轴坐标对应的是plot形式的曲线,右边的Y坐标对应的是stem形式的曲线.
图形的修饰与标注
MATLAB提供了一些特殊的函数修饰画出的图形,这些函数如下:
1)坐标轴的标题:title函数
其调用格式为:title('字符串')------字符串可以写中文
2)坐标轴的说明:xlabel和ylabel函数
格式:xlabel('字符串')
ylabel('字符串')
3)图形说明文字:text和gtext函数
A.text函数:按指定位置在坐标系中写出说明文字.
格式为:text(x1, y1, '字符串', '选项')
x1,y1为指定点的坐标;'字符串'为要标注的文字;'选项'决定x1,y1的坐标单位。
B.gtext函数:按照鼠标点按位置写出说明文字.
格式为:gtext('字符串')
当调用这个函数时,在图形窗口中出现一个随鼠标移动的大十字交叉线,移动鼠标将十字线的交叉点移动到适当的位置,点击鼠标左键,gtext参数中的字符串就标注在该位置上.
4)给图形加网格:grid函数
在调用时直接写grid即可.。