home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1979-12-31 | 3.3 KB | 78 lines |
- 10 REM MATRIX ALGEBRA PROGRAM
- 15 PI=3.1416
- 20 REM OPTION #0,"W",128: REM PRECISION 5
- 30 DIM CR(2,2), CX(2,2), CM(2,2), CA(2,2)
- 40 DIM BR(2,2), BX(2,2), BM(2,2), BA(2,2): DG=180/PI: Z0=50
- 50 DIM AR(2,2), AX(2,2), AM(2,2), AA(2,2)
- 60 REM COMPLEX ARITHMATIC SUBROUTEENS
- 70 DEF FNMR(AR,AX,BR,BX)=AR*BR-AX*BX
- 80 DEF FNMX(AR,AX,BR,BX)=AR*BX+AX*BR
- 90 DEF FNDR(AR,AX,BR,BX)=(AR*BR+AX*BX)/(BR^2+BX^2)
- 100 DEF FNDX(AR,AX,BR,BX)=(AX*BR-AR*BX)/(BR^2+BX^2)
- 110 DEF FNMG(AR,AX)=SQR(AR^2+AX^2)
- 120 REM DEF FNAG(AR,AX): REM IF AR>=0 THEN FNRETURN DG*ATN(AX/AR)
- 130 REM FNEND DG*(ATN(AX/AR)+PI)
- 140 DEF FNR(MG,AG)=MG*COS(AG/DG)
- 150 DEF FNX(MG,AG)=MG*SIN(AG/DG)
- 160 REM PARAMETER INPUT
- 170 PRINT: PRINT "PROGRAM FOR MATRIX ALGEBRA"
- 172 PRINT:PRINT,"K2UYH ----- modified for ibm pc -- wa2tif":PRINT
- 180 PRINT "ANGLES IN DEGREES"
- 190 PRINT: INPUT "MATRIX #1 FORM = ('POL' OR 'RECT' OR 'FILE')"; Q$
- 200 IF Q$="POL" THEN 210 ELSE IF Q$="RECT" THEN 270 ELSE IF Q$="FILE" THEN 330 ELSE IF Q$="END" THEN END ELSE 190
- 210 PRINT: FOR I=1 TO 2: FOR J=1 TO 2
- 220 PRINT "MAG OF A("; I; ","; J; ")=";: INPUT AM(I,J)
- 230 PRINT "ANG OF A("; I; ","; J; ")=";: INPUT AA(I,J)
- 240 AR(I,J)=FNR(AM(I,J),AA(I,J)): PRINT "REAL A("; I; ","; J; ")="; AR(I,J)
- 250 AX(I,J)=FNX(AM(I,J),AA(I,J)): PRINT "IMAG. A("; I; ","; J; ")="; AX(I,J)
- 260 PRINT: NEXT: NEXT: GOTO 350
- 270 PRINT: FOR I=1 TO 2: FOR J=1 TO 2
- 280 PRINT "REAL OF A("; I; ","; J; ")=";: INPUT AR(I,J)
- 290 PRINT "IMG OF A("; I; ","; J; ")=";: INPUT AX(I,J)
- 300 AM(I,J)=FNMG(AR(I,J),AX(I,J)): PRINT "MAG A("; I; ","; J; ")="; AM(I,J)
- 305 GOSUB 700
- 310 AA(I,J)=FNAG(AR(I,J),AX(I,J)): PRINT "ANGLE A("; I; ","; J; ")="; AA(I,J)
- 320 PRINT: NEXT: NEXT: GOTO 350
- 330 PRINT: INPUT "PARAMETER #1 FILE NAME"; F$: PRINT:
- 340 OPEN #1,"I",F$: MAT READ #1,AR,AX,AM,AA: PRINT
- 350 INPUT "MATRIX #2 FORM = ('POL' OR 'RECT' OR 'FILE')"; Q$
- 360 IF Q$="POL" THEN 370 ELSE IF Q$="RECT" THEN 430 ELSE IF Q$="FILE" THEN 490 ELSE 350
- 370 PRINT: FOR I=1 TO 2: FOR J=1 TO 2
- 380 PRINT "MAG OF B("; I; ","; J; ")=";: INPUT BM(I,J)
- 390 PRINT "ANG OF B("; I; ","; J; ")=";: INPUT BA(I,J)
- 400 BR(I,J)=FNR(BM(I,J),BA(I,J)): PRINT "REAL B("; I; ","; J; ")="; BR(I,J)
- 410 BX(I,J)=FNX(BM(I,J),BA(I,J)): PRINT "IMAG. B("; I; ","; J; ")="; BX(I,J)
- 420 PRINT: NEXT: NEXT: GOTO 510
- 430 PRINT: FOR I=1 TO 2: FOR J=1 TO 2
- 440 PRINT "REAL OF B("; I; ","; J; ")=";: INPUT BR(I,J)
- 450 PRINT "IMG OF B("; I; ","; J; ")=";: INPUT BX(I,J)
- 460 BM(I,J)=FNMG(BR(I,J),BX(I,J)): PRINT "MAG B("; I; ","; J; ")="; BM(I,J)
- 465 GOSUB 700
- 470 BA(I,J)=FNAG(BR(I,J),BX(I,J)): PRINT "ANGLE B("; I; ","; J; ")="; BA(I,J)
- 480 PRINT: NEXT: NEXT: GOTO 510
- 490 PRINT: INPUT "PARAMETER #2 FILE NAME"; F$: PRINT:
- 500 OPEN #1,"I",F$: MAT READ #1,BR,BX,BM,BA: PRINT
- 510 INPUT "OPERATION ('ADD' OR 'MULT')"; Q$
- 520 IF Q$="ADD" THEN 580 ELSE IF Q$="NEW" THEN 190 ELSE IF Q$="END" THEN END ELSE IF Q$<>"MULT" THEN 510
- 530 REM MATRIX MULT PROGRAM
- 540 FOR I=1 TO 2: FOR J=1 TO 2: CR(I,J)=FNMR(AR(I,1),AX(I,1),BR(1,J),BX(1,J))+FNMR(AR(I,2),AX(I,2),BR(2,J),BX(2,J))
- 550 CX(I,J)=FNMX(AR(I,1),AX(I,1),BR(1,J),BX(1,J))+FNMX(AR(I,2),AX(I,2),BR(2,J),BX(2,J))
- 560 NEXT: NEXT: PRINT: GOTO 600
- 570 REM MATRIX ADD PROGRAM
- 580 FOR I=1 TO 2: FOR J=1 TO 2: CR(I,J)=AR(I,J)+BR(I,J)
- 590 CX(I,J)=AX(I,J)+BX(I,J): NEXT: NEXT: PRINT
- 600 FOR I=1 TO 2: FOR J=1 TO 2: PRINT
- 610 PRINT "REAL C("; I; ","; J; ")="; CR(I,J)
- 620 PRINT "IMG C("; I; ","; J; ")="; CX(I,J)
- 625 GOSUB 700
- 630 CM(I,J)=FNMG(CR(I,J),CX(I,J)): CA(I,J)=FNAG(CR(I,J),CX(I,J))
- 640 PRINT "MAG C("; I; ","; J; ")="; CM(I,J)
- 650 PRINT "ANG C("; I; ","; J; ")="; CA(I,J): NEXT: NEXT
- 660 PRINT: INPUT "WANT TO SAVE FILE (Y OR N)"; Q$: PRINT
- 670 IF Q$="N" THEN 510 ELSE IF Q$="END" THEN END ELSE INPUT "FILE NAME (BEGIN WITH PARAMETER)"; F$: PRINT
- 680 ERASE F$: OPEN #1,"O",F$: MAT WRITE #1, CR,CX,CM,CA
- 690 CLOSE #1: GOTO 510
- 700 IF AR>0 THEN GOTO 710 ELSE GOTO 720
- 710 DEF FNAG(AR,AX)=DG*ATN(AR/AX):RETURN
- 720 DEF FNAG(AR,AX)=DG*(ATH(AR/AX)+PI):RETURN
-