ode45求解多自由度动力学方程实例
- 格式:pdf
- 大小:161.69 KB
- 文档页数:3
质量-弹簧-阻尼系统实验教学指导书北京理工大学机械与车辆学院2016.3实验一:单自由度系统数学建模及仿真 1 实验目的(1)熟悉单自由度质量-弹簧-阻尼系统并进行数学建模; (2)了解MATLAB 软件编程,学习编写系统的仿真代码; (3)进行单自由度系统的仿真动态响应分析。
2 实验原理单自由度质量-弹簧-阻尼系统,如上图所示。
由一个质量为m 的滑块、一个刚度系数为k 的弹簧和一个阻尼系数为c 的阻尼器组成。
系统输入:作用在滑块上的力f (t )。
系统输出:滑块的位移x (t )。
建立力学平衡方程:m x c x kx f ∙∙∙++=变化为二阶系统标准形式:22f x x x mζωω∙∙∙++=其中:ω是固有频率,ζ是阻尼比。
ω=2c m ζω== 2.1 欠阻尼(ζ<1)情况下,输入f (t )和非零初始状态的响应:()()sin()))]t t x t t d e ζωττζωττ+∞--=∙-=-+-+⎰2.2 欠阻尼(ζ<1)情况下,输入f(t)=f0*cos(ω0*t) 和非零初始状态的的响应:02230022222002222222()cos(arctan())2f[(0)]cos()[()(2)]sin(ttx t tx ekeζωζωζωωωωωζωωωωζωω-∙-=--++-++)输出振幅和输入振幅的比值:A=3 动力学仿真根据数学模型,使用龙格库塔方法ODE45求解,任意输入下响应结果。
仿真代码见附件4 实验4.1 固有频率和阻尼实验(1)将实验台设置为单自由度质量-弹簧-阻尼系统。
(2)关闭电控箱开关。
点击setup菜单,选择Control Algorithm,设置选择Continuous Time Control,Ts=0.0042,然后OK。
(3)点击Command菜单,选择Trajectory,选取step,进入set-up,选取Open Loop Step 设置(0)counts, dwell time=3000ms,(1)rep, 然后OK。
【文章标题】:深度探究:使用Matlab求解动力学微分方程一、探索动力学微分方程在物理学、工程学和生物学等领域中,动力学微分方程广泛应用于描述系统随时间演化的规律。
动力学系统的行为可以通过微分方程来捕捉,而解析求解这些微分方程通常是困难的。
数值方法成为了研究这些系统行为的重要工具。
二、Matlab在动力学微分方程求解中的应用Matlab作为一种强大的数学计算软件,提供了丰富的工具和函数用于求解微分方程。
其拥有的ode45、ode23等求解器能够高效地求解多种微分方程,并且具有较好的稳定性和精度。
三、从简到繁:使用Matlab求解一阶动力学微分方程我们可以从一阶动力学微分方程开始探讨。
考虑如下的一阶常微分方程:\[ \frac{dy}{dt} = f(t, y) \]我们可以使用Matlab的ode45函数来求解此类微分方程。
通过传入方程的右侧函数f(t, y)、初始条件和求解的时间范围,ode45可以给出相应的数值解。
四、由浅入深:使用Matlab求解高阶动力学微分方程我们可以深入探讨高阶动力学微分方程的求解。
考虑如下的二阶常微分方程:\[ \frac{d^2y}{dt^2} = g(t, y, \frac{dy}{dt}) \]同样地,Matlab的ode45函数也可以用于求解高阶微分方程。
我们需要将这个二阶微分方程化为一个一阶方程组的形式,然后传入ode45函数进行求解。
五、总结回顾:深刻理解动力学微分方程的数值求解通过本文的讨论,我们深入了解了如何使用Matlab求解动力学微分方程。
从简单的一阶微分方程到复杂的高阶微分方程,Matlab都提供了强大的求解工具。
通过数值求解,我们可以得到系统随时间演化的行为规律,从而加深我们对动力学系统的理解。
六、个人观点与理解作为文章写手,我个人认为Matlab在求解动力学微分方程方面具有非常大的优势。
其丰富的函数库和高效的求解器为研究人员提供了便利,使他们能够更深入地探究动力学系统的行为。
ode45函数用法ode45函数是MATLAB中的一个常用函数,用于求解常微分方程初值问题。
它实质上是利用了4阶和5阶Runge-Kutta方法的一种变种形式,可以对一阶和高阶常微分方程进行数值求解。
ode45函数的主要语法格式为:[t, y] = ode45(@fun, tspan, y0)其中,@fun是一个函数句柄,用于定义微分方程dy/dt=f(t,y)的右侧函数f(t,y)。
tspan是求解的时间范围,通常为一个二元向量[tstart, tend]。
y0是微分方程的初始条件。
当调用ode45函数时,它会返回两个向量t和y,其中t是时间向量,y是对应时间点的解向量。
可以通过绘图或其他后续处理分析这些解。
ode45函数的使用方法具有一定的灵活性。
首先,可以通过在函数f(t,y)中定义额外的参数来解决一些特定问题。
例如,可以将常数或其他变量作为输入参数传递给f函数。
其次,可以在tspan中指定更复杂的时间范围。
除了指定[tstart, tend]之外,还可以指定等间隔的时间点或自定义时间点。
这样可以对非等间隔的时间步长进行模拟。
另外,ode45函数还可以通过指定其他选项来进行更精确的求解或控制数值计算。
例如,可以通过指定'AbsTol'和'RelTol'选项来调整计算的绝对误差和相对误差。
还可以通过指定'Events'选项来检测事件,并在事件发生时中断求解。
除了以上基本用法外,ode45函数还可以与其他函数和工具箱进行配合使用。
例如,可以使用odeplot函数在求解过程中实时绘制解曲线。
还可以使用odephas2函数对微分方程的相平面进行绘制。
总之,ode45函数是MATLAB中一个强大的求解常微分方程的工具,它不仅具有灵活的使用方法,而且可以与其他函数和工具箱进行配合使用。
熟练掌握ode45函数的用法对于数学建模和科学计算等应用非常有价值。
题目:探究matlab利用ode45求解二元二阶微分方程的方法与应用在数学和工程领域,微分方程是一类重要的数学工具,它可以描述自然界中众多的现象和规律。
而求解微分方程的问题一直是科学家和工程师们所关注的重要问题之一。
在计算机辅助数学建模领域,matlab作为一种强大的数值计算工具,可以通过内置的函数ode45来求解常微分方程初值问题。
本文将探讨matlab利用ode45求解二元二阶微分方程的方法与应用。
一、二元二阶微分方程的基本概念二元二阶微分方程是指含有两个自变量、二阶导数和一阶导数的微分方程。
一般形式如下:\[ F(x, y, \frac{dy}{dx}, \frac{d^2y}{dx^2}) = 0 \]其中x为自变量,y为因变量,\(\frac{dy}{dx}\)为y关于x的一阶导数,\(\frac{d^2y}{dx^2}\)为y关于x的二阶导数。
二、matlab中ode45函数的基本原理在matlab中,ode45是求解常微分方程初值问题的函数,它使用了一种自适应步长的Runge-Kutta方法来求解微分方程。
ode45可以求解一阶或高阶的常微分方程组,是matlab中最常用的求解微分方程的函数之一。
对于二元二阶微分方程,可以通过一些简单的变换和处理,转化为一组一阶微分方程的形式,然后利用ode45进行求解。
三、matlab利用ode45求解二元二阶微分方程的具体步骤1. 将二元二阶微分方程转化为一组一阶微分方程。
对于形如\(\frac{d^2y}{dx^2} = f(x, y, \frac{dy}{dx})\)的二阶微分方程,可以引入新的变量z = \(\frac{dy}{dx}\),转化为一组一阶微分方程:\[\frac{dy}{dx} = z\]\[\frac{dz}{dx} = f(x, y, z)\]2. 编写matlab脚本文件。
在matlab中,编写脚本文件来定义微分方程的函数形式,并调用ode45函数来求解微分方程。
ode45的原理引言在数值计算中,求解常微分方程是一个重要的问题。
常微分方程是描述自然界中很多现象的数学模型,例如物理学中的运动学、动力学问题,生物学中的生物传播模型等等。
由于常微分方程往往难以求得解析解,因此需要借助数值方法进行求解。
ode45是一种常用的求解常微分方程的数值方法,本文将对ode45的原理进行全面、详细、完整且深入地探讨。
什么是ode45ode45是MATLAB中的一个函数,用于求解常微分方程的初值问题。
它采用了一种称为Runge-Kutta-Fehlberg(RKF)的方法。
RKF方法是一种经典的自适应步长的数值积分方法,它能够在保证一定的精度的前提下自动调整步长,从而提高计算效率。
RKF方法的基本原理RKF方法是一种多步骤的迭代方法,其基本思想是将步长h分为两个部分:主步长h和辅助步长h/2。
在每个主步长上,RKF方法使用两个不同的步长来计算解的近似值,然后通过比较两个近似值的差异来估计误差,并根据误差的大小来调整步长。
具体的步骤如下:1.使用主步长h计算解的近似值y1和y2。
其中y1是通过一个四阶的Runge-Kutta方法计算得到的近似值,y2是通过一个五阶的Runge-Kutta方法计算得到的近似值。
2.计算y1和y2之间的差异delta。
如果差异太大,说明步长h可能过大,需要减小步长;如果差异较小,说明步长h可能适合,可以增大步长。
3.根据差异delta来调整步长h。
如果delta小于某个阈值,可以增大步长;如果delta大于某个阈值,需要减小步长。
步长的调整可以使用一些启发式的方法,例如根据delta的大小来乘以一个系数来调整步长。
4.重复步骤1~3,直到达到指定的终止条件,例如达到指定的时间点或者误差限度。
RKF方法的优点是可以在保证一定精度的前提下自动调整步长,从而提高计算效率。
然而,RKF方法也有一些缺点,例如计算量较大,不适合求解高阶的常微分方程等。
ode45函数的使用方法在MATLAB中,可以使用ode45函数来求解常微分方程的初值问题。
实验二MATLAB数值计算常微分方程的求解引言:微分方程是描述物理问题和工程问题的重要工具,也是数学和工程学科中的重要课题。
解析方法可以求得一些简单微分方程的解析解,但对于复杂问题,常常无法得到解析解。
此时,数值求解方法成为一种有效的工具。
MATLAB是一个功能强大的数值计算软件,对于求解常微分方程组也提供了多种数值方法。
本实验将介绍MATLAB中求解常微分方程(组)的方法,并通过实例来演示这些方法的应用。
一、MATLAB的常微分方程(组)求解函数MATLAB提供了多种函数用于求解常微分方程(组),其中最常用的函数是ode45、ode23和ode15s。
这些函数采用不同的数值方法,精度和效率也不同。
下面分别对这些函数进行简单介绍:1. ode45函数:ode45函数采用了一种自适应的步长控制算法,可以在一个时间段内自动调整步长。
这个函数的语法是:[t,y] = ode45(odefun,tspan,y0,options)其中,odefun是一个函数句柄,表示待解的常微分方程组,tspan是求解区间,y0是初始条件,options是一个结构体,包含其他的参数和选项。
2. ode23函数:ode23函数也采用了自适应的步长控制算法,但相对于ode45,它是一个简化版本,只允许使用比较简单的问题。
这个函数的语法与ode45相似:[t,y] = ode23(odefun,tspan,y0,options)3. ode15s函数:ode15s函数采用了一种隐式数值方法,适用于比较刚性(stiff)的常微分方程。
这个函数的语法与前两个函数也相似:[t,y] = ode15s(odefun,tspan,y0,options)以上是MATLAB提供的三种解常微分方程(组)的函数,根据问题的特点和求解的需求选择相应的函数。
二、实例演示在本实验中,我们将通过一个实例来演示如何使用MATLAB解常微分方程组。
假设有一个简单的线性常微分方程组:dy1/dt = -2y1 + y2dy2/dt = y1 - 2y2给定初始条件为y1(0)=1,y2(0)=0,求在t=[0,5]时,y1和y2的解。
ode45解微分方程组要解决微分方程组,我们可以使用MATLAB中的ODE45(常微分方程数值求解器)函数。
ode45可以求解形如dy/dt = f(t, y)的一阶常微分方程,其中t是自变量,y是因变量,f(t, y)是描述y在t上的变化率的函数。
对于多个变量的微分方程组,可以将其处理为向量形式并使用ode45以下是一个例子来说明如何使用ode45函数来解微分方程组。
假设我们要求解以下微分方程组:dy1/dt = y2dy2/dt = -2*y1 + 3*y2其中,y1和y2都是关于t的函数。
首先,我们需要将这个微分方程组转化为向量形式。
定义一个向量Y,其中Y(1)=y1,Y(2)=y2,我们可以将系统改写为:dY/dt = [Y(2); -2*Y(1) + 3*Y(2)]然后,在MATLAB中,我们可以定义一个函数来表示这个系统。
我们将其命名为"system",输入参数t和Y,输出参数是dY。
function dY = system(t, Y)dY(1,1)=Y(2);dY(2,1)=-2*Y(1)+3*Y(2);end接下来,我们可以使用ode45函数来求解该微分方程组。
首先,我们需要指定初始条件。
令t0为初始时间,Y0为初始向量,我们可以从初始条件中获得这些值。
在这个例子中,假设我们要从t=0开始,并且y1(0)=1,y2(0)=0。
因此,t0=0,Y0=[1;0]。
然后,我们可以调用ode45,将解密度'R'设置为1e-3(即0.001),并指定时间间隔[0 10]:tspan = [0 10];Y0=[1;0];R=1e-3;最后,我们得到了在时间间隔[010]上的数值解,通过't'和'Y'来表示。
t是时间向量,Y是与时间相对应的解向量。
我们可以绘制结果以获得更好的理解。
假设我们想绘制y1和y2的图像。
y1=Y(:,1);y2=Y(:,2);figure;plot(t, y1, 'r', t, y2, 'b')xlabel('t')ylabel('y')legend('y1', 'y2')title('Solution of the differential equations')以上就是求解微分方程组的一个例子。
Ode45函数调用形式如下:
[T,Y]=ode45(odefun,tspan,y0)
相关参数介绍如下:参数名称
参数说明odefun
用于存放待求解的方程的m 文件名,方程必须用y’=f(t,y)的形式存放tspan
指定自变量范围的向量,通常用[t0,tf]指定y0函数的边界条件,即y0=y(t0),对于方程组,y0也可以是向量
例:若一三自由度多体动力学系统方程如下:
1121221231233232323 1.510050 2.0sin(3.754t)
2 1.5
3 1.55010050 2.0cos(2.2t)
2 1.5350100 1.0sin(2.8t)x x x x x x x x x x x x x x x x x +-+-=-+--+-=-++-+=
初始条件:
1020301020301
1x x x x x x ======
由于方程必须用y’=f(t,y)的形式存放,因此需要对方程组进行降阶处理。
令11
3253214263y x y x y x y x y x y x ======
则方程组可化为:
12
2241334
424613556
646350.5*(3 1.510050 2.0sin(3.754t))
0.5*(1.53 1.55010050 2.0cos(2.2t))
0.5*(1.5350100 1.0sin(2.8t))y y y y y y y y y y y y y y y y y y y y y y y ==-+-++==-++-+-==--+-+
因此建立M函数文件来定义此方程组如下:
function dy=func(t,y)
dy=zeros(6,1);
dy(1)=y(2);
dy(2)=0.5*(-3*y(2)+1.5*y(4)-100*y(1)+50*y(3)+2.0*sin(3.754*t));
dy(3)=y(4);
dy(4)=0.5*(1.5*y(2)-3*y(4)+1.5*y(6)+50*y(1)-100*y(3)+50*y(5)-2.0*cos(2.2*t)); dy(5)=y(6);
dy(6)=0.5*(-1.5*y(4)-3*y(6)+50*y(3)-100*y(5)+1.0*sin(2.8*t));
end
在matlab命令窗口里输入一下命令:
y0=[111111];
tspan=[030];
[t,y]=ode45(@func,tspan,y0);
figure(1)
plot(t,y(:,1),t,y(:,3),t,y(:,5));
legend('x1','x2','x3');
xlabel('时间(s)','FontSize',10);
ylabel('振动位移曲线','FontSize',10);
figure(2)
plot(t,y(:,2),t,y(:,4),t,y(:,6));
legend('v1','v2','v3');
xlabel('时间(s)','FontSize',10);
ylabel(‘振动速度曲线’,’FontSize’,10);
运行结果:
0510********-1-0.5
0.51
1.5
时间(s )振动位移曲线
0510********-6-5
-4
-3
-2-1012
3
时间(s )振动速度曲
线。