'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 FOR K=0 TO 10 DX=(XEND1-XIN)/N X=XIN: Y=YIN: U=UIN FOR I=1 TO N GOSUB [RUNGE] NEXT I PRINT X;" "; Y XEND1=XEND1+XEND/10 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=1: XIN=0: XEND=5 '***************************CHOOSE THE SAME VARIABLE NAMES AS IN RUNGE A=U B=(2*U+4*Y)*(-1) '***************************INSERT THE BOUNDARY CONDITIONS IN MAIN PROGR RETURN [RUNGE] ' SUBROUTINE RUNGE rem VARIABLES IN SUBROUTINE: INDEPENDENT: X DEPENDENT: Y AND U X=X: Y=Y: U=U GOSUB [EQ] K1=A*DX: L1=B*DX X=X+DX/2: Y=Y+K1/2: U=U+L1/2 GOSUB [EQ] K2=A*DX: L2=B*DX X=X-DX/2: Y=Y-K1/2: U=U-L1/2 X=X+DX/2: Y=Y+K2/2: U=U+L2/2 GOSUB [EQ] K3=A*DX: L3=B*DX X=X-DX/2: Y=Y-K2/2: U=U-L2/2 X=X+DX: Y=Y+K3: U=U+L3 GOSUB [EQ] K4=A*DX: L4=B*DX X=X-DX: Y=Y-K3: U=U-L3 X=X+DX Y=Y+K1/6+K2/3+K3/3+K4/6: U=U+L1/6+L2/3+L3/3+L4/6 RETURN