나는 내 수업에 대한 과제를 진행하고 있으며, 베셀 함수 미분 방정식을 풀기 위해 내가 선택한 프로그램 (나는 Matlab을 선택했다)을 사용하여 코드를 작성해야한다. 4 차 Runge-Kutta 방법을 사용하여 계산한다. 참고로 Bessel 함수 DE는 다음과 같습니다.Runge Kutta를 사용하여 베셀 함수를 풀다.
x^2 * (x_n) '+ x * (J_n)'+ (x^2-n^2) * J_n = 0.
I 의해 두 결합 일차 DE는 이것을 분리 할 수있어:
(J_n) '= Z_n 및
(Z_n)'+ (1/X) * Z_n + [(X^2-n^2)/x^2] * J_n = 0이다.
이 과제를하기 전에 Matlab이나 다른 프로그래밍 언어에 대한 경험이 없습니다. Matlab은 'ode45'명령을 가지고 있지만 Matlab의 명령에 의존하지 않고 직접 코드를 작성해야한다는 것을 알고 있습니다. 지금까지는 Bessel 함수에 대해 n = 0 인 경우를 처리했지만 함수를 시도하고 플로팅 할 때 오류가 계속 발생합니다. 내가 가진 현재 오류 : "정의되지 않은 함수 또는 메서드 'J'입력 인수에 대한 'double'." 하지만이 오류를 수정하는 방법이나 내 코드가 올바른지 여부는 알 수 없습니다. 누군가 내가 잘못했거나이 코드를 작성하는 올바른 방법은 무엇인가? 사전에 어떤 도움
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