为什么这些微分方程会产生相似的结果?

Why do these differential equations yield similar results?

我想知道我求解二阶微分方程的 Matlab 代码是否有问题。方程是 y"+cy'+12.5y=2.5cos(wt)。这是我使用的代码:

function [ dydt ] = order2( t,y )

dydt = zeros(size(y));
c=2.5;
%c=0.25;
%c=0.025;

w=sqrt(12.5-(c^2/4)); 
a = 2.5; 
b = 12.5; 
r = 2.5*cos(w*t); 
dydt(1) = y(2);
dydt(2) = r -a*y(2) - b*y(1);

end

输入命令的代码window:

>>  tspan = [0 40];
y0 = [1,2];
[t,y]=ode45(@order2,tspan,y0);
plot(t,y(:,1))

问题是,这段代码似乎确实有效(它输出了一个图表),但是当我使用每个 c 值时,它生成的图表看起来几乎一样。我认为图表之间会有显着差异。结果几乎相同是否有意义,或者我的代码有问题?

如果你正确地实现了方程,那么 a=c 并且数值方程实际上代表了共振情况,那么你也会得到 3 个不同的图表。下面将它们显示在一张图表中。可以看出饱和振幅如何取决于摩擦系数、低摩擦大振幅和vv。

b = 12.5; 
def derivs(y,t,c):
    w = (b-c**2/4)**0.5
    return [ y[1], 2.5*np.cos(w*t) - c*y[1] - b*y[0] ]

tspan = np.linspace(0,20,501)
cs = [2.5, 0.25, 0.025 ]
sols = [ odeint(lambda y,t: derivs(y,t,c), [1.,2.], tspan) for c in cs]
for c,sol in zip(cs, sols): plt.plot(tspan, sol[:,0], label="c=%6f"%c)
plt.legend(loc="best");plt.show()