Аппроксимация экспериментальных зависимостей

Задание 1
 
Данные давления водорода Н2 на линии насыщенияприведены в таблице. Сделать аппроксимацию экспериментальных данных в видестепенной функции и многочлена первой степени. Произвести сравнительный анализошибки аппроксимации полученной двумя функциями.
Таблица 1
Ts,0К 32 33 34 35 36 37 38 39 Pмм рт. ст. 360,3 509,5 699,2 935,3 1223.7 1570,5 1981,8 2463,8
Аппроксимация экспериментальных зависимостей методом наименьшихквадратов. Теоретические сведения
 
Пусть, в результате эксперимента получена зависимость.
Необходимо найти аналитическую формулу f= />, которая аппроксимируетэкспериментальную (табличную) зависимость.
Выберем зависимость />в виде полинома 2 – й степени,т.е.
/> (1)
 
В выражении (1) коэффициенты />, />, /> подлежат определению, причем этикоэффициенты должны быть подобраны таким образом, чтобы зависимость />наилучшимобразом приближалась к экспериментальной зависимости. Пусть отклонение /> – различиемежду табличным значением /> в точке /> и значением аналитической функциив этой же самой точке, т.е.:

/> (2)
В соответствии с методом наименьших квадратов (МНК) наилучшимикоэффициентами зависимости (1) будут такие, для которых сумма квадратовотклонений будет минимальной.
/> (3)
Используя необходимые условия существования экстремума дляфункций нескольких переменных />, находим уравнение дляопределения коэффициентов зависимости (1).
/> /> /> (4)
Из условия (4) получим систему линейных алгебраическихуравнений:
/> (5)
Решив систему (5) найдем коэффициенты /> аппроксимирующейзависимости (1).
Эффективным методом решения системлинейных алгебраических уравнений является матричный метод. Сущность егосостоит в следующем.
Пусть А — матрицакоэффициентов системы уравнений, X—вектор неизвестных, В — вектор правых частей системы уравнений. Тогдарешение системы уравнений в матричной форме будет иметь вид:

Х = А -1 В.
 
Правило Крамера
 
Если ранг матрицы совместной системыравен числу ее неизвестных, то система является определенной. Если числонеизвестных системы совпадает с числом уравнений (m= n) и матрица системы невырожденная (det A≠ 0), то система имеетединственное решение, которое находится по правилу Крамера:
/>
В этих формулах ∆ = det А — определитель системы, а ∆k— определитель, полученный изопределителя системы заменой k-гoстолбца столбцомсвободных членов (k= 1, 2,…, n).
Решение системы трех линейных уравненийс тремя неизвестными можно выразить через определители:
/>, />, />
 
Информационное обеспечение
 
Зависимость давления P водорода Н2 при различныхтемпературах на линии насыщения приведены в таблице (1).
Для проведения анализа исходных данных с целью выбора видааппроксимирующего многочлена построим график функции, заданной в табл.1. Графикприведен на рис.1.
Графическое отображение точек экспериментальных данных
/>
Рис. 1. Экспериментальная зависимость P=f(T)
В результате анализаданных выберем в качестве аппроксимирующего многочлена параболу, заданнуюуравнением P2(x)=a0+a1x+a2x2.
Для определения коэффициентов a0, a1, a2запишем систему уравнений вида
/>
При составлении системы создадим вспомогательную таблицуданных (таблица 2).

/>
Используя данныетаблицы 2, систему уравнений (5) записываем в виде
/>
В результате решения системы методом Крамера получаемследующие значения определителей:
detA = 56448;
detA1 = 1435933397;
detA2 = -94279012,8;
detA3 = 1564382,4;
Вычислив определители, рассчитываем значения коэффициентов:
a0 = detA1/ detA;
a1= detA2/detA;
a2 = detA3/ detA;
a0= 25438,1625;
a1= -1670,19226;
a2= 27,71369048.

