Matlab:强制弹簧质量阻尼器的ode45输出不正确

时间:2014-03-13 02:02:38

标签: matlab ode numerical-integration

这是我的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

我相信我得到的输出是错误的,因为在这种情况下我认为位移与时间的关系应该看起来像一个振幅递减的正弦曲线。相反,它看起来像这样: decreasing function which relaxes to a sinusoid whose amplitude is constant

这对我来说似乎不对,但如果我错了,请纠正我。我无法看到代码中的错误。

1 个答案:

答案 0 :(得分:3)