1 REM ----- NACHLADEN GRAFIK ------- 2 IF A$="N" THEN 100 3 PRINTCHR$(147)CHR$(17)"GRAFIK NACHLADEN (J/N)" 4 GET A$:IF A$="" THEN 4 5 IF A$="N" THEN 100 6 A$="N":LOAD"SYSGRAF.OBJ",8,1 10 REM********************************* 20 REM* * 30 REM* KURVENANPASSUNG * 40 REM* * 50 REM* STATISTIK-PROGRAMM ZUR * 60 REM* REGRESSIONSANALYSE MITTELS * 65 REM* POLYNOMEN INCL.GRAFIK * 70 REM* HEIMO PONNATH HAMBURG 1987 * 80 REM* C64 - VERSION * 90 REM********************************* 100 CLR:SYS 49152:SYS 49242:REM GRAFIKSPEICHER SICHERN 105 REM GRAPHIC1,1:GOSUB 4000 110 REM ----- VARIABLE ---------------- 120 M=0:S=0:N=0:I=0:J=0:K=0:G=0:A=0:G2=0:ZZ=0:HH=0:Q=0:P=0:A0=0:B=0 130 BB=319:BH=199:W=0:MX=-1E12:LX=1E12:MY=-1E12:LY=1E12:R=0 140 XU=0:XO=0:YU=0:YO=0:RA=0:RD=0:TA=0:TB=0:X=0:Y=0:X1=0:Y1=0 150 A$="":B$="" 160 REM 170 DEFFN G(N)=INT(.2*SQR(5*(A-10*N-17))-4):REM MAX. POLYNOMGRAD BERECHNEN 180 DEFFN X(X)=RA*X+TA:DEFFN Y(Y)=RD*Y+TB 190 REM 200 REM ----- TITEL,ERKLAERUNG -------- 210 POKE 53280,0:POKE 53281,0:PRINTCHR$(30) 220 PRINTCHR$(147)CHR$(18)" POLYNOMANPASSUNG "CHR$(146) 230 PRINT 240 PRINT" DURCH EINE ANZAHL VON N PUNKTEN AUS" 250 PRINT"WERTEPAAREN LEGT DIESES PROGRAMM DAS AM" 260 PRINT"BESTEN ANGEPASSTE POLYNOM DER FORM" 270 PRINT"Y=A0+A1*X+A2*X^2+A3*X^3+... . DER GRAD" 275 PRINT"DES POLYNOMS IST FREI WAEHLBAR. DER" 277 PRINT"KORRELATIONSKOEFFIZIENT R UND DIE" 280 PRINT"STANDARDABWEICHUNG S WERDEN ANGEGEBEN" 290 PRINT"UND SIE KOENNEN BELIEBIGE Y-WERTE" 300 PRINT"AUS EINGEGEBENEN X-WERTEN BERECHNEN.":PRINT 310 PRINT" EIN SCATTERDIAGRAMM UND DIE ERMITTELTE" 320 PRINT"KURVE WERDEN GEZEICHNET. AUF DIESE" 330 PRINT"WEISE KANN DIE QUALITAET DER ANPASSUNG" 340 PRINT"EINGESCHAETZT WERDEN.":PRINT 350 PRINT" SOGENANNTE AUSREISSER-WERTE SOLLTEN" 360 PRINT"VOR EINER GENAUEREN BERECHNUNG NOCH" 370 PRINT"ENTFERNT WERDEN.":PRINT:PRINT 380 PRINTCHR$(18)"TASTE DRUECKEN!"CHR$(146) 390 GET A$:IF A$="" THEN 390 400 REM ----- HAUPTMENUE -------------- 410 PRINTCHR$(147):PRINT:PRINT:PRINT:PRINT 420 PRINTTAB(4)"WERTE VON HAND EINGEBEN.......1":PRINT 430 PRINTTAB(4)"WERTE AUS DATEI LESEN.........2":PRINT 440 PRINTTAB(4)"GRAFIK ZEIGEN.................3":PRINT 450 PRINTTAB(4)"TEXTMODUS EINSCHALTEN.........4":PRINT 460 PRINTTAB(4)"POLYNOMFUNKTION BERECHNEN.....5":PRINT 470 PRINTTAB(4)"WERTE BERECHNEN...............6":PRINT 480 PRINTTAB(4)"PROGRAMMENDE..................7":PRINT:PRINT 490 PRINTTAB(10)CHR$(18)"BITTE WAEHLEN SIE!"CHR$(146) 500 GET A$:IF VAL(A$)<1 OR VAL(A$)>7 THEN 500 510 PRINTCHR$(147):IF VAL(A$)=7 THEN END 520 ON VAL(A$) GOSUB 1000,2000,3000,4000,5000,6000 530 GOTO 410 540 REM ----- ENDE HAUPTPROGRAMM ------ 1000 REM ----- WERTE VON HAND --------- 1005 GOSUB 4000:REM TEXTMODUS 1010 IF W=1 THEN PRINT"WERTE SCHON VORHANDEN!":FOR I=0 TO 500:NEXT I:RETURN 1020 W=1 1030 PRINT"WIEVIELE WERTE WERDEN VERWENDET ?":INPUTN:PRINT 1040 DIM W(1,N) 1043 A=FRE(0)-2000:REM FREIER SPEICHERPLATZ C64 1045 REM A=FRE(1)-2000 1047 G=FNG(N):REM MAXIMALER POLYNOMGRAD 1050 PRINT"BITTE WERTEPAARE EINGEBEN!":PRINT 1060 FOR I=1 TO N 1070 PRINTI,"X=";:INPUTW(0,I):PRINTCHR$(145),,"Y=";:INPUTW(1,I):PRINT 1080 GOSUB 1300:REM ZWISCHENWERTE BERECHNEN 1090 NEXT I 1100 PRINTCHR$(147):PRINT:PRINT"SOLLEN DIE WERTE GESPEICHERT WERDEN?" 1110 GET A$:IF A$<>"J" AND A$<>"N" THEN 1110 1120 IF A$="N" THEN 1190 1130 PRINT:PRINT"NAME DER DATEI (11 ZEICHEN)";:INPUT B$ 1140 B$=LEFT$(B$,11)+".DAT"+",S,W" 1150 OPEN 1,8,2,B$ 1160 PRINT#1,N 1170 FOR I=1 TO N:PRINT#1,W(0,I):PRINT#1,W(1,I):NEXT I 1180 CLOSE 1 1190 GOSUB 1500:REM SCATTERDIAGRAMM ZEICHNEN 1200 RETURN 1300 REM --- ZWISCHENWERTE BERECHNEN -- 1360 IF W(0,I)>MX THEN MX=W(0,I) 1370 IF W(0,I)MY THEN MY=W(1,I) 1390 IF W(1,I)2 THEN 2100 2110 IF VAL(A$)=2 THEN W=0:RETURN 2120 PRINT:PRINT"WIE HEISST DENN DIE DATEI (ENDUNG .DAT)" 2130 INPUT B$ 2140 B$=B$+",S,R" 2150 OPEN1,8,2,B$ 2160 INPUT#1,N 2170 DIM W(1,N) 2173 A=FRE(0)-2000:REM FREIER SPEICHERPLATZ C64 2175 REM A=FRE(1)-2000 2177 G=FNG(N):REM MAXIMALER POLYNOMGRAD 2180 FOR I=1 TO N 2190 INPUT#1,W(0,I):INPUT#1,W(1,I) 2200 GOSUB 1300:REM ZWISCHENWERTE BERECHNEN 2210 NEXT I 2220 CLOSE 1 2230 GOSUB 1500:REM SCATTERDIAGRAMM 2240 RETURN 3000 REM ----- GRAFIK ZEIGEN ---------- 3010 IF W=0 THEN PRINT"DA FEHLEN NOCH DIE WERTE!":FOR I=0 TO 500:NEXT I:RETURN 3020 SYS 49152:SYS 49202,6,0:REM GRAFIK EIN 3021 REM GRAPHIC1:RETURN 3030 GET A$:IF VAL(A$)<>4 THEN 3020 3040 GOTO 4010:REM TEXTMODUS EIN 4000 REM ----- TEXTMODUS EIN ---------- 4010 SYS 49242:REM TEXTMODUS EIN 4011 REM IF PEEK(238)=79 THEN GRAPHIC5:ELSE GRAPHIC0 4020 RETURN 5000 REM ---- POLYNOM-BERECHNUNG ---------------------- 5002 GOSUB 4000:REM TEXTMODUS 5004 IF W=0 THEN PRINT"DA FEHLEN DIE WERTE!":FOR I=0 TO 500:NEXT I:RETURN 5010 PRINTCHR$(147)CHR$(17)CHR$(17)"WELCHEN GRAD SOLL DAS POLYNOM HABEN ?" 5020 PRINT:PRINT"MAXIMAL ERLAUBT IST EIN POLYNOM ":PRINT,G".GRADES ." 5030 PRINT:PRINT"BEI OVERFLOW-ERROR IST DER":PRINT"WIEDEREINSTIEG INS PROGRAMM" 5040 PRINT"MOEGLICH MIT 'GOTO 400' !" 5050 PRINT:INPUT"POLYNOMGRAD=";G2:IFG2>GTHEN5020 5060 FORI=1TOG2+2:T(I)=0:A(I)=0:A(ABS(2*I-3))=0:FORK=1TOG+1:R(K,I)=0:NEXTK:NEXTI 5070 A(1)=N:ZZ=0:M=0:S=0:HH=0:Q=0:P=0:A0=0 5080 FORI=1TON:FORL=2TO2*G2+1:A(L)=A(L)+W(0,I)^(L-1):NEXTL 5090 FORK=1TOG2+1:R(K,G2+2)=T(K)+W(1,I)*W(0,I)^(K-1) 5100 T(K)=T(K)+W(1,I)*W(0,I)^(K-1):NEXTK:T(G2+2)=T(G2+2)+W(1,I)^2:NEXTI 5110 FORI=1TOG2+1:FORK=1TOG2+1:R(I,K)=A(I+K-1):NEXTK:NEXTI 5120 FORI=1TOG2+1:FORK=ITOG2+1:IFR(K,I)<>0THEN5150 5130 GOSUB 4000:REM TEXTMODUS 5140 PRINT"KEINE EINDEUTIGE LOESUNG":RETURN 5150 FORL=1TOG2+2:S=R(I,L):R(I,L)=R(K,L):R(K,L)=S:NEXTL 5160 M=1/R(I,I):FORL=1TOG2+2:R(I,L)=M*R(I,L):NEXTL 5170 FORK=1TOG2+1:IFK=ITHEN5190 5180 M=-R(K,I):FORL=1TOG2+2:R(K,L)=R(K,L)+M*R(I,L):NEXTL 5190 NEXTK:NEXTI:A0=1:PRINTCHR$(147) 5200 P=0:FORI=2TOG2+1:P=P+R(I,G2+2)*(T(I)-A(I)*T(1)/N):NEXTI 5210 Q=T(G2+2)-T(1)^2/N:ZZ=Q-P:B=N-G2-1:HH=P/Q:IFB=0THENB=1E-23 5215 A0=1:GOSUB 4000:PRINTCHR$(147) 5220 PRINT"DAS POLYNOM "G2".GRADES IST:":PRINT:PRINTTAB(5)"Y=A0+A1*X+A2*X^2+..." 5230 PRINT:PRINTTAB(3)"KONSTANTE A0="R(1,G2+2):FORI=1TOG2 5240 PRINTTAB(3)"KOEFFIZIENT A"I"="R(I+1,G2+2):NEXTI:PRINT 5250 PRINTTAB(3)"KORRELATIONSKOEFFIZIENT=":PRINT,HH 5260 PRINT:PRINTTAB(3)"STANDARDABWEICHUNG=":PRINT,SQR(ABS(ZZ/B)) 5270 PRINT:PRINTTAB(3)"GRAFIK...TASTE DRUECKEN ! (_ = MENUE)" 5280 GETA$:IF A$=""THEN 5280 5290 IF A$="_" THEN RETURN 5300 R=1:SYS 49152:SYS 49202,6,0:REM GRAFIK EIN 5301 REM GOSUB 3000 5310 FOR I=LX TO MX STEP (MX-LX)/100 5320 P=R(1,G2+2):GOSUB 7010:REM FUNKTIONSWERT BERECHNEN 5330 X1=FNX(I):Y1=FNY(P):IF Y1<0 THEN 5350 5340 SYS 49266 X1,Y1,1:REM PUNKT ZEICHNEN 5341 REM DRAW 1,X1,Y1 5350 NEXT I 5360 GET A$:IF A$ ="" THEN 5360 5370 IF A$="_" THEN GOSUB 4000:RETURN 5380 IF R=1 THEN R=0:GOSUB 4000:GOTO5360 5390 IF R=0 THEN R=1:SYS 49152:SYS 49202,6,0 5391 REM IF R=0 THEN R=1:GOSUB 3000 5400 GOTO 5360 6000 REM ------ WERTE BERECHNEN ---------- 6010 GOSUB 4000:REM TEXTMODUS 6020 IF A0=0 AND W=0 THEN PRINT"BITTE GEBEN SIE ZUERST WERTE EIN UND" 6030 IF A0=0 THEN PRINT"BITTE DIE KURVE BERECHNEN!":FOR I=0 TO 500:NEXT I:RETURN 6040 PRINT:PRINT" AUF DER BASIS DER REGRESSIONSKURVE" 6050 PRINT"KOENNEN BELIEBIGE WERTE BERECHNET WERDEN" 6060 PRINT:PRINT" ZURUECK ZUM MENUE KOMMEN SIE DURCH _":PRINT 6070 INPUT"WERT X = ";A$ 6080 IF A$ ="_" THEN RETURN 6090 I=VAL(A$) 6100 P=R(1,G2+2):GOSUB7010 6110 PRINTCHR$(145),,"Y = "P 6120 GOTO 6060 7000 REM ----- POLYNOMWERT BERECHNEN ----- 7010 FORJ=1TOG2:P=P+R(J+1,G2+2)*I^J:NEXTJ:RETURN