Таким образом, искомыйаппроксимирующий многочлен имеет вид:
/> (6)
Полученная аналитическая зависимость (6) обобщаетэкспериментальные данные табл.01.
Для оценки погрешности полученной зависимости составимтаблицу значений P. Для этого определим давление P по формуле (6). Результатывнесем в таблицу 2.
 
Таблица 2T 32 33 34 35 36 37 38 39 P 370,8291668 502,0267858 688,6518 930,7042 1228,1839 1581,091 1989,4256 2453,188
Для оценки точности параболической аппроксимации сравниваемзначения Р из табл.01 и табл.2. Модуль разности соответствующих значенийпредставляет DP-погрешностьаппроксимации, значения которой представлены в табл.3. В таблице приведенатакже относительная погрешность dР, равная отношению DР к Р.
 
Таблица 3Т 32 33 34 35 36 37 38 39 DР 10,529 7,4732 0,5482 4,59583 4,4839 10,591 7,625 10,6125 dP,% 2,8393578 1,4886087 1,5317 0,4938 0,36509 0,6699 0,38331 0,4326
Сравнительный анализ погрешностей показывает, что полученнаяаналитическая зависимость удовлетворительно обобщает исходные экспериментальныеданные.
Для интегральной оценки аппроксимации можно использоватьформулу:

/>
На рис. 2 приведены два графика, один из которых построен поданным аппроксимации (табл. 2), а второй — по исходным данным (табл.01).
/>
Сравнивая эти графики, можно также отметитьудовлетворительную сходимость теоретических и экспериментальных данных.
Выберем в качестве аппроксимирующего многочлена линейнуюфункцию.
Аппроксимируем данную табличную зависимость многочленомпервой степени P1(x)=a0+a1x
Для определения коэффициентов а0, а1необходимо составить систему уравнений
 /> 

Подставив данные таблицы в систему уравнений получим:
/>
Находим а0и а1 методом Крамера:
а0=-9343,52, а1 = 297,4798
Следовательно, искомый аппроксимирующий многочлен имеет вид
P= ─ 9342,52 + 297,4798T(7)
Формула (7) является аналитической зависимостью, обобщающейэкспериментальные данные табл. 01.
Для оценки линейной аппроксимации необходимо сравнитьзначения yi из табл. 4 со значениями,полученными по формуле (7) для всех точек (i=1, 2, …, 8). Результаты сравнения представлены в таблице5.
Таблица 5
/>

Проанализировав табл.5можно сделать вывод, формула (7) не является корректной аналитическойзависимостью, обобщающей экспериментальные данные табл. 01.
На рис.3 приведены график функции (7) и исходныеэкспериментальные данные. Сравнительный анализ показывает неудовлетворительнуюсходимость теоретических и экспериментальных данных.
/>
Рис.5.3. График линейного аппроксимирующего многочлена иисходные данные.
 
