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

时间:2017-12-02 00:23:01

标签: matlab differential-equations

我想知道我的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

输入命令窗口的代码:

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

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

1 个答案:

答案 0 :(得分:1)

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

diagram of resonance

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()