Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Chislennye_metody_obedin.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

5. Математическая обработка данных.

На практике часто приходится иметь дело с данными, полученными в результате измерений, наблюдений. Они, обычно, представлены в виде табличных зависимостей , где - значения результатов опыта, полученные для заданных величин . В этих случаях, обычно, требуется найти аналитическую функцию , которая наиболее точно отражает зависимость результатов измерений, и, с ее помощью, можно найти значение для любой точки .

Существует два подхода к решению поставленной задачи: а) функция должна точно проходить через узлы ( ) - интерполяция и б) функция проходит с наименьшим отклонением от узлов и наиболее проста - аппроксимация.

5.1. Интерполяция.

Задача интерполяции математически формулируется так: пусть на отрезке заданы точки со своими значениями . Требуется найти функцию , которая в узлах интерполяции принимает значения т.е. . Решение этой задачи может быть выполнено двумя способами: локальной или полной интерполяцией.

5.1.1. Локальная интерполяция заключается в том, чтобы использовать только близлежащие точки. Например, если значение лежит между и то значение функции может быть найдено с помощью линейной интерполяции по формуле:

5.1.1.1. Блок-схема.

5.1.1.2. Программа.

procedure inlocal(v: real);

var

j: integer;

begin

for j:=1 to n-1 do

begin

if (v>x[j])and(v<x[j+1]) then

break;

end;

writeln('X=',v,' Y=',y[j]+(y[j+1]-y[j])*(v-x[j])/(x[j+1]-x[j]));

end;

5.1.2. Квадратичная интерполяция.

Более точный результат можно получить, если использовать информацию о трех близлежащих точках (квадратичная интерполяция). В этом случае можно однозначно определить коэффициенты параболы для любого отрезка , которому принадлежит . Решение системы линейных уравнений вида:

позволяет определить неизвестные коэффициенты , , и значение .

5.1.2.1. Блок-схема.

5.1.2.2. Программа.

procedure square(v: real);

var

a: array[1..3,1..3] of real;

b: array[1..3] of real;

i,j,kk: integer;

aa,d,c,p,r,t,m1,m2,m3,m4: real;

tmp: string;

bool: boolean;

begin

i:=1;

bool:=true;

while (i<n+1)and(bool=true) do

begin

if v<x[i] then

begin

kk:=i-2;

bool:=false;

end;

i:=i+1;

end;

if bool=false then

begin

for j:=1 to 3 do

begin

a[j,1]:=sqr(x[kk]); a[j,2]:=x[kk];

a[j,3]:=1; b[j]:=y[kk];

kk:=kk+1;

end;

m1:=a[2,1]*a[1,3]-a[1,1]*a[2,3];

m2:=a[1,2]*a[3,1]-a[3,2]*a[1,1];

m3:=a[2,1]*a[1,2]-a[1,1]*a[2,2];

m4:=a[1,3]*a[3,1]-a[3,3]*a[1,1];

p:=m3*m4-m1*m2;

r:=a[3,1]*b[1]-a[1,1]*b[3];

t:=a[2,1]*b[1]-a[1,1]*b[2];

c:=(r*m3-t*m2)/p;

d:=(t*m4-r*m1)/p;

aa:=(b[1]-a[1,2]*d-a[1,3]*c)/a[1,1];

str(aa*v*v+d*v+c,tmp);

end

else

tmp:='Chislo ne prin. posledovatelnoti..';

writeln('X=',v,' Y=',tmp);

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]