Текстпрограммы
#include
#include
#include
#include
#include
#definePATHTODRIVER «c:\egavga.bgi»
voidGrafikPolinom(float, float, float, float, float, float );//Функция//построенияграфикаполиномиальнойаппроксимацииэкспериментальныхданных
voidGrafikLinear(float,float,float,float,float);//Функцияпостроения
//графика линейнойаппроксимации экспериментальных данных
voidGRAPH_POINTS(float,float,float,float); //Функция выводит на экран точки //экспериментальных данных
int GRAPH_MODE(); //Функцияинициализации графического режима
voidGRID(float,float);// Функцияформирования координатной сетки
/*————————————————————————-*/
intmain()
{clrscr();
intn;
floattmpr,pwr;//текущие значения аргумента и функции
floatdiscret; //дискретностьизменения аргумента
floattn0, tn;//диапазон изменения аргумента tn0- min, tn- max
float pn; //pn-maxэкспериментальное значение функции
float *dp = new float[n]; //Массив значений ошибок аппроксимации
float *P = new float[n]; //Массив значений //полученный аналитическим способом
float INTG = 0; //переменная,используемая в выражении                    //интегральной оценки аппроксимации
floatA = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0;
floatdetA,i, detA1, detA2, detA3, A0,A2,A3;
intanswer;
Вводзначенийэкспериментальныхданных*/ cout
cin>>n;
cout
float *t = new float[n]; //Массив значений аргумента (в данном случае — температура)
float *p = new float[n]; //Массив значений функции исследуемого процесса for(i=0;i>t[i];}
cout>p[i];}
L:
cout\n” ;
cout\n”;
cout\n” ;
cout\n” ;
cout\n” ;
cout\n” ;
cin>>answer;
/* Графическоеотображение экспериментальных данных в виде точек зависимости P = f(t) накоординатной плоскости */
if(answer ==1)
{
intregimen = GRAPH_MODE();
if(regimen == 5)
{ tn0 = t[0]; tn =t[n-1];//tn-max экспериментальное значение температуры (аргумента) pn =p[n-1];//pn-max экспериментальное значение функции
GRID(tn,pn);
for(i= 0;i
{
tmpr=t[i];
pwr= p[i];
setbkcolor(1);
GRAPH_POINTS(tn,pn,tmpr,pwr );
} getch (); closegraph();// выход из графического режима
}
else
{cout
} gotoL;
}
/* Расчет функцииаппроксимации экспериментальных данных в виде полинома 2 — й степени */
if(answer==2) { for( i=0;i
cout
cout
cout
cout
cout
cout
cout
 for( i=0; i
goto L; }
/* Графическоеотображение, полученной зависимости P = f(t) в виде полинома 2 степени, накоординатной плоскости */
if(answer== 3) {
intregimen = GRAPH_MODE();
if(regimen == 5)
{ tn0 = t[0]; tn =t[n-1];//tn-max экспериментальное значение температуры (аргумента) pn =p[n-1];//pn-max экспериментальное значение функции
GRID(tn,pn);
setbkcolor(1);
GrafikPolinom(A0,A2, A3,tn0,tn,pn );
for(i= 0;i
{
tmpr=t[i];
pwr= p[i];
GRAPH_POINTS(tn,pn,tmpr,pwr );
} getch (); closegraph();// выход из графического режима
}
else
{cout
}
goto L;
}
/*————————————————————————-*//* Расчет линейной функции аппроксимации экспериментальных данных */ cout
Графическоеотображение, полученной зависимости P = f(t) в виде линейной функцииаппроксимации на, координатной плоскости */
if(answer==5)
{
intregimen = GRAPH_MODE();
if(regimen== 5)
{tn0 = t[0]; tn = t[n-1]; tn = t[n-1]; pn = p[n-1]; GRID(tn,pn);
setbkcolor(1);
GrafikLinear(B0,B1,tn0,tn,pn );
for(i=0;i
{tmpr= t[i]; pwr = p[i]; GRAPH_POINTS(tn,pn,tmpr,pwr);
} getch (); closegraph();// выход из графического режима
}
else
{cout
} goto L;
}
return 0;
}
* Функция вывода накоординатную плоскость графика функции 2-й степени */
voidGrafikPolinom(float A0, float A2, float A3,floattn0,float tn, float pn )
{
float x,dx; // аргументи его приращение
float xl,x2; //диапазон изменения аргумента
float y; // значениефункции
float mx,my; // масштабпо X и Y — кол-во точек экрана, соответствующих // единице по осям координат
int x0,y0; // началоосей координат
float px,py; //координаты точки графика на экране
x0= 50;
y0= 400;
mx= 630/(2*tn);
my= 470/(2*pn);
//осикоординат
line(10,y0,630,y0);
line(x0,10,×0,470);
//график
xl= tn0;
x2= tn;
dx= 0.01;
x= xl;
while( x
{
y=A3*x*x + A2*x+A0; // функция
px= x0 + x*mx;
py= y0 — y*my;
putpixel(px,py,WHITE);
x+= dx;
}}
intGRAPH_MODE()
{
intgrdriver = DETECT; // драйвер
intgrmode; // режим
interrorcode; // код ошибки
initgraph(&grdriver,&grmode, PATHTODRIVER);
errorcode= graphresult();
if (errorcode != grOk)// ошибка инициализации графического режима
{
printf(«ERROR:dont find driver or driver damaged \n», errorcode);
puts(«PRESS»);
getch();
return(-10);
}
else
{return(5);
}}
/*Функциявыводанакоординатнуюплоскостьграфикалинейнойфункции*/ void GrafikLinear(float B0, float B1,float tn0,float tn, float pn ) {
float x,dx; // аргументи его приращение
float xl,x2; //диапазон изменения аргумента
float y; // значениефункции
float mx,my; // масштабпо X и Y — кол-во точек экрана, соответствующих // единице по осям координат
int x0,y0; // началоосей координат
float px,py; //координаты точки графика на экране
x0= 50;
y0= 400;
mx= 630/(2*tn);
my= 470/(2*pn);
//осикоординат
line(10,y0,630,y0);
line(x0,10,×0,470);
//график
xl= tn0;
x2= tn;
dx= 0.01;
x= xl;
while( x
{
y = B1*x+B0; //линейная функция
px= x0 + x*mx;
py= y0 — y*my;
putpixel(px,py,WHITE);
x+= dx;
}}
/*Функциявыводаточекэкспериментальнойзависимостинаэкран*/ void GRAPH_POINTS(float tn,float pn,float tmpr,floatpwr )
{
float x; // аргумент
float y; // значениефункции
float mx,my; // масштабпо X и Y — кол-во точек экрана, соответствующее // единице по осям координат
int x0 = 50;
int y0 = 400;
mx = 630/(2*tn);//tn-max экспериментальное значение температуры (аргумента)
my = 470/(2*pn);//pn-max экспериментальное значение функции
y= y0 — pwr*my ;
x= x0 + tmpr*mx ;
setcolor(13);
circle(x,y,2);
}
/*ФункцияформированиякоординатнойсеткиирасчетамасштабапоX и Y*/ void GRID(float tn, float pn)
{
int x0,y0; //координаты начала координатных осей
int dx,dy; // шагкоординатной сетки (в пикселях)
int h,w; // высота иширина области вывода координатной сетки int x,y;
floatlx,ly; float dlx,dly; char st [8];
// метки линий сетки поX и Y
// шаг меток линийсетки по X и Y
// изображение меткилинии сетки
x0 = 50; y0 = 400; //оси начинаются в точке (50,400)
dx = 40; dy = 40; //шаг координатной сетки 40 пикселей
dlx =1; // шаг метокоси X метками будут: 1, 2, 3 …
dly =1; // шаг метокоси Y метками будут: 1, 2, 3 …
h = 360; w = 560;
lx = 0; ly =0; //вначало координат ставятся метки 0
cout
cout
// засечки, сетка иоцифровка
int x = x0;
do
{
//засечка
sprintf(st,”%2.1f”,lx);
outtextxy(x-8,y0+5,st);
lx+= dlx;
//линиясетки
setlinestyle(DOTTED_LINE, 0, 1);
line(x,y0-3,x,y0-h);
x+= dx; } while (x
// засечки, сетка иоцифровка по оси Y
inty = y0;
do
{
//оцифровка
sprintf(st,”%2.1f”,ly);
outtextxy(x0-40,y,st) ;
ly+= dly;
//линиясетки
setlinestyle(DOTTED_LINE,0, 1);
line(x0+3,y,x0+w,y);
setlinestyle(SOLID_LINE,0, 1);
y-= dy; } while (y > y0-h);
} ;
 
Результаты тестирования
 
Для проверки правильности вычисленияаналитической формулы 2 – й степени, которая аппроксимирует экспериментальную(табличную), зависимость, выведем на экран:
— значения определителей [detA, detA1, detA2, detA3] полученных при решении системы линейных уравнений изначения коэффициентов [A0, A2, A3] в аналитической формуле, рассчитанные программой привыборе аппроксимирующего многочлена 2 – й степени;
— вспомогательные данные [A, B, C, D, E, F, G] необходимые для вычисления уравнения функцииаппроксимации экспериментальных данных 2 – й степени;
При тестировании получены следующие величинывышеперечисленных значений:
A = 284;
B = 97744,099609;
C = 358409,6875;
D = 10124;
E =13222899;
F = 362384;
G = 13023812;
detA = 56448;
detA 1= 1,436059 *109 ;
detA 2= ─ 9,42861 * 107 ;
detA3 = 1564482,25;
A0 = 25440,380859;
A1 = ─1670,317871;
A2 = 27,71546;
Аппроксимирующий полином:
P= 25440,380859 ─ 1670,317871*T+ 27,71546*T2;
Данная аналитическая зависимость, обобщает экспериментальныеданные табл. 01.
Для проверки правильности вычисленияаналитической формулы 1 – й степени, которая аппроксимирует экспериментальную(табличную), зависимость, выведем на экран:
— значения определителей [detВ, detВ1, detВ2] полученные при решении системы линейных уравнений изначения коэффициентов [В0, В1] в аналитической формуле, рассчитанныепрограммой при выборе аппроксимирующего многочлена 1 – й степени;
— вспомогательные данные [R, SCp, R2, Cpi ] необходимые для вычисления уравнения функцииаппроксимации экспериментальных данных 1 – й степени;
 
R = 284;
SCp = 9744,099609;
R2 = 10124;
Cpi = 358409,6875;
detВ = 336;
detВ1 = ─ 3139086,75;
detВ2 = 99953,210937;
B0 = ─ 9342,52058;
B1 = 297,479797;
Аппроксимирующая функция
P= ─ 9342,52058 + 297,479797*T/
Данная аналитическая зависимость, неудовлетворительно обобщаетэкспериментальные данные табл.01.
Аномалии и допустимые значения исходных данных.
В результате тестирования программы выявлены следующие еёособенности:
1. Допустимые значения исходных данных лежат в пределах [-10000000;+10000000];
2. При больших значениях аргумента вычерчивание графиказамедляется;
3. При значениях исходных данных впределах 10-9 — график функции может быть не виден вследствиеслишком мелкого масштаба.
 
Результаты выполнения задания
 
1. После ввода выходных данных, перед проведениемвычислений для выбора вида аппроксимирующей функции представимэкспериментальные данные в графическом виде (СНИМОК I).
2. При вычислении аппроксимирующей функции 2 –й степенипрограмма вывела на экран (СНИМОК II ) :
— вид аппроксимирующего полинома: P= 25440,380859 ─ 1670,317871*T+ 27,71546*T2;
— dP иdP(%) – ошибкиаппроксимации.Сравнительный анализ погрешностей показывает, что полученнаяаналитическая зависимость удовлетворительно обобщает исходные экспериментальныеданные. Максимальная ошибка аппроксимации σPmax= 10,539856(2,9253%), минимальная — σPmin= 4,473511 (0,365573%);
— ITG— интегральную оценку аппроксимации. Для интегральнойоценки аппроксимации использована формула:
 
ITG =/>=8,179605;
После завершения вычислений построимграфик аппроксимирующей функции и сравним его с графиком, построенным повыходным данным таблицы 01. Сравнивая графики можно определить хорошуюсходимость теоретических и экспериментальных
3. При вычислении аппроксимирующей функции 1 – й степенипрограмма вывела на экран
— вид аппроксимирующего полинома:
 
P= ─ 9342,520508 + 297,479797*T;
 
— dCP иdCP(%) –абсолютнуюи относительную ошибки аппроксимации. Сравнительный анализ погрешностейпоказывает, что полученная аналитическая зависимость неудовлетворительнообобщает исходные экспериментальные данные.
Максимальная абсолютная ошибкааппроксимации
 
dCP — σPmax= 204,608398(8,3045868%),
минимальная абсолютная ошибкааппроксимации
 
dCP- σPmin = 20,088257(1,013637%).

Максимальная относительная ошибкааппроксимации
 
dCp(%) — σPmax= 50,920618% (183,46698),
минимальная относительная ошибкааппроксимации
 
dCp(%) — σPmin = 1,013637%(20,088257).
 
-ITGL— интегральную оценку аппроксимации.
 
ITGL= 120,015892;
После завершения вычислений построимграфик аппроксимирующей функции и сравним его с графиком, построенным повыходным данным таблицы 01. Сравнивая графики, а также значения
dCP ,dCP(%) и ITGL можно определить неудовлетворительную сходимость теоретических иэкспериментальных данных.
4. После запуска программы на экране появляется приглашениеEnterinputdates>, предлагающее пользователю ввестиколичество пар входных данных, после чего выводится строка ввода значений аргументаENTEREXPERIMENTAL ARGUMENTVALUE> и затем значений экспериментальнойзависимости DEPENDENCYVALUE> .
После ввода данных на экран выводитсяменю:
FOR DRAWING POINTS INPUT;
FOR FIND APROCSIMATIONPOLINOM FUNCTION INPUT ;
FOR DRAWING THE GRAPHIC OFPOLINOM FUNCTION INPUT ;
FOR FIND APROCSIMATION LINEARFUNCTION INPUT ;
FOR DRAWING THE GRAPHIC OFLINEAR FUNCTION INPUT;
FOREXISTINPUT,
состоящее из 6 пунктов, выбрав одиниз которых можно произвести соответствующие операции, указанные в аннотации:
-FORDRAWINGPOINTSINPUT — позволяет произвести графическоеотображение экспериментальных данных в виде точек зависимости P = f(t)на координатной плоскости ;
FORFINDAPROCSIMATIONPOLINOMFUNCTIONINPUT — позволяет произвести расчетфункции аппроксимации экспериментальных данных в виде полинома 2 — й степени;
FORDRAWINGTHEGRAPHICOFPOLINOMFUNCTIONINPUT — позволяет построить графическоеотображение, полученной зависимости P= f(t) в виде аппроксимирующего многочлена 2 степени, накоординатной плоскости;
FORFINDAPROCSIMATIONLINEARFUNCTIONINPUT — позволяет произвести расчетлинейной функции аппроксимации экспериментальных данных;
FORDRAWINGTHEGRAPHICOFLINEARFUNCTIONINPUT — позволяет построить графическоеотображение, полученной зависимости P= f(t) в виде линейной функции аппроксимации на, координатнойплоскости;
FOREXISTINPUT — предлагает выйти из программы:

Вывод
 
Данная программа позволяет произвести аппроксимациюэкспериментальных зависимостей методом наименьших квадратов с отображениемрезультатов аппроксимации в текстовом и графическом режимах. Программапозволяет оценить точность аппроксимации и произвести сравнительный анализ типоваппроксимации ( с помощью многочлена 2 – й степени или с помощью многочлена 1 –й степени ).

Список литературы
 
Яремчук Ф.П., Рудченко П.А. АЛГЕБРА ИЭЛЕМЕНТАРНЫЕ ФУНКЦИИ — Киев, НАУКОВА ДУМКА, 1987, 647.
Глушаков С.В., Сурядный А.С. MICROSOFTEXCEL XP — Харьков, ФИЛИО, 2006, 508.
Дорош Н.Л., Бартенев Г.Л. и др. Методическиеуказания к выполнению индивидуальных заданий и курсовой работы по дисциплинам«Информатика» и «Вычислительная математика». Днепропетровск,УДХТУ, 2004, 47.