Trailing-Edge
-
PDP-10 Archives
-
decuslib20-01
-
decus/20-0025/solnx.for
There is 1 other file named solnx.for in the archive. Click here to see a list.
00010 C SOLNX.SRC OLS 62 LINES
00020 C
00030 FUNCTION SOLN(IND,FUNC,BOT,TOP,EPS,IERR)
00040 IF (EPS) 11, 11, 21
00050 11 IERR=-1
00060 GO TO 5001
00070 21 X=TOP
00080 TOPX = TOP
00090 MAXIT=100
00100 TOPY=FUNC(X)
00110 IF (TOPY) 31, 411, 31
00120 31 X=BOT
00130 BOTX1 = BOT
00140 BOTY=FUNC(X)
00150 IF (BOTY) 41, 411, 41
00160 41 IERR=1
00170 ITER = 1
00180 DX=.25*(TOPX-X)
00190 46 X=BOTX1
00200 51 X=X+2.*DX
00210 IF (X-TOPX) 61, 71, 71
00220 61 IF (FUNC(X)*TOPY) 201, 411, 51
00230 71 DX=DX*.5
00240 GO TO (131,81),IND
00250 81 IF (DX/(TOPX-BOTX1)-EPS) 5001, 5001, 46
00260 131 IF (DX-EPS) 5001, 5001, 46
00270 201 ITER=0
00280 BOTX=X
00290 BOTY=FUNC(X)
00300 211 X=(BOTX+TOPX)*.5
00310 ITER=ITER+1
00320 IF (ITER-MAXIT) 221, 221, 281
00330 221 GO TO (231,271),IND
00340 231 IF (TOPX-BOTX-EPS) 411, 411, 241
00350 241 Y=FUNC(X)
00360 IF (BOTY*Y) 251, 411, 261
00370 251 TOPX=X
00380 GO TO 211
00390 261 BOTX=X
00400 BOTY=Y
00410 GO TO 211
00420 271 IF(BOTX*TOPX) 241,241,331
00430 281 GO TO (291,301) ,IND
00440 291 IERR=2
00450 GO TO 421
00460 301 IF (TOPX*BOTX) 306, 306, 341
00470 306 IF (TOPX-BOTX-EPS) 311, 311, 321
00480 311 IERR=3
00490 GO TO 421
00500 321 IERR=4
00510 GO TO 421
00520 331 IF ((TOPX-BOTX)/ABS(X)-EPS) 411, 411, 241
00530 341 IF ((TOPX-BOTX)/ABS(X)-EPS) 411, 411, 346
00540 346 IF (TOPX-BOTX-EPS) 351, 351, 361
00550 351 IERR=-3
00560 GO TO 421
00570 361 IERR=-4
00580 GO TO 421
00590 411 IERR = 0
00600 421 SOLN=X
00610 5001 RETURN
00620 END