matlab动力学分析程序详解
中心差分 动力学方程 matlab

中心差分动力学方程matlab随着科学技术的不断发展,数值计算方法在各个领域得到了广泛应用。
中心差分法作为一种常用的数值计算方法,在科学研究和工程计算中具有重要意义。
本文将介绍中心差分法、动力学方程以及MATLAB在二者中的应用,并通过实例演示来展示具体操作。
一、中心差分法简介中心差分法是一种在离散点上计算连续函数的导数、微分方程数值解的数值方法。
它的基本思想是将函数在一个区间内离散化为若干个点,然后用差分的形式表示函数的导数,再通过求和得到整个区间上的积分。
中心差分法具有计算简便、精度较高、稳定性较好等特点。
二、动力学方程简介动力学方程是描述物体运动规律的数学方程,它可以用于分析各种物理、化学和生物过程。
动力学方程一般包括牛顿方程、拉格朗日方程、哈密顿方程等。
求解动力学方程可以得到物体的运动轨迹、速度、加速度等物理量,对于工程设计和控制系统分析具有重要意义。
三、MATLAB在中心差分法和动力学方程中的应用MATLAB是一款功能强大的数学软件,可以方便地实现中心差分法和动力学方程的数值求解。
以下将以一个简单的例子说明MATLAB在中心差分法和动力学方程中的应用。
假设我们要计算以下动力学方程的数值解:dx/dt = -ax + b初始条件:x(0) = 1,t(0) = 01.首先,编写MATLAB脚本,设置时间步长Δt和仿真时间t_end:```MATLABt_end = 10; % 仿真时间dt = 0.1; % 时间步长```2.接着,编写中心差分法求解动力学方程的代码:```MATLABx = zeros(1, t_end/dt + 1); % 初始化x arrayt = zeros(1, t_end/dt + 1); % 初始化t arrayx(1) = 1; % 设置初始条件for i = 2:t_end/dt + 1x(i) = x(i-1) + dt * (-a * x(i-1) + b);t(i) = i * dt;end```3.绘制数值解曲线:```MATLABfigure;plot(t, x);xlabel("t");ylabel("x");title("动力学方程的数值解");```四、结论与建议本文通过一个简单实例展示了MATLAB在中心差分法和动力学方程中的应用。
matlab 系统动力学模型

matlab 系统动力学模型Matlab 系统动力学模型引言:系统动力学是研究动态系统行为的数学方法,通过描述和分析系统在时间上的演化过程,揭示系统内部的关系和相互作用规律。
Matlab是一种强大的数值计算软件,广泛应用于系统动力学模型的建立和仿真。
本文将介绍Matlab在系统动力学建模中的应用,并结合实例进行说明。
一、系统动力学基本概念系统动力学是一种描述系统行为的数学工具,它将系统划分为不同的部分,并研究它们之间的相互作用。
系统动力学模型通常由一组关于系统部分之间关系的微分方程或差分方程组成。
在建立模型时,需要考虑系统的输入、输出以及系统内部的状态变量,并通过数学表达式描述它们之间的关系。
二、Matlab在系统动力学模型中的应用Matlab提供了丰富的数学函数和工具箱,使得系统动力学模型的建立和仿真变得更加简单和高效。
下面将以一个简单的例子来说明Matlab在系统动力学建模中的应用。
假设有一个简单的机械系统,由弹簧和质量构成。
假设弹簧的刚度为k,质量为m,阻尼系数为b。
我们想要建立一个系统动力学模型,来描述质点的运动过程。
我们需要确定系统的状态变量和输入输出。
在这个例子中,质点的位移x是系统的状态变量,外力F是系统的输入,质点的加速度a 是系统的输出。
根据牛顿第二定律,我们可以建立如下的微分方程:m * a = F - b * v - k * x其中,v是质点的速度。
为了建立系统的动力学模型,我们需要对该微分方程进行求解。
在Matlab中,可以使用ode45函数来解决常微分方程。
具体的Matlab代码如下:```matlabfunction dxdt = system_dynamics(t, x)m = 1;k = 10;b = 0.5;F = 5;v = x(2);a = (F -b * v - k * x(1)) / m;dxdt = [v; a];end[t, x] = ode45(@system_dynamics, [0, 10], [0, 0]);plot(t, x(:, 1));xlabel('Time');ylabel('Displacement');title('System Dynamics');```在上述代码中,system_dynamics函数定义了系统的微分方程,其中包括质点的加速度和速度的计算。
基于MATLAB的六杆机构动力学分析与仿真

