Полином Гира (экстраполяция методом Гира) — страница 2

  • Просмотров 3140
  • Скачиваний 299
  • Размер файла 3
    Кб

_Real); VAR wp, wn : _Real; I : _INTEGER; {счетчик} BEGIN Write('Начальный узел ............ = '); ReadLn(wn); Write('Шаг изменения узла ........ = '); ReadLn(dw); Write('Количество узлов (< ', Max_kol:2, ') ... = '); ReadLn(n); Write('Погрешность eps .............. = '); ReadLn(eps_pol); WriteLn; {ввод значений функции в узлах} WriteLn(' Введите значение функции в узлах:'); wp:= wn; FOR I:= 1 TO n DO begin Xpol[I]:= wp; Write('Y(', wp:Tochka, ')= '); ReadLn(Ypol[I]); wp:= wp + dw; end; {задание (n+1)-узла} Xpol[n+1]:= wp; END; {---------------------------< Конец ПП VVOD_TABL >---------------------------} {Расчет

коэффициентов полинома} PROCEDURE Kff_pol(X: _Mas; H: _Real; n, m: _INTEGER; Var V: _Mas); TYPE _Matric = array [1..Max_kol] of _Mas; _Vector = array [1..Max_kol] of Byte; VAR G : _Matric; P : _Vector; I, J : _INTEGER; {счетчики} {----------------------------------------------------------------------------} {рашение матричной системы уравнений, методом "LU-разложений"} PROCEDURE GVP(G: _Matric; P: _Vector; m: _INTEGER; Var V: _Mas); VAR K, I, J : _INTEGER; {счетчики} L, U : _Matric; {вспомогательные матрицы} SOS : _Mas; {вспомогательный вектор} alf, S : _Real; {вспомогательные переменные} BEGIN {обнуление

элементов вспомогательных матриц L и U} FOR I:= 1 TO m DO For J:= 1 To m Do begin L[I, J]:= 0; { L[I, J] = 0, где I=1..m, J=1..m } U[I, J]:= 0; { U[I, J] = 0, где I=1..m, J=1..m } end; {разложение матрицы G на матрицу L и U} FOR K:= 1 TO m DO begin {формирование матрицы L} For I:= K To m Do begin {накопление суммы элементов в S} S:= 0; for J:= 1 to (K - 1) do begin { k-1 } alf:= L[I, J] * U[J, K]; { S = E (L[I, J] * U[J, K]), } S:= S + alf; { j=1 } end; L[I, K]:= G[I, K] - S; { L[I, K] = G[I, K] - S, где k=1..m, i=k..m } end; {формирование матрицы U} U[K, K]:= 1; For I:= (K + 1) To m Do begin {накопление суммы элементов в S}

S:= 0; for J:= 1 to (K - 1) do begin { k-1 } alf:= L[K, J] * U[J, I]; { S = E (L[K, J] * U[J, I]), } S:= S + alf; { j=1 } end; { G[I, K] - S } alf:= G[I, K] - S; { U[K, I] = -------------, где k=1..m, i=(k+1)..m } U[K, I]:= alf/L[K, K]; { L[K, K] } end; end; {вычисление вспомогательного вектора SOS} FOR K:= 1 TO m DO begin {накопление суммы элементов в S} S:= 0; For I:= 1 To (K - 1) Do begin { k-1 } alf:= L[K, I] * SOS[I]; { S = E (L[K, I] * SOS[I]), } S:= S + alf; { i=1 } end; { P[K] - S } alf:= P[K] - S; { SOS[K] = ----------, где k=1..m } SOS[K]:= alf/L[K, K]; { L[K, K] } end; {вычисление вектора V} FOR K:= m DOWNTO 1 DO begin {накопление суммы элементов в S} S:= 0; For

I:= (K + 1) To m Do begin { m } alf:= U[K, I] * V[I]; { S = E (U[K, I] * V[I]), } S:= S + alf; { i=k+1 } end; V[K]:= SOS[K] - S; { V[K] = SOS[K] - S, где k=1..m } end; END; {------------------------------< конец ПП GVP >------------------------------} BEGIN {формирование матрицы G} FOR I:= 1 TO m DO { | X[n+1] - X[n - (m-1)] | (m-1) } For J:= 1 To m Do { G[I, J] = |-----------------------| } G[I, J]:= exp( (I-1)*Ln((X[n+1] - X[n-(J-1)]) / H) ); { | H | } {формирование вектора P = [1, 0, 0, 0, ..., 0]} P[1]:= 1; FOR I:= 2 TO m DO P[I]:= 0; {обращение к ПП GVP} GVP(G, P, m, V); END; {---------------------------< Конец ПП Kff_pol >-----------------------------} {Расчет полинома} FUNCTION

F_pol(V, Y: _Mas; n, m: _INTEGER): _Real; VAR I: _INTEGER; {счетчик} S: _Real; {сумматор} BEGIN S:= 0; FOR I:= 1 TO m DO S:= S + V[I]*Y[n+1-I]; F_pol:= S; END; {-----------------------------< Конец ПП F_pol >-----------------------------} {Вывод значения функции в (n+1) узле} PROCEDURE VIVOD1(Xpol, Ypol, eps_tek: _Real; n, m: _INTEGER); BEGIN WriteLn; WriteLn; WriteLn('Значение функции в (n+1) узле: Y(', Xpol:Tochka, ')=', Ypol:Tochka); WriteLn('Количество используемых узлов', m:3, ' из', n:3); WriteLn('Погрешность расчета =', eps_tek:Tochka); END; {-----------------------------< Конец ПП VIVOD1 >----------------------------} {Вывод