Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | PROGRAM 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 | ||
13 | BEGIN 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]) | |
73 | END. |