私は自分のクラスの課題に取り組んでおり、選択したプログラム (Matlab を選択しました) を使用してコードを記述し、4 次ルンゲクッタ法を使用してベッセル関数の微分方程式を解くことになっています。参考までに、ベッセル関数 DE は次のとおりです。
x^2*(J_n)''+x*(J_n)'+(x^2-n^2)*J_n=0.
これを 2 つの結合された 1 次 DE に分離するには、次のようにします。
(J_n)'=Z_n および
(Z_n)'+(1/x)*Z_n+[(x^2-n^2)/x^2]*J_n=0.
この課題の前に、Matlab やその他のプログラミング言語の経験はありません。Matlab に 'ode45' コマンドがあることは知っていますが、Matlab のコマンドに依存するのではなく、自分でコードを書くことになっています。これまでのところ、ベッセル関数の n=0 ケースに取り組んできましたが、関数をプロットしようとするとエラーが発生し続けます。私が持っている現在のエラーは、「「double」型の入力引数に対して定義されていない関数またはメソッド「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);
助けてくれてありがとう