如果我用描述質量彈簧阻尼系統的一階微分方法得到二階微分方程,那麼如何使用歐拉方法來繪製這個方程時我不知道一階差分?我想在MatLab中做到這一點。這是一個家庭作業問題,所以我沒有發佈任何代碼..我只想簡要介紹一下你是如何做到的。二階導數爲d2(t + 1)=(-1/m)*(c * d1 + k * y)其中c,m,k是常數,y初始爲1,d1爲一階微分,從0開始,t是時間。歐拉方法 - MatLab中的彈簧振盪
任何想法?
謝謝:)。
如果我用描述質量彈簧阻尼系統的一階微分方法得到二階微分方程,那麼如何使用歐拉方法來繪製這個方程時我不知道一階差分?我想在MatLab中做到這一點。這是一個家庭作業問題,所以我沒有發佈任何代碼..我只想簡要介紹一下你是如何做到的。二階導數爲d2(t + 1)=(-1/m)*(c * d1 + k * y)其中c,m,k是常數,y初始爲1,d1爲一階微分,從0開始,t是時間。歐拉方法 - MatLab中的彈簧振盪
任何想法?
謝謝:)。
二階eqn可以轉換爲一階微分方程組。
function dy = ex(y)
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = -c/m*y(2) - k/m*y(1);
從這裏你可以使用Matlab的內置解算器。 ode23s
會工作得很好:
[t,y] = ode23s(@ex, y0, tspan)
將二階方程改寫爲一階方程組。未知數對應於位置和速度。
一階微分方程組可能看起來像這樣,而y1 = y
。用'
表示時間導數。
y1' = y2
y2' = -c/m*y2 - k/m*y1
有以下形式的解析解(X(t)中,x '(t))的= EXP(A T)*(X(0)中,x'(0 )),其中A是2×2矩陣。如果您不需要使用matlab的ODE解算器,這是找到系統時間演變的正確方法。
爲了找到A,寫系統以這種形式
所以這裏A = [0 1; -k /米-c/m]的
設定K/M = 1,並且C/M = 0.1,我們可以寫
t = linspace(0,20, 1000);
A = [0 1; -1 -0.1];
for j = 1:length(t); x(j,:) = expm([0 1; -1 -0.1]*t(j))*[1;0]; end
plot (t,x)
legend ('position', 'velocity');
title ('underdamped spring starting at y = 1; y'' = 0')
謝謝。 y2如何首先定義?我想把這些方程放在一個循環中,當我完成迭代時繪製它們::) – ale 2011-01-27 17:50:08