restart: # TRAPEZOIDAL WITH NEWTON ITERATION ALGORITHM 5.8 # # TO APPROXIMATE THE SOLUTION OF THE INITIAL VALUE PROBLEM: # Y' = F(T,Y), A <= T <= B, Y(A) = ALPHA, # AT (N+1) EQUALLY SPACED NUMBERS IN THE INTERVAL [A,B]. # # INPUT: ENDPOINTS A,B: INITIAL CONDITION ALPHA: INTEGER N: # TOLERANCE TOL: MAXIMUM NUMBER OF ITERATIONS M AT ANY ONE STEP. # # OUTPUT: APPROXIMATION W TO Y AT THE (N+1) VALUES OF T # OR A MESSAGE OF FAILURE. print(`This is the Implicit Trapezoidal Method. `): print(`Input the function F(t,y) in terms of t and y `): print(`For example: y-t^2+1 `): F := scanf(`%a`)[1]:print(`F(x) = `):print(F): FYP := diff(F,y): F := unapply(F,t,y): FYP := unapply(FYP,t,y): 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: print(`Input the initial condition. `): ALPHA := scanf(`%f`)[1]:print(`ALPHA = `):print(ALPHA): OK := FALSE: print(`Input a positive integer for the number of subintervals. `): while OK = FALSE do N := scanf(`%d`)[1]:print(`N = `):print(N): if N <= 0 then print(`Number must be a postiive integer. `): else OK := TRUE: fi: od: OK := FALSE: while OK = FALSE do print(`Input tolerance. `): TOL := scanf(`%f`)[1]:print(`Tolerance = `):print(TOL): if TOL <= 0 then print(`Tolerance must be positive. `): else OK := TRUE: fi: od: OK := FALSE: while OK = FALSE do print(`Input maximum number of iterations. `): M := scanf(`%f`)[1]:print(`Maximum number of iterations = `):print(M): if M > 0 then OK := TRUE: else print(`Number of iterations must be positive. `): 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(`Entry = `):print(NAME): OUP := fopen(NAME,WRITE,TEXT): else OUP := default: fi: fprintf(OUP, `IMPLICIT TRAPEZOIDAL METHOD USING NEWTONS METHOD\134n\134n`): fprintf(OUP, ` t w #iter\134n`): # Step 1 W := ALPHA: T := A: H := (B-A)/N: fprintf(OUP, `%5.3f %11.8f 0\134n`, T, W): I1 := 1: OK := TRUE: # Step 2 while I1 <= N and OK = TRUE do # Step 3 XK1 := W+0.5*H*F(T, W): W0 := XK1: J := 1: IFLAG := 0: # Step 4 while IFLAG = 0 and OK = TRUE do # Step 5 W := W0-(W0-XK1-0.5*H*F(T+H, W0))/(1-0.5*H*FYP(T+H, W0)): # Step 6 if abs(W-W0) < TOL then # Step 7 IFLAG := 1: T := A+I1*H: fprintf(OUP,`%5.3f %11.8f %3d\134n`, T, W, J): I1 := I1+1: else J := J+1: W0 := W: if J > M then OK := FALSE: fi: fi: od: od: if OK = FALSE then print(`Maximum Number of Iterations Exceeded`): fi: # Step 8 if OUP <> default then fclose(OUP): print(`Output file `,NAME,` created successfully`): fi: fi: SUpUaGlzfmlzfnRoZX5JbXBsaWNpdH5UcmFwZXpvaWRhbH5NZXRob2Qufkc2Ig== SU9JbnB1dH50aGV+ZnVuY3Rpb25+Rih0LHkpfmlufnRlcm1zfm9mfnR+YW5kfnl+RzYi STZGb3J+ZXhhbXBsZTp+eS10XjIrMX5HNiI= SShGKHgpfj1+RzYi LCYqJi1JJGV4cEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjLCRJInRHRikiIiYiIiIsJkkieUdGKUYuRiwhIiIiIiNGLUYuRi4= SVRJbnB1dH5sZWZ0fmFuZH5yaWdodH5lbmRwb2ludHN+c2VwYXJhdGVkfmJ5fmJsYW5rLn5HNiI= SSVhfj1+RzYi JCIiIUYj SSVifj1+RzYi JCIiIiIiIQ== ST5JbnB1dH50aGV+aW5pdGlhbH5jb25kaXRpb24ufkc2Ig== SSlBTFBIQX49fkc2Ig== JCEiIiIiIQ== SVpJbnB1dH5hfnBvc2l0aXZlfmludGVnZXJ+Zm9yfnRoZX5udW1iZXJ+b2Z+c3ViaW50ZXJ2YWxzLn5HNiI= SSVOfj1+RzYi IiIm STJJbnB1dH50b2xlcmFuY2Uufkc2Ig== SS1Ub2xlcmFuY2V+PX5HNiI= JCIiIiEiJw== SUVJbnB1dH5tYXhpbXVtfm51bWJlcn5vZn5pdGVyYXRpb25zLn5HNiI= SUBNYXhpbXVtfm51bWJlcn5vZn5pdGVyYXRpb25zfj1+RzYi JCIjNSIiIQ== STpDaG9pY2V+b2Z+b3V0cHV0fm1ldGhvZDp+RzYi STUxLn5PdXRwdXR+dG9+c2NyZWVufkc2Ig== STgyLn5PdXRwdXR+dG9+dGV4dH5maWxlfkc2Ig== STVQbGVhc2V+ZW50ZXJ+MX5vcn4yfkc2Ig== SSlFbnRyeX49fkc2Ig== IiIi IMPLICIT TRAPEZOIDAL METHOD USING NEWTONS METHOD t w #iter 0.000 -1.00000000 0 0.200 -0.14149685 4 0.400 0.27486139 5 0.600 0.55398284 5 0.800 0.78307197 6 1.000 0.99377255 7 JSFH