2017-12-02 9 views
1

2 차 미분 방정식을 푸는 데있어 MATLAB 코드에 문제가 있는지 궁금합니다. ,왜 이러한 미분 방정식에서 비슷한 결과가 발생합니까?

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

문제는이다.

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 

코드 명령 창에 입력 된 다음 방정식이 I 사용 된 코드 (중량) Y "+ CY '+ 12.5y = 2.5cos 인 이 코드는 작동하는 것처럼 보입니다 (그래프를 출력합니다). 그러나 각 C 값을 사용할 때 생성되는 그래프는 거의 동일하게 보입니다. 그래프 간에는 상당한 차이가 있다고 생각했습니다. 결과가 거의 동일하거나 내 코드가있는 것입니까?

답변

1

equality 정확하게, 그래서 실제로는 a=c이고 숫자 방정식은 실제로 공진의 경우를 나타냅니다. 그러면 3 개의 다른 그래프를 얻을 수 있습니다. 아래는 한 다이어그램에 나와 있습니다. 포화 진폭이 마찰 계수, 저 마찰 큰 진폭 및 v에 어떻게 의존하는지 볼 수 있습니다.

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