A large commit.
[pdp8.git] / sw / src / pascal / REGRES.V1
CommitLineData
81e70d48
PH
1PROGRAM AUSGLEICHSPOLYNOM(INPUT,OUTPUT);
2
3 CONST NMAX=15; NRMAX=16; MMAX=50;
4
5 VAR M, (* ANZAHL DER PUNKTE *)
6 N, (* GRAD DES POLYNOMS *)
7 NR, (* NR = N + 1 *)
8 I,J,K: INTEGER;
9 X,Y,U,W,S,SIGMA,BETA,SUM: REAL;
10 A: ARRAY[0..MMAX,0..NRMAX] OF REAL;
11 D,C: ARRAY[0..NMAX] OF REAL;
12
13BEGIN READ(M,N); NR := N + 1;
14 WRITELN;
15 WRITELN("A U S G L E I C H S P O L Y N O M");
16 WRITELN;
17(*
18 EINLESEN DER PUNKTE, ANGABEPROTOKOLL.
19 BELEGUNG DER MATRIX A (0<=I<M, 0<=J<=N) WIE FOLGT:
20 A[I,J] := X[I]^J,
21 RECHTE SEITEN A[I,N+1] := Y[I].
22*)
23 FOR I := 0 TO M-1 (* FUER ALLE PUNKTE *) DO
24 BEGIN
25 READ(X,Y); WRITELN("P",I:2,X:8:2," ,",Y:8:2);
26 U := 1;
27 FOR J := 0 TO N DO
28 BEGIN
29 A[I,J] := U;
30 U := U*X
31 END;
32 A[I,NR] := Y
33 END;
34(*
35 REDUKTION DER GLEICHUNGSMATRIX AUF DREIECKSFORM
36 NACH H O U S E H O L D E R , SPEICHERUNG IN
37 A[I,J] ( 0<=I<=N, I<=J<=N ),
38 D[J] ENTHALTEN DIE ELEMENTE A[J,J] DER HAUPTDIAGONALE.
39 TRANSFORMIERTE RECHTE SEITEN IN A[I,N+1].
40*)
41 FOR J := 0 TO N DO
42 BEGIN
43 SIGMA := 0;
44 FOR I := J TO M-1 DO SIGMA := SIGMA + SQR(A[I,J]);
45 IF A[J,J]<0 THEN S := SQRT(SIGMA)
46 ELSE S := -SQRT(SIGMA);
47 D[J] := S;
48 BETA := 1/(S*A[J,J]-SIGMA);
49 A[J,J] := A[J,J]-S;
50 FOR K := J+1 TO NR DO
51 BEGIN
52 SUM := 0;
53 FOR I := J TO M-1 DO SUM := SUM + A[I,J]*A[I,K];
54 SUM := BETA*SUM;
55 FOR I := J TO M-1 DO A[I,K] := A[I,K] + A[I,J]*SUM
56 END
57 END;
58(*
59 LOESUNG DES GESTAFFELTEN GLEICHUNGSSYSTEMS
60 LIEFERT DIE KOEFFIZIENTEN DES AUSGLEICHSPOLYNOMS
61*)
62 FOR I := N DOWNTO 0 DO
63 BEGIN W := A[I,NR];
64 FOR J := N DOWNTO I+1 DO W := W - C[J]*A[I,J];
65 C[I] := W/D[I]
66 END;
67(*
68 AUSGABE DER KOEFFIZIENTEN
69*)
70 WRITELN;
71 WRITELN("DIE KOEFFIZIENTEN SIND:");
72 FOR I := 0 TO N DO WRITELN("C",I:1," =",C[I])
73END.