0

나는 내 수업에 대한 과제를 진행하고 있으며, 베셀 함수 미분 방정식을 풀기 위해 내가 선택한 프로그램 (나는 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); 

감사

귀하의 문제는 줄에

답변

0

:

J(i+1)=J(i)+(h/6)*(dJ1+2*dJ2+2*dJ3+dJ4); 

당신의 할당 연산자의 오른쪽에 사용자가 설정되지 않습니다 변수 J를 사용 i이 가치 1을 취하기 전에. 내게 오타처럼 보입니다. (대신 J_0가되어야합니까?)

또한 잊지 마세요. 귀하의 dJdZ 자료를 for 루프에서 계산할 때 ur 지수는 i입니다.

+0

알겠습니다. 도움에 다시 한번 감사드립니다. – John