六杆机构的动力学分析仿真一系统模型建立为了对机构进行仿真分析,首先必须建立机构数学模型,即位置方程,然后利用MATLAB仿真分析工具箱Simulink对其进行仿真分析。
图3.24所示是由原动件(曲柄1)和RRR—RRP六杆机构。
各构件的尺寸为r1=400mm,r2=1200mm,r3=800mm,r4=1500mm,r5=1200mm;各构件的质心为rc1=200mm,rc2=600mm,rc3=400mm,rc5=600mm;质量为m1=1.2kg,m2=3kg,m3=2.2kg;m5=3.6kg,m6=6kg; 转动惯量为J1=0.016kg·m2,J2=0.25kg·m2;J3=0.09kg·m2,J5=0.45kg·m2;构件6的工作阻力F6=1000N,其他构件所受外力和外力矩均为零,构件1以等角速度10 rad/s逆时针方向回转,试求不计摩擦时,转动副A的约束反力、驱动力矩、移动副F的约束反力。
图1-1此机构模型可以分为曲柄的动力学、RRR II级杆组的动力学和RRP II级杆组的动力学,再分别对这三个模型进行相应参数的求解。
图1-2 AB 构件受力模型如上图1-2对于曲柄AB 由理论力学可以列出表达式:111XA Re R ••=+-s m F R X XB 111y A Im R ••=+-s m F R y yB1111111111111cos )(sin )(cos sin ••=---+-++θθθθθJ r r R r r R r R r R M M c yB c XB c yA c XA F由运动学知识可以推得:)cos()2/cos(Re Re 12111111πθθπθθ++++=•••••••c c r r A s )sin()2/sin(Im Im 12111111πθθπθθ++++=•••••••c c r r A s将上述各式合并成矩阵形式有,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡++-+++++-++++=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡••••••••••g m R F r m r m A m R F r m r m A m M R R yB y c c XBX c c yA XA 111211111111112111111111)sin()2/sin(Im )cos()2/cos(Re πθθπθθπθθπθθ(1-21)如图1-3,对构件BC 的约束反力推导如下,图1-3 BC 构件受力模型222Re ••=++s m R F R XC X XB 2222Im ••=-++s m g m R F R yC y yB2222222222222cos )(sin )(cos sin ••=-----+θθθθθJ r r R r r R r R r R M c yC c XC c yB c XB如图1-4,对构件BC 的约束反力推导如下,图 1-4 CD 构件受力模型333Re ••=-+s m R F R XC X XD 3333Im ••=-++s m g m R F R yC y yD3333333333333cos )(sin )(cos sin ••=-----+θθθθθJ r r R r r R r R r R M c yC c XC c yD c XD由运动学可以推导得,)sin()2/sin(Im Im 22222222πθθπθθ++++=•••••••c c r r B s )cos()2/cos(Re Re 22222222πθθπθθ++++=•••••••c c r r B s )cos()2/cos(Re Re 32333333πθθπθθ++++=•••••••c c r r D s )sin()2/sin(Im Im 32333333πθθπθθ++++=•••••••c c r r D s将上述BC 构件,CD 构件各式合并成矩阵形式有,⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----------33333333332222222222cos sin cos )(sin )(0010100001010000cos )(sin )(cos sin 001010000101θθθθθθθθc c c c c c c c r r r r r r r r r r r r ⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡yD XD yC XC yB XB R R R R R R =⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-+-++++-++++-+-++++-++++••••••••••••••••••••••••3333332333333333323333333322222222222222222222222222)sin()2/sin(Im )cos()2/cos(Re )sin()2/sin(Im )cos()2/cos(Re M J g m F r m r m D m F r m r m D m M J g m F r m r m B m F r m r m B m y c c X c c y c c X c c θπθθπθθπθθπθθθπθθπθθπθθπθθ (1-22)如图1-5 对构件5进行约束反力的推导如下,图1-5 CE 杆件受力模型••=++s m R F R xE x xC Re 55 ••=-++s m g m R F R yE y yC Im 5555555555555555cos )(sin )(cos sin ••=-+-+--θθθθθJ r r R r r R r R r R M c yE c xE c yC c xC如图1-6 对滑块进行受力分析如下,滑块受力模型••=--E m R R F F xE x Re sin 666θ ••=-+-E m g m R R F F yE y Im cos 6666θ由运动学可推,)cos()2/cos(C Re Re 5255555πθθπθθ•••••••+++=c c r r s )sin()2/sin(C Re Im 5255555πθθπθθ•••••••+++=c c r r s66cos Re θ••••=s E 66sin Im θ••••=s E⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡+---+-++++-++++=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡-------••••••••••••••••g m F s m F s m M J g m F r m r m m F r m r m m R R R R R r r r r r r y x y c c x c c F yE xE yC xC c c c c 66666666655555525555555555255555555665555555555sin cos )sin()2/sin(C Re )cos()2/cos(C Re cos 1000sin 01000cos )(sin )(cos sin 010*******θθθπθθπθθπθθπθθθθθθθθ(1-23)二编程与仿真利用MATLAB进行仿真分析,主要包括两个步骤:首先是编制计算所需要的函数模块,然后利用其仿真工具箱Simulink建立仿真系统框图,设定初始参数进行仿真分析。
sindy的matlab程序-概述说明以及解释

sindy的matlab程序-概述说明以及解释1.引言1.1 概述Sindy是一种基于数据驱动的系统辨识方法,通过对系统的动态行为进行分析和建模,可以帮助我们更好地理解系统的运行机制和规律。
Matlab作为一种强大的科学计算工具,能够提供丰富的功能和工具,帮助我们进行数据处理、模型建立和结果分析。
本文将详细介绍Sindy在Matlab环境下的应用,探讨其在不同领域中的作用和价值。
通过对Sindy程序的优势和局限性进行分析,可以更全面地了解其在系统辨识方面的特点和适用范围。
最后,我们将总结Sindy 的Matlab程序的重要性,展望其未来在系统辨识领域的发展,并希望能为相关研究提供一定的参考和启发。
1.2 文章结构本篇文章主要分为三个部分:引言、正文和结论。
在引言部分,将会对文章的主题进行一定的概述,介绍Sindy的Matlab程序的背景和意义,以及对文章的结构进行简要的介绍。
在正文部分,将详细介绍Sindy的Matlab程序的相关内容,包括程序的介绍、应用领域、优势和局限性等方面。
最后,在结论部分,将总结Sindy的Matlab程序的重要性,展望其在未来的发展,并给出一些结束语,为全文画上一个完美的句号。
1.3 目的本文的目的是介绍Sindy的Matlab程序,探讨其在科学研究和工程领域中的应用情况。
通过对Sindy程序的介绍和分析,读者可以更深入地了解Sindy程序的原理和特点,以及其在系统辨识、动力系统建模等方面的重要性和价值。
同时,本文也将讨论Sindy程序的优势和局限性,对于读者在选择合适的程序工具时提供参考。
通过本文的阐述,旨在激发读者对于Sindy程序的兴趣,促进该程序在未来的发展和应用。
2.正文2.1 Sindy的Matlab程序介绍Sindy是一个用于系统辨识和模型推断的Matlab程序。
该程序的全称为Sparse Identification of Nonlinear Dynamics,意为稀疏非线性动力学识别。
matlab求解动力学微分方程

【文章标题】:深度探究:使用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在求解动力学微分方程方面具有非常大的优势。
其丰富的函数库和高效的求解器为研究人员提供了便利,使他们能够更深入地探究动力学系统的行为。
matlab newmark法

matlab newmark法Matlab Newmark法是一种非线性动力学分析方法,主要用于求解动力学系统的时间响应。
该方法由Newmark在20世纪50年代提出,在工程结构领域得到了广泛应用。
本文将分步骤回答关于Matlab Newmark法的问题,包括算法原理、计算步骤、优缺点以及实际案例的应用。
一、算法原理1.1 基本原理Matlab Newmark法是一种基于离散时间步长的计算方法。
其基本原理是通过将系统的运动方程转化为等效的一阶微分方程组,然后使用步进法进行数值求解。
该方法采用了二阶精度的数值积分公式,具有较高的计算精度和稳定性。
1.2 新马克法公式Matlab Newmark法的核心公式为:δu(t+Δt) = u(t) + Δt * v(t) + Δt^2 * (0.5 - β) * a(t)δv(t+Δt) = v(t) + Δt * (1 - γ) * a(t)δa(t+Δt) = (1 - γ) * a(t) + γ* a(t+Δt)其中,δ表示增量,u(t)、v(t)和a(t)分别表示位移、速度和加速度在时间t的值,β和γ为Newmark法的两个参数。
二、计算步骤2.1 确定系统参数首先,需要确定系统的质量矩阵、刚度矩阵和阻尼矩阵,以及外部激励载荷等参数。
2.2 确定时间步长根据求解精度和计算效率的要求,选择合适的时间步长Δt。
2.3 初始化位移、速度和加速度给定初始位移、速度和加速度的值。
2.4 进行时间循环使用Newmark法的公式,根据当前时刻的位移、速度和加速度的值,计算下一时刻的位移、速度和加速度。
2.5 判断收敛条件在每个时间步长内,判断计算结果是否满足收敛要求。
如果满足要求,则继续计算下一个时间步长;如果不满足要求,则重新选择适当的步长,并重新进行计算。
2.6 输出结果将每个时间步长内计算得到的位移、速度和加速度的值保存起来,以获取系统的时间响应曲线。
三、优缺点3.1 优点Matlab Newmark法具有以下优点:- 可以处理复杂的非线性动力学系统。
第6章Matlab应用之动力学与振动

一.运动微分方程 当
0, F ( ) 0 时,得到线性振动系统的自由振动方程。
d x dx 2 x0 2 d d
2
上一页
目录
返回
下一页
13
6.2 单自由度系统
二.MATLAB求解 编写方程对应的函数文件FreeOscillation.m function xdot=FreeOscillation(t,x,zeta,Alpha) xdot=[x(2);-2.0*zeta*x(2)-x(1)-Alpha*x(1)^3]; end
上一页
目录
返回
下一页
21
6.2 单自由度系统
续上: figure(1) xlabel('\tau'); ylabel('x(\tau)'); axis([0.0,30.0,-3.0,3.0]); legend(d(1,:),d(2,:),d(3,:)); figure(2) xlabel('x(\tau)'); ylabel('dx/d\tau'); axis([-2.0,3.0,-2.0,3.0]); legend(d(1,:),d(2,:),d(3,:));
dx1 x2 d dx2 x1 d signum( x2 ) d
d x dx x d signum( ) 2 d d
上一页 目录 返回 下一页
25
6.2 单自由度系统
2、Matlab求解
编写常微分方程对应的函数文件FrictionOscillation.m
function xdot=FrictionOscillation(t,x,d) % 非线性阻尼系统ode文件 if abs(x(1))<=d && x(2)==0.0; xdot=[0;0]; else xdot=[x(2);-d*sign(x(2))-x(1)]; end
matlab使用拉格朗日法计算动力学方程参数

matlab使用拉格朗日法计算动力学方程参数标题:用MATLAB使用拉格朗日法计算动力学方程参数导言:在工程和科学领域中,我们经常需要对系统进行动力学建模和分析。
动力学方程是描述系统运动的数学表达式,它们可以帮助我们理解和预测系统的行为。
而计算动力学方程的参数对于系统的设计、优化和控制具有重要意义。
本文将介绍如何使用MATLAB编程语言和拉格朗日法来计算动力学方程参数,通过数值求解和优化方法,为工程师和科学家提供一个有力的工具。
1. 动力学方程与参数计算在动力学中,系统可以通过一组微分方程来描述。
这些方程表示系统的行为和演变,通常包括质量、速度、加速度和其他相关因素。
对于复杂系统,计算动力学参数可能是一项繁琐且复杂的任务。
幸运的是,拉格朗日法可以简化这一过程,通过定义能量或运动方程来推导系统动力学方程。
2. 拉格朗日法介绍拉格朗日法是一种基于能量和运动方程的变分法。
通过将系统的动能和势能组合成拉格朗日函数,并使用欧拉-拉格朗日方程,可以得到系统的运动方程。
拉格朗日法不仅适用于具有广义坐标的连续系统,还适用于离散系统和有束缚条件的系统。
3. MATLAB编程实现在MATLAB中,我们可以使用符号计算工具包来处理复杂的数学表达式和符号计算。
我们需要定义系统的广义坐标、广义速度和拉格朗日函数。
通过欧拉-拉格朗日方程生成系统的运动方程。
我们可以使用数值求解和优化方法来计算动力学参数。
4. 示例:双摆系统为了更好地理解如何使用MATLAB实现拉格朗日法,我们将以一个双摆系统为例。
双摆系统由两个连杆组成,每个连杆上挂有一个质点。
我们需要计算系统的动力学参数,包括质点的位置、速度和加速度。
通过拉格朗日法,我们可以推导出系统的运动方程,并使用MATLAB 进行求解和优化。
5. 讨论与总结本文介绍了使用MATLAB编程语言和拉格朗日法计算动力学方程参数的方法。
通过拉格朗日法,我们可以简化动力学参数的计算,并为系统的设计和优化提供可行性的解决方案。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
1.微分方程的定义
对于duffing 方程03
2
=++x x x ω
,先将方程写作⎩⎨⎧
--==3
1122
21x x x x x ω function dy=duffing(t,x) omega=1;%定义参数 f1=x(2);
f2=-omega^2*x(1)-x(1)^3; dy=[f1;f2];
2.微分方程的求解
function solve (tstop) tstop=500;%定义时间长度 y0=[0.01;0];%定义初始条件
[t,y]=ode45('duffing',tstop,y0,[]);
function solve (tstop) step=0.01;%定义步长
y0=rand(1,2);%随机初始条件
tspan=[0:step:500];%定义时间范围 [t,y]=ode45('duffing',tspan,y0);
3.时间历程的绘制
时间历程横轴为t ,纵轴为y ,绘制时只取稳态部分。
plot(t,y(:,1));%绘制y 的时间历程 xlabel('t')%横轴为t ylabel('y')%纵轴为y grid;%显示网格线
2
axis([460 500 -Inf Inf])%图形显示范围设置
4.相图的绘制
相图的横轴为y ,纵轴为dy/dt ,绘制时也只取稳态部分。
红色部分表示只取最后1000个点。
plot(y(end-1000:end ,1),y(end-1000:end ,2));%绘制y 的时间历程
xlabel('y')%横轴为y
ylabel('dy/dt')%纵轴为dy/dt grid;%显示网格线
5.Poincare 映射的绘制
对于不同的系统,Poincare 截面的选取方法也不同
对于自治系统一般每过其对应线性系统的固有周期,截取一次 对于非自治系统,一般每过其激励的周期,截取一次
例程:duffing 方程03
2=++x x x ω
的poincare 映射 function poincare(tstop)
global omega; omega=1;
T=2*pi/omega;%线性系统的周期或激励的周期 step=T/100;%定义步长为T/100 y0=[0.01;0];%初始条件
tspan=[0:step:100*T];%定义时间范围 [t,y]=ode45('duffing',tspan,y0);
for i=5000:100:10000%稳态过程每个周期取一个点 plot(y(i,1),y(i,2),'b.'); hold on;% 保留上一次的图形 end
xlabel('y');ylabel('dy/dt');
3
Poincare 映射也可以通过取极值点得到 function poincare(tstop) y0=[0.01;0];
tspan=[0:0.01:500];
[t,y]=ode45('duffing',tspan,y0); count=find(t>100);%截取稳态过程 y=y(count,:);
n=length(y(:,1));%计算点的总数 for i=2:n-1
if y(i-1,1)+eps<y(i,1) && y(i,1)>y(i+1,1)+eps % 简单的取出局部最大值
plot(y(i,1),y(i,2),'.'); hold on end end
xlabel('y');ylabel('dy/dt');
6.频谱
yy=fft(y(end-1000:end,1)); N=length(yy); power=abs(yy);
freq=(1:N-1)*1/step/N;
plot(freq(1:N/2),power(1:N/2)); xlabel('f(y)') ylabel('y')
7.算例
duffing 方程03
=++x x x
的时间历程,相图,频谱和poincare 映射。
function dy=duffing(t,x)
omega=1;%定义参数
f1=x(2);
f2=-omega^2*x(1)-x(1)^3;
dy=[f1;f2]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function duffsim(tstop)
step=0.01
y0=[0.1;0];
tspan=[0:step:500];
[t,y]=ode45('duffing',tspan,y0); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(2,2,1)
plot(t,y(:,1));%绘制y的时间历程
xlabel('t')%横轴为t
ylabel('y')%纵轴为y
grid;%显示网格线
axis([460 500 -Inf Inf])%显示范围设置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(2,2,2)
plot(y(end-1000:end,1),y(end-1000:end,2));%绘制y的时间历程
xlabel('y')%横轴为y
ylabel('dy/dt')%纵轴为dy/dt
grid;%显示网格线%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(2,2,3)
yy=fft(y(end-1000:end,1));
4
N=length(yy);
power=abs(yy);
freq=(1:N-1)*1/step/N;
plot(freq(1:N/2),power(1:N/2));
xlabel('f(y)')
ylabel('y') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(2,2,4)
count=find(t>100);%截取稳态过程
y=y(count,:);
n=length(y(:,1));%计算点的总数
for i=2:n-1
if y(i-1,1)+eps<y(i,1) && y(i,1)>y(i+1,1)+eps % 简单的取出局部最大值
plot(y(i,1),y(i,2),'.');hold on;
end
end
xlabel('y');ylabel('dy/dt');
5
8.分岔图的绘制
随F变化的分岔图。
+
-
+
t
3.03=
cos
x
x
x
x2.1
F
function dy=duffing(t,x)
global c;
omega=1;%定义参数
f1=x(2);
f2=omega^2*x(1)-x(1)^3-0.3*x(2)+c*cos(1.2*t); dy=[f1;f2]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
global c; %定义全局变量
range=[0.1:0.002:0.9];%定义参数变化范围
k=0;
6
YY=[];%定义空数组
for c=range
y0=[0.1;0];%初始条件
k=k+1;
tspan=[0:0.01:400];
[t,Y]=ode45('duffing',tspan,y0);
count=find(t>200);
Y=Y(count,:);
j=1;
n=length(Y(:,1));
for i=2:n-1
if Y(i-1,1)+eps<Y(i,1) && Y(i,1)>Y(i+1,1)+eps % 简单的取出局部最大值。
YY(k,j)=Y(i,1);
j=j+1;
end
end
if j>1
plot(c,YY(k,[1:j-1]),'k.','markersize',3);
end
hold on;
index(k)=j-1;
end
xlabel('c');
ylabel('y');
7
随F变化的分岔图
F=0.20
8
F=0.27
F=0.275
F=0.2875
9
F=0.32
F=0.36
F=0.4
10
F=0.652 F=0.8
11。