为什么这些微分方程会产生相似的结果?
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()
我想知道我求解二阶微分方程的 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()