REM heat1n.bas REM ‰A‰ð–@‚É‚æ‚é‚PŽŸŒ³”M•û’öŽ® (ƒmƒCƒ}ƒ“‹«ŠEðŒ) REM u_t(x,t)=u_{xx}(x,t), (x,t)¸(0,1)~(0,‡) REM u_x(0,t)=A, u_x(1,t)=B, t¸(0,‡) REM u(x,0)=f(x), x¸[0,1] REM --------------------------------------------- DECLARE EXTERNAL FUNCTION f DECLARE EXTERNAL SUB trilu,trisol INPUT PROMPT "u_x(0,t), u_x(1,t): ": A, B INPUT PROMPT "•ªŠ„”(0ˆÈ‰º‚Í‚¨”C‚¹ƒ‚[ƒh): ": N IF N <= 0 THEN LET N=50 LET lambda=0.5 LET theta=0.5 LET Tmax=5 LET dt=0.01 ELSE INPUT PROMPT "ƒÉ: ": lambda INPUT PROMPT "ƒÆ: ": theta INPUT PROMPT "ÅIŽž: ": Tmax INPUT PROMPT "ƒ¢t: ": dt END IF DIM u(0 TO N),ff(0 TO N),al(0 TO N),ad(0 TO N),au(0 TO N) FOR i=0 TO N LET al(i)=-theta*lambda LET ad(i)=1+2*theta*lambda LET au(i)=-theta*lambda NEXT i LET au(0)=-2*THETA*lambda LET al(N)=-2*theta*lambda CALL trilu0(N+1,al,ad,au) SET WINDOW -0.2,1.2,-0.2,1.2 PLOT TEXT ,AT 0.3,0.8: "”M•û’öŽ®" PLOT TEXT ,AT 0.3,0.75, USING "u_x(0,t)=##.###, u_x(1,t)=##.###": A, B PLOT TEXT ,AT 0.3,0.7 ,USING "N=### ƒÉ=##.#### ƒÆ=##.####":N,lambda,theta LET h=1/N LET tau=lambda*h*h LET SKIP=INT(dt/tau) LET nmax=Tmax/tau FOR i=0 TO N LET u(i)=f(i*h) NEXT i FOR i=0 TO N PLOT LINES: i*h,u(i); NEXT i PLOT LINES LET c3=1-2*(1-theta)*lambda LET c4=(1-theta)*lambda PRINT a,b FOR k=1 TO nmax FOR i=1 TO N-1 LET ff(i)=c3*u(i)+c4*(u(i+1)+u(i-1)) NEXT i LET ff(0)=c3*u(0)+2*c4*u(1)-2*A*THETA*lambda*h LET ff(N)=c3*u(N)+2*c4*u(N-1)+2*B*THETA*lambda*h CALL trisol0(N+1,al,ad,au,ff) FOR i=0 TO N LET u(i)=ff(i) NEXT i IF MOD(k,SKIP)=0 THEN FOR i=0 TO N PLOT LINES: i*h,u(i); NEXT i plot lines END IF NEXT k END REM **************** ‰Šúƒf[ƒ^ ***************** EXTERNAL FUNCTION f(x) IF (x < 0.5) THEN LET f=x ELSE LET f=1-x END IF END FUNCTION REM *************** LU•ª‰ð ********************** EXTERNAL SUB trilu0(n,al(),ad(),au()) FOR i=0 TO n-2 LET al(i+1) = al(i+1) / ad(i) LET ad(i+1) = ad(i+1) - au(i) * al(i+1) NEXT i END SUB REM ********************************************* EXTERNAL SUB trisol0(n,al(),ad(),au(),b()) FOR i=0 TO n-2 LET b(i+1) = b(i+1) - b(i) * al(i+1) NEXT i LET b(n-1) = b(n-1) / ad(n-1) FOR i=n-2 TO 0 STEP -1 LET b(i) = (b(i) - au(i) * b(i+1)) / ad(i) NEXT i END SUB