Matlab ODE解决2DOF振动系统

时间:2017-02-08 14:49:36

标签: matlab ode vibration

我目前正在学习Matlab的ODE功能来解决简单的振动问题。

例如mx' + cx' + kx = F * sin(wt)可以使用

解决
function dx = fun(t,x)

m=0.02;     % Mass - kg
k=25.0;     % Stiffness - N/m
c=0.0125;   % System damping - Ns/m
f=10;       % Frequency
F=5;

dx= [x(2); (F*sin(2*pi*f*t)-c*x(2)-k*x(1))/m]

然后调用ode45函数来获得位移和速度

[t,x]=ode45(@fun,[0 10],[0.0;0.0])

我的问题,我还没有完全理解在网上搜索,是否可以将ODE函数用于多自由度系统?例如,如果我们有两个质量,弹簧和阻尼器,我们激发质量1,我们得到以下等式:

m1 * x1'' + c1 * x1' -c2 * x2' +(k1 + k2)* x1-k2 * x2 = f1(t)

m2 * x2'' -c2 * x1' +(c1 + c2)* x2' -k2 * x1 + k2 * x2 = 0

这里,位移x1& x2相互依赖,我的问题是如何在Matlab中解决这些ODE?

1 个答案:

答案 0 :(得分:1)

SELECT city, LENGTH(city) FROM station GROUP BY city ORDER BY LENGTH(city) ASC; 解决的函数输入没有限制。只需传入一个输入矩阵并期望输出矩阵。例如,这里有一个函数可以解决6 bar机构的位置。

ODE45

输入是成员的位置和速度。输出是新的位置和速度。

您使用它的方式与任何function zdot = cp_solve(t,z) %% Constants g = -9.81; L1 = .2; m0 = 0; I0 = 0; m1 = 1; I1 = (1/3) * m1 * L1^2; %% Inputs q = z(1:6); qdot = z(7:12); %% Mass Matrix M = zeros(6,6); M(1,1) = m0; M(2,2) = m0; M(3,3) = I0; M(4,4) = m1; M(5,5) = m1; M(6,6) = I1; %% Constraint Matrix Phiq = zeros(5,6); Phiq(1,1) = 1; Phiq(2,2) = 1; Phiq(3,3) = 1; Phiq(4,1) = 1; Phiq(4,4) = -1; Phiq(4,6) = (-L1/2)*sin(q(6)); Phiq(5,2) = 1; Phiq(5,5) = -1; Phiq(5,6) = (L1/2)*cos(q(6)); %% Generalized Forces Q = zeros(6,1); Q(5) = m1 * g; %% Right Side Vector rs = zeros(5,1); rs(4) = (L1/2) * cos(q(6)) * qdot(6)^2; rs(5) = (L1/2) * sin(q(6)) * qdot(6)^2; %% Coefficient Matrix C = [M Phiq'; Phiq zeros(5,5)]; R = [Q; rs]; %% Solution Sol = C \ R; zdot = [qdot; Sol(1:6)]; end 问题相同。设置初始条件,定义时间并解决问题。

ODE45

在你的情况下,你有2个方程和2个未知数。将问题设置为矩阵问题并在函数中同时求解。我会为你的案例推荐模态方法。