DEF FNF (X) = SIN(3.1415926# * X) REM Crank-Nicholson Algorithm DIM W(50, 50), L(50), U(50), Z(50) INPUT "Length of bar (ex. 1) : ", LT INPUT "Total time (ex. 1) : ", T INPUT "Alpha (ex. 1) : ", AL INPUT "# X gradations (ex. 20): ", M INPUT "# time steps (ex. 40): ", N H = LT / M K = T / N LA = AL * AL * K / (H * H) W(M, 0) = 0 YT = 0 FOR I = 1 TO M - 1 W(I, 0) = FNF(I * H) IF W(I, 0) > YT THEN YT = W(I, 0) NEXT L(1) = 1 + LA U(1) = -LA / (2 * L(1)) FOR I = 2 TO M - 2 L(I) = 1 + LA + LA * U(I - 1) / 2 U(I) = -LA / (2 * L(I)) NEXT L(M - 1) = 1 + LA + LA * U(M - 2) / 2 FOR J = 1 TO N TI = J * K Z(1) = ((1 - LA) * W(1, J - 1) + LA * W(2, J - 1) / 2) / L(1) FOR I = 2 TO M - 1 Z(I) = ((1 - LA) * W(I, J - 1) + LA * (W(I + 1, J - 1) + W(I - 1, J - 1) + Z(I - 1)) / 2) / L(I) NEXT W(M - 1, J) = Z(M - 1) FOR I = M - 2 TO 1 STEP -1 W(I, J) = Z(I) - U(I) * W(I + 1, J) NEXT LOCATE 10, 10: PRINT "Percentage done: "; INT(100 * J / N); "%" NEXT SCREEN 12 LINE (0, 470)-(639, 470), 3 XI = 639 / M YT = 470 / YT FOR J = 0 TO N C = C + 1 IF C > 15 THEN C = 1 FOR I = 1 TO M LINE ((I - 1) * XI, 470 - YT * W(I - 1, J))-(I * XI, 470 - YT * W(I, J)), C NEXT NEXT DO LOOP WHILE INKEY$ = ""