我正在爲我的一個類的任務,我應該寫一個代碼使用我選擇的程序(我選擇了Matlab)來解決貝塞爾函數微分方程使用4階Runge-Kutta方法。作爲參考,貝塞爾函數DE是:使用龍格庫塔解決貝塞爾函數
x^2 *(J_n)''+ x *(J_n)'+(x^2-n^2)* J_n = 0。
我能夠通過此分離成兩個耦合的第一順序的DE:
(J_n) '= Z_n和
(Z_n)' +(1/X)* Z_n + [(X^2-正^ 2)/ X^2] * J_n = 0。
我沒有使用Matlab的經驗,也沒有任何其他編程語言之前,這項任務。我知道Matlab有'ode45'命令,但我應該自己編寫代碼,而不是依賴Matlab的命令。到目前爲止,我一直在研究貝塞爾函數的n = 0情況,但當我嘗試繪製函數時,我一直收到錯誤。當前的錯誤我說:「未定義的函數或方法'J'輸入參數的類型'雙'。」但我不知道如何解決這個錯誤,如果我的代碼甚至是正確的。有人能告訴我哪裏出了問題,或者寫這段代碼的正確方法是什麼?
h=0.01; %step size
J_0(1)=1; %initial condition for J_0
Z_0(1)=1; %initial condition for Z_0-This value should be zero
%but Matlab gives me an error. To fix this, I input
%Z_0(1)-1 to use the correct value for Z_0(1).
x(1)=0.001; %first value of x
dZ(Z_0,J_0)=(-1/x)*(Z_0-1)-J_0;
for i=[1:1:10]
dZ1=(-1/x)*(Z_0-1)-J_0;
dJ1=(Z_0(1)-1)*h;
dZ2=(-1/x)*(Z_0-1+0.5*h)-(J_0+0.5*h*dJ1);
dJ2=((Z_0(1)-1)+dZ1)*h;
dZ3=(-1/x)*(Z_0-1+0.5*h)-(J_0+0.5*h*dJ2);
dJ3=((Z_0(1)-1)+dZ1+dZ2)*h;
dZ4=(-1/x)*(Z_0-1+h)-(J_0+h*dJ3);
dJ4=((Z_0(1)-1)+dZ1+dZ2+dZ3)*h;
J(i+1)=J(i)+(h/6)*(dJ1+2*dJ2+2*dJ3+dJ4);
end
plot(J_0);
預先感謝任何幫助
明白了,這是有道理的。再次感謝您的幫助。 – John