Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Решение математических задач.pdf
Скачиваний:
28
Добавлен:
13.02.2015
Размер:
858.1 Кб
Скачать

2.5. Аппроксимация функции

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

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

некоторой наблюдаемой величины y. Нужно подобрать функцию y=f(x), чтобы она по возможности наиболее точно отражала зависимость

измеряемой величины y от параметров (координат) точек наблюдения или измерения.

Таким образом, задача нахождения эмпирических формул состоит из двух этапов:

1.Определение общего вида функции f(x) с точностью до постоянных коэффициентов, входящих в нее.

2.Подбор этих неизвестных коэффициентов таким образом, чтобы в точках наблюдений подобранная функция наилучшим образом отвечала данным измерений.

Аппроксимацию табличных данных рассмотрим на примере использования для этих целей полинома. На первом этапе решения задачи аппроксимации в качестве функции выберем алгебраический полином

степени m, имеющий следующий общий вид:

P(x) = a0 + a1 x + a2 x2 + ... + am xm

(2.12)

Определение коэффициентов полинома осуществляется, исходя из

следующего условия. Ищется значение величины

, которая определяется по

следующей формуле:

 

n

(2.13)

= å(P(xi ) − yi )2 ,

i =1

 

где координаты точек наблюдения – x1, x2,…,xn, а значения величины y в этих же точках – y1,y2,…,yn.

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

Оптимальным способом аппроксимации будет подбор таких значений

коэффициентов a0,a1,…am , при которых величина будет минимальной. Минимум суммы квадратов отклонений будет достигнут, если ее частные

производные по параметрам a0,a1,…am будут равны нулю:

= 0 ;

 

= 0

; …;

 

= 0 .

(2.14)

a

a

1

a

 

0

 

 

 

 

 

m

 

52

Частные производные по параметрам a0,a1,…an будут следующими:

¶D

= 2 × Σn ((a0 + a1xi + a2 xi2 + ...+ am xm ) -

yi );

a0

i=1

 

¶D

= 2 × Σn ((a0 + a1xi + a2 xi2 + ...+ am xim ) -

yi )xi ;

a1

i= 1

 

………………………………………………………………………………;

¶D

= 2× Σn ((a0 + a1xi + a2 xi2 + ...+ am xim ) - yi ))xim. (2.15)

am

i= 1

Следовательно,

n

å(P(xi ) − yi ) = 0;

i =1

n

å(P(xi ) − yi )xi = 0;

i=1

…………………………………………………….;

n

.

(2.16)

å(P(xi ) − yi )xim = 0

i=1

 

 

Тогда система уравнений после преобразований записывается следующим образом:

X0 × a0 + X1 × a1 + X 2 × a2 + ...+ Xm × am = Y0 ;

X1 × a0 + X 2 × a1 + X 3 × a2 + ...+ Xm+1 × am = Y1;

…………………………………………………………..;

Xm × a0 + Xm+1 × a1 + Xm+2 × a2 + ...+ X 2m × am = Ym. (2.17)

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

Рассмотрим случай аппроксимации данных с помощью полинома второй степени P(x)=a0+a1x+a2x2. Для решения системы можно использовать один из стандартных методов, например, метод Гаусса, который подробно описан в разделе 1.3 данного учебного пособия. Ниже приводится текст программы mnk, в которой по заданным пользователем

исходным данным вычисляются коэффициенты искомой функции.

53

program mnk;

 

 

 

 

uses crt;

 

 

 

 

const m=2; n=5;

 

 

 

 

{m - степень требуемого полинома; n - число точек

наблюдения}

 

 

 

 

type v=array[1..m+1] of real;

 

 

 

mt=array[1..m+1,1..m+1] of real;

 

var i,j,k:integer;

 

 

 

 

 

p:real;

 

 

 

 

функции}

x:array[1..n]

of

real;

{массив

параметров

 

y:array[1..n]

of

real;

{массив

значений

функции}

xl:array[0..2*m] of real;{массив значений X} yl:array[0..m] of real; {массив значений Y} b,c:v;

a:mt;

procedure metgauss (a:mt; b:v; var r:v);

{решение системы линейных уравнений методом Гаусса c выбором главного элемента в столбце}

var i,j,k,nom:integer; max,t,u:real;

begin

for k:=1 to 3 do begin max:=abs(a[k,k]); nom:=k;

for i:=k+1 to 3 do begin

if abs(a[i,k])>max then begin

max:=a[i,k];

nom:=i

end;

end;if nom<>k then begin

t:=b[k];

b[k]:=b[nom];

b[nom]:=t;

for j:= 1 to 3 do begin

t:=a[k,j];

a[k,j]:=a[nom,j];

a[nom,j]:=t

54

end; end; t:=a[k,k]; b[k]:=b[k]/t;

for j:=k+1 to 3 do a[k,j]:=a[k,j]/t; for i:=k+1 to 3 do begin

t:=a[i,k];

for j:=k+1 to 3 do a[i,j]:=a[i,j]-t*a[k,j]; b[i]:=b[i]-t*b[k]

end;

end;

for i:=3 downto 1 do begin

u:=b[i];

for j:=3 downto 2 do u:=u-a[i,j]*r[j]; r[i]:=u;

end;end; begin clrscr;

{ввод исходных данных} for i:=1 to n do begin

writeln('Введите для точки ',i,' параметр и значение функции');

readln(x[i],y[i]);

end;

{вычисление значений X} for k:=0 to 2*m do xl[k]:=0;

for i:=1 to n do begin

p:=1;

k:=0;

while k<=2*m do begin xl[k]:=xl[k]+p; p:=p*x[i]; k:=k+1

end;

end;

55

{вычисление значений Y} for k:=0 to m do yl[k]:=0;

for i:=1 to n do begin p:=y[i]; k:=0;

while k<=m do begin yl[k]:=yl[k]+p; p:=p*x[i]; k:=k+1

end;

end;

{формирование матрицы} for i:=1 to m+1 do

for j:=1 to m+1 do a[i,j]:=xl[i+j-2];

for i:=1 to m+1 do b[i]:=yl[i-1];

{обращение к процедуре metgauss для определения коэфффицентов полинома}

metgauss(a,b,c); writeln('коэффициенты полинома'); for k:=1 to m+1 do

write(c[k]:10:3);

readln;

end.

В данной программе в качестве аппроксимирующей функции

используется полином второй степени. Степень полинома m

и количество

точек наблюдения n задаются в качестве констант (в программе количество точек принято равным 5, но его можно изменять, изменяя значение n).

Параметры и значения функции для каждой точки вводятся пользователем с клавиатуры. Затем на основе введенных данных формируется система

линейных уравнений. Решение сформированной системы осуществляется с помощью процедуры metgauss. Данная процедура решает эту систему

методом Гаусса с выбором главного элемента в столбце. Полученный в результате решения уравнений вектор c содержит искомые коэффициенты

полинома. Экран с результатами работы программы mnk показан на рис. 2.9.

56