Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Интерполяция функции (http://www.tehnari.ru/f43/t50698/)

DimX 20.04.2011 14:03

Интерполяция функции
 
Доброго времени суток!
Помогите пожалуйста составить программу интерполяции табличной заданной функции по методу Лангранжа при произвольном расположении узлов. Необходимо выполнить интерполяцию функции, заданной значениями X[i],Y[i], согласно таблице:

i x[i] y[i]
0 1.500 0.8862268255
1 1.510 0.8865716850
2 1.525 0.8872930231
3 1.540 0.8881746586
4 1.545 0.8896391990
5 1.580 0.8924282141

Расчитать у(1,55).:tehnari_ru_117:
Заранее благодарен.

DimX 20.04.2011 14:14

Язык-Паскаль

DimX 20.04.2011 18:12

можно пожалуйста хоть какие идеи?...:tehnari_ru_657:

DimX 21.04.2011 10:37

upupup

DimX 23.04.2011 23:44

Если кому нужно:
program Interp;
{Вычисление значения многочлена Лагранжа для функции,
определенной таблично}
uses Crt;
const
m=9;
type
Vector=array [0..m] of real;

var
X,Y: vector; {узлы интерполяции}
i,j,N: integer;
p,L,Xe,h: real;


function step: real;
{определение оптимального шага интерполяции}
var
i: integer;
min: real;
begin
min:=Abs(X[1]-X[0]);
for i:=1 to N-1 do
begin
if Abs(X[i+1]-X[i])<min then min:= Abs(X[i+1]-X[i])
end;
step:=min;
end;

{основное тело программы}
begin
TextBackground(7);
TextColor(0);
ClrScr; {очистка экрана};
Writeln(' ************************************************** *****');
Writeln(' * Программа интерполяции функции многочленом Лагранжа *');
Writeln(' ************************************************** *****');
Write('Введите порядок многочлена Лагранжа N (>0): '); Read(N);
WriteLn('Введите пары значений Xi,Yi (i=0,...,N): ');
for i:=0 to N do
begin
Write('X[',i,']= '); Read(X[i]);
Write('Y[',i,']= '); Read(Y[i]);
end;
h:=step/2; {Вычисление шага интерполяции}
WriteLn('Шаг интерполяции h=', h:0:7);
WriteLn('Нажмите любую клавишу для вывода интерполяционной таблицы...');
readkey;
ClrScr;
WriteLn(' Данные интерполяции:');
WriteLn(' X Y ');
WriteLn(' ---------------------------');
Xe:=X[0];
while Xe<=(X[N]+h) do
begin
L:=0;
for i:=0 to N do
begin
p:=1;
for j:=0 to N do if j<>i then p:=p*(Xe-X[j])/(X[i]-X[j]);
L:=L+y[i]*p;
end;
WriteLn(' ':10,Xe:0:3,' ':4,L:12:10);
Xe:=Xe+h;
end;
WriteLn(' Шаг интерполяции h=', h:0:7);
WriteLn;
WriteLn('Нажмите любую клавишу для выхода из программы...');
readkey;
end.


Часовой пояс GMT +4, время: 12:05.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.