0
我需要繪製一個微分方程的幫助......它不斷出現所有的時髦和圖形不是它應該看起來像。Matlab微分方程歐拉方法
function [dydt] = diff(y,t)
dydt = (-3*y)+(t*(exp(-3*t)));
end
tI = 0;
yI = -0.1;
tEnd = 5;
dt = 0.5;
t = tI:dt:tEnd;
y = zeros(size(t));
y(1) = yI;
for k = 2:numel(y)
yPrime = diff(t(k-1),y(k-1));
y(k) = y(k-1) + dt*yPrime;
end
plot(t,y)
grid on
title('Engr')
xlabel('Time')
ylabel('y(t)')
legend(['dt = ' num2str(dt)])
這是我的代碼,但圖形與它應該看起來不一樣。我是否錯過了for
陳述的索引?
編輯
我得到一個錯誤:
Error using diff
Difference order N must be a positive integer scalar.
Error in diff3 (line 12)
yPrime = diff(t(k-1),y(k-1));
你有問題的函數名稱:matlab已經有內置函數'差異',並嘗試調用這個函數,而不是你自己的函數。嘗試爲您的函數'diff'使用不同的名稱。 –
你的另一個問題是你的ODE函數被定義爲'diff(y,t)',但是你正在調用參數翻轉:'diff(t(k-1),y(k-1))'。我建議遵循Matlab的ODE求解器(例如'ode45'),並將ODE函數的參數定義爲't',然後''y。你還會發現,即使對於這個簡單的函數,你的時間步長dt也太大了。嘗試0.1或更少。 – horchler
你也希望你的ODE函數是一個子函數(或者一個單獨的M文件函數),而不是你在這裏顯示的代碼的開始部分。 – horchler