' PROGRAM WRITTEN BY INGEMAR BJERLE MARCH 2002 ' SOLVING OF SECCOND ORDER LINEAR DIFFERENTIAL EQUATION ' INITIAL BOUNDARY VALUE SITUATION IS HANDLED [START] INPUT "NUMBER OF STEPS ";N PRINT" X Y" XIN=0 XEND=5 YIN=2 UIN=0 XEND1=0 NN=10 FOR K=0 TO NN DX=(XEND1-XIN)/N X=XIN: Y=YIN: U=UIN FOR I=1 TO N GOSUB [RUNGE] NEXT I PRINT USING("###.###",X);" "; Y XEND1=XEND1+XEND/NN NEXT K CONFIRM" DO YOU WANT TO QUIT Y/N";answer$ IF answer$="yes" THEN GOTO [END] ELSE GOTO [START] END IF [END] PRINT " ENTER TO END" INPUT R$ PRINT " *** END ***" END [EQ] ' SUBROUTINE EQUATIONS REM DIFF EQ: D2Y/DX2 + 2*DY/DX + 4*Y REM WRITTEN AS TWO FIRST ORDER: U=DY/DX: DU/DX+2*U+4*Y REM BOUNDARY CONDITIONS: YIN=2: UIN=0: XIN=0: XEND=5 'A=DY B=DU D=DZ '***************************CHOOSE THE SAME VARIABLE NAMES AS IN RUNGE A=U B=(2*U+4*Y)*(-1) 'D= '***************************INSERT THE BOUNDARY CONDITIONS IN MAIN PROGR RETURN [RUNGE] ' SUBROUTINE RUNGE rem VARIABLES IN SUBROUTINE: INDEPENDENT: X DEPENDENT: Y, U AND Z X=X: Y=Y: U=U: Z=Z GOSUB [EQ] K1=A*DX: L1=B*DX: F1=D*DX X=X+DX/2: Y=Y+K1/2: U=U+L1/2: Z=Z+F1/2 GOSUB [EQ] K2=A*DX: L2=B*DX: F2=D*DX X=X-DX/2: Y=Y-K1/2: U=U-L1/2 :Z=Z-F1/2 X=X+DX/2: Y=Y+K2/2: U=U+L2/2 :Z=Z+F2/2 GOSUB [EQ] K3=A*DX: L3=B*DX: F3=D*DX X=X-DX/2: Y=Y-K2/2: U=U-L2/2 :Z=Z-F2/2 X=X+DX: Y=Y+K3: U=U+L3 :Z=Z+F3 GOSUB [EQ] K4=A*DX: L4=B*DX: F4=D*DX X=X-DX: Y=Y-K3: U=U-L3 :Z=Z-F3 X=X+DX Y=Y+K1/6+K2/3+K3/3+K4/6: U=U+L1/6+L2/3+L3/3+L4/6 Z=Z+F1/6+F2/3+F3/3+F4/6 RETURN