如何使用Matlab同时解决两组ODE?

时间:2017-02-28 08:15:11

标签: matlab ode

我目前正致力于滑块带系统的非线性摩擦引起的振动。我要解决两组常微分方程。一个是分离方程,另一个是重新连接方程。

在振动期间,需要检查滑块是否与移动带分离或保持与其接触。保持分离的条件仅取决于振动质量m的垂直运动,其由下式给出:y(t) > 0

我必须在分离过程中求解质量的运动方程,并且这些分离方程的初始条件是根据最后接触时的重新连接运动方程计算出来的。然后,在每个时间步的末尾监测质量的垂直位移y(t)。重新附着的条件是当y(t)变为零时,这意味着质量向下振动回到原始静态位置。

此时,滑块刚刚接触移动的皮带而没有任何接触力。如果y(t)在时间步长结束时变为负数,则二分法用于临界点,y(t)非常接近零,满足MATLAB代码中定义的容差,其中动力学从分离阶段切换到重新附着阶段

重新附着后,必须解决该系统的运动方程,直到再次满足分离条件,并且在重新附着之前的最后一步的分离控制方程计算初始条件。

可以重复这种在接触和分离之间切换的场景。我的代码在下面给出,它没有给出正确的结果,我无法重现10号图,这是在题为“非线性摩擦引起的滑块系统振动”的期刊论文中

功能文件:

function xdot = Numerical(~,x) global m c1 c2 k1 k2 k3 knl F nu

if( (abs(x(3)) == 0) )

xdot = [x(2); -((k1/m)+(k3/2*m))*x(1)-(c1/m)*x(2)-((-k3/2*m)+((nu*k2)/m))x(3)-((nuknl)/m)*(x(3))^3; x(4); (k3/2*m)*x(1)-((k2/m)+(k3/2*m))*x(3)-(c2/m)x(4)-(knl/m)(x(3))^3-(F/m)]; % Ignoring separation

else

xdot = [x(2); -(c1/m)*x(2)-(k1/m)*x(1)-(k3/2)*x(1); x(3); -(c2/m)*x(4)+(k3/2*m)*x(3)-(k3/2*m)*x(3)-(F/m)]; % Considering separation

end end

运行文件:

clc; clear all; global m c1 c2 k1 k2 k3 knl F nu

m = 5; c1 = 0; c2 = 0; k1 = 100; k2 = 50; k3 = 60; knl = 100; F = 80; nu = 0.7;

x0 = [0; 0; -1.5; 0]; % initial condition tspan = [0 100]; % time span

[t,x] = ode45('Numerical',tspan,x0); % Solver

p = x(:,1); % Displacement in x direction 
q = x(:,2); % Velocity in x direction 
r = x(:,3); % Displacement in y direction 
s = x(:,4); % Velocity in y direction plot(t,r);

0 个答案:

没有答案