3

这是我的 Matlab 代码,用于求解质量弹簧缓冲器系统的二阶 ODE:

function Spring

clear all;
close all;
options=odeset('RelTol',1e-6); 
p0 = [1 0]; %initial position and velocity
[t,p] = ode45(@SpringFunction, [0 20], p0, options);

plot(t,p(:,1)) %plot the first column (x) vs. time

return

function pdot = SpringFunction(t,p)

c = 5; w = 2;
g = sin(t); % forcing function
pdot = zeros(size(p));
pdot(1) = p(2);
pdot(2) = g-c*p(2)-(w^2)*p(1);

return

我相信我得到的输出是错误的,因为在这种情况下,我认为位移与时间的关系图应该看起来像一个幅度减小的正弦曲线。相反,它看起来像这样: 松弛为幅度恒定的正弦曲线的递减函数

这对我来说似乎不正确,但如果我错了,请纠正我。我看不到代码中有什么不正确的地方。

4

1 回答 1

3

您正在正弦强制阻尼系统,因此您应该期望稳态是正弦曲线。这是一个很好的振动教程(PDF) - 请参阅第 448-450 页关于阻尼正弦强迫。尝试消除强迫或大大降低其幅度。此外,看起来你有很多阻尼。您的阻尼比ζ (zeta) 似乎是c/(2*w) = 5/4。这意味着您的系统的非受迫形式是过阻尼的——没有强迫您不会看到振荡。

ode45此外,使用振荡系统时要小心。如果您的系统碰巧太僵硬,您可能需要调整公差或使用刚性求解器ode15s来获得准确的结果。您始终可以尝试使用更严格的公差来检查它们是否产生了质量上相似的结果(相同的周期、幅度、生长/衰减率等)。

于 2014-03-13T04:06:07.357 回答