- •Учебное пособие
- •Введение
- •Глава 1. Прикладные математические задачи
- •1.1. Вычисление математических функций
- •1.2. Создание программного модуля, объединяющего математические функции
- •1.3. Решение системы линейных алгебраических уравнений
- •1.4. Построение таблицы функции
- •Глава 2. Задачи вычислительной математики
- •2.1. Решение нелинейного уравнения
- •2.2. Численное дифференцирование
- •2.3. Численное интегрирование
- •2.4. Решение дифференциального уравнения
- •2.5. Аппроксимация функции
- •2.6. Интерполяция функции
- •Глава 3. Задачи математической статистики
- •3.1. Вычисление основных статистических величин
- •3.2. Создание программного статистического модуля
- •4. Построение графиков функций и создание диаграмм
- •4.1. Инициализация графического режима
- •4.2. Использование графических примитивов
- •4.3. Создание двумерной диаграммы
- •4.4. Построение графика функции
- •4.5. Создание трехмерной диаграммы
- •Библиографический список
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