restart: # RUNGE-KUTTA FOR SYSTEMS OF DIFFERENTIAL EQUATIONS ALGORITHM 5.7 # # TO APPROXIMATE THE SOLUTION OF THE MTH-ORDER SYSTEM OF FIRST- # ORDER INITIAL-VALUE PROBLEMS # UJ` = FJ( T, U1, U2, ..., UM ), J = 1, 2, ..., M # A <= T <= B, UJ(A) = ALPHAJ, J = 1, 2, ..., M # AT (N+1) EQUALLY SPACED NUMBERS IN THE INTERVAL [A,B]. # # INPUT: ENDPOINTS A,B: NUMBER OF EQUATIONS M: INITIAL # CONDITIONS ALPHA1, ..., ALPHAM: INTEGER N. # # OUTPUT: APPROXIMATION WJ TO UJ(T) AT THE (N+1) VALUES OF T. print(`This is the Runge-Kutta Method for Systems of m equations`): OK := FALSE: while OK = FALSE do print(`Input the number of equations`): M := scanf(`%d`)[1]:print(`Number of equations is `):print(M): if M <= 0 then print(`Number must be a positive integer\134n`): else OK := TRUE: fi: od: for I1 from 1 to M do print(`Input the function f[i](t,y1 ... yM) in terms of t, y1, ... for i = `):print(I1): print(`For example: y1-t^2+1`): F[I1] := scanf(`%a`)[1]:print(`function is `):print(F[I1]): F[I1] := unapply(F[I1],t,evaln(y || (1..M))): od: OK := FALSE: while OK = FALSE do print(`Input left and right endpoints separated by blank`): A := scanf(`%f`)[1]: B := scanf(`%f`)[1]:print(`a = `):print(A): print(`b = `):print(B): if A >= B then print(`Left endpoint must be less than right endpoint`): else OK := TRUE: fi: od: for I1 from 1 to M do print(`Input the initial condition for i = `):print(I1): ALPHA[I1] := scanf(`%f`)[1]:print(`initial condition is `):print(ALPHA[I1]): od: OK := FALSE: while OK = FALSE do print(`Input a positive integer for the number of subintervals`): N := scanf(`%d`)[1]:print(`N = `):print(N): if N <= 0 then print(`Number must be a positive integer`): else OK := TRUE: fi: od: if OK = TRUE then print(`Choice of output method:`): print(`1. Output to screen`): print(`2. Output to text file`): print(`Please enter 1 or 2`): FLAG := scanf(`%d`)[1]:print(`Entry = `):print(FLAG): if FLAG = 2 then print(`Input the file name in the form - drive:\134\134name.ext`): print(`For example A:\134\134OUTPUT.DTA`): NAME := scanf(`%s`)[1]:print(`File name is `):print(NAME): OUP := fopen(NAME,WRITE,TEXT): else OUP := default: fi: fprintf(OUP, `RUNGE-KUTTA METHOD FOR SYSTEMS OF DIFFERENTIAL EQUATIONS\134n\134n`): fprintf(OUP, ` T`): for I1 from 1 to M do fprintf(OUP, ` W%d`, I1): od: # Step 1 H := (B-A)/N: T := A: # Step 2 for J from 1 to M do W[J] := ALPHA[J]: od: # Step 3 fprintf(OUP, `\134n%5.3f`, T): for I1 from 1 to M do fprintf(OUP, ` %11.8f`, W[I1]): od: fprintf(OUP, `\134n`): # Step 4 for L from 1 to N do # Step 5 for J from 1 to M do K[1,J] := H*F[J](T,seq(W[i1],i1=1..M)): od: # Step 6 for J from 1 to M do K[2,J] := H*F[J](T+H/2.0,seq(W[i1]+K[1,i1]/2.0,i1=1..M)): od: # Step 7 for J from 1 to M do K[3,J] := H*F[J](T+H/2.0,seq(W[i1]+K[2,i1]/2.0,i1=1..M)): od: # Step 8 for J from 1 to M do K[4,J] := H*F[J](T+H,seq(W[i1]+K[3,i1],i1=1..M)): od: # Step 9 for J from 1 to M do W[J] := W[J]+(K[1,J]+2.0*K[2,J]+2.0*K[3,J]+K[4,J])/6.0: od: # Step 10 T := A+L*H: # Step 11 fprintf(OUP, `%5.3f`, T): for I1 from 1 to M do fprintf(OUP, ` %11.8f`, W[I1]): od: fprintf(OUP, `\134n`): od: # Step 12 if OUP <> default then fclose(OUP): print(`Output file`,NAME,` created successfully`): fi: fi: SVpUaGlzfmlzfnRoZX5SdW5nZS1LdXR0YX5NZXRob2R+Zm9yflN5c3RlbXN+b2Z+bX5lcXVhdGlvbnNHNiI= ST5JbnB1dH50aGV+bnVtYmVyfm9mfmVxdWF0aW9uc0c2Ig== SThOdW1iZXJ+b2Z+ZXF1YXRpb25zfmlzfkc2Ig== IiIj SV9vSW5wdXR+dGhlfmZ1bmN0aW9ufmZbaV0odCx5MX4uLi5+eU0pfmlufnRlcm1zfm9mfnQsfnkxLH4uLi5+Zm9yfml+PX5HNiI= IiIi STZGb3J+ZXhhbXBsZTp+eTEtdF4yKzFHNiI= SS1mdW5jdGlvbn5pc35HNiI= LChJI3kxRzYiISIlSSN5MkdGJCIiJCIiJyIiIg== SV9vSW5wdXR+dGhlfmZ1bmN0aW9ufmZbaV0odCx5MX4uLi5+eU0pfmlufnRlcm1zfm9mfnQsfnkxLH4uLi5+Zm9yfml+PX5HNiI= IiIj STZGb3J+ZXhhbXBsZTp+eTEtdF4yKzFHNiI= SS1mdW5jdGlvbn5pc35HNiI= LChJI3kxRzYiJCEjQyEiIkkjeTJHRiQkIiM7RickIiNPRiciIiI= SVJJbnB1dH5sZWZ0fmFuZH5yaWdodH5lbmRwb2ludHN+c2VwYXJhdGVkfmJ5fmJsYW5rRzYi SSVhfj1+RzYi JCIiIUYj SSVifj1+RzYi JCIiJiEiIg== SUVJbnB1dH50aGV+aW5pdGlhbH5jb25kaXRpb25+Zm9yfml+PX5HNiI= IiIi STZpbml0aWFsfmNvbmRpdGlvbn5pc35HNiI= JCIiIUYj SUVJbnB1dH50aGV+aW5pdGlhbH5jb25kaXRpb25+Zm9yfml+PX5HNiI= IiIj STZpbml0aWFsfmNvbmRpdGlvbn5pc35HNiI= JCIiIUYj SVhJbnB1dH5hfnBvc2l0aXZlfmludGVnZXJ+Zm9yfnRoZX5udW1iZXJ+b2Z+c3ViaW50ZXJ2YWxzRzYi SSVOfj1+RzYi IiIm STlDaG9pY2V+b2Z+b3V0cHV0fm1ldGhvZDpHNiI= STQxLn5PdXRwdXR+dG9+c2NyZWVuRzYi STcyLn5PdXRwdXR+dG9+dGV4dH5maWxlRzYi STRQbGVhc2V+ZW50ZXJ+MX5vcn4yRzYi SSlFbnRyeX49fkc2Ig== IiIi RUNGE-KUTTA METHOD FOR SYSTEMS OF DIFFERENTIAL EQUATIONS T W1 W2 0.000 0.00000000 0.00000000 0.100 0.53825520 0.31962624 0.200 0.96849874 0.56878217 0.300 1.31071904 0.76073313 0.400 1.58126524 0.90632062 0.500 1.79350749 1.01440242 JSFH