Задание
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
)
и матрица системы невырожденная (detA
≠ 0), то система имеет единственное решение, которое находится по правилу Крамера:
В этих формулах ∆ = detА
— определитель системы, а ∆k
— определитель, полученный из определителя системы заменой k
-г
o
столбца столбцом свободных членов (
k
=
1, 2,..., n
).
Решение системы трех линейных уравнений с тремя неизвестными можно выразить через определители:
, ,
Информационное обеспечение
Зависимость давления P водорода Н2
при различных температурах на линии насыщения приведены в таблице (1).
Для проведения анализа исходных данных с целью выбора вида аппроксимирующего многочлена построим график функции, заданной в табл.1. График приведен на рис.1.
Графическое отображение точек экспериментальных данных
Рис. 1.Экспериментальная зависимость P=f(T)
В результате анализа данных выберем в качестве аппроксимирующего многочлена параболу, заданную уравнением P2
(x)=a0
+a1
x+a2
x2
.
Для определения коэффициентов 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.
Таблица 2
T |
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
+a1
x
Для определения коэффициентов а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<iostream.h>
#include<math.h>
#include<conio.h>
#include<graphics.h>
#include<stdio.h>
#define PATHTODRIVER "c:\egavga.bgi"
void GrafikPolinom(float, float, float, float, float, float );//Функция //построенияграфикаполиномиальнойаппроксимацииэкспериментальныхданных
void GrafikLinear(float,float,float,float,float);//Функцияпостроения
//графика линейной аппроксимации экспериментальных данных
voidGRAPH_POINTS(float,float,float,float ); //Функция выводит на экран точки //экспериментальных данных
int GRAPH_MODE(); //Функция инициализации графического режима
voidGRID(float, float);// Функция формирования координатной сетки
/*-------------------------------------------------------------------------*/
int main()
{
clrscr();
int n;
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; //переменная, используемая в выражении //интегральной оценки аппроксимации
float A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0;
float detA,i, detA1, detA2, detA3, A0,A2,A3;
int answer;
Вводзначенийэкспериментальныхданных*/ cout<<" Input number double values "<<endl;
cin>>n;
cout << " ENTER ARGUMENT VALUE " << endl;
float *t = new float [n]; //Массив значений аргумента (в данном случае - температура)
float *p = new float [n]; //Массив значений функции исследуемого процесса for( i=0;i<n;i++) {cout<<"EnterT"<<(i+1)<<"="; cin>>t[i]; }
cout <<" ENTER EXPERIMENTAL FNCTION VALUE"<<endl; for(i=0;i<n;i++) {cout<<"Enter P"<<(i+1)<<"="; cin>>p[i]; }
L:
cout <<" FOR DRAWING POINTS PRESS <1>\n" ;
cout <<" FOR FIND APROCSIMATION POLINOM FUNCTION INPUT <2>\n" ;
cout <<" FOR FIND APROCSIMATION LINEAR FUNCTION INPUT <4>\n" ;
cout <<" FOR FIND DRAWING POLINOM FUNCTION INPUT <3>\n" ;
cout <<" FOR FIND DRAWING LINEAR FUNCTION INPUT <5>\n" ;
cout <<" FOR EXIST INPUT <0>\n" ;
cin>>answer;
/* Графическое отображение экспериментальных данных в виде точек зависимости P = f(t) на координатной плоскости */
if (answer ==1)
{
int regimen = 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<n;i++)
{
tmpr= t[i];
pwr = p[i];
setbkcolor(1);
GRAPH_POINTS( tn,pn,tmpr,pwr );
} getch () ; closegraph(); // выход из графического режима
}
else
{ cout<<" Error code regimen = "<<regimen<<endl; getch(); closegraph();
} gotoL;
}
/* Расчет функции аппроксимации экспериментальных данных в виде полинома 2 - й степени */
if(answer ==2) { for( i=0;i<n;i++) { A = A + t[i]; B = B + p[i]; C = C + t[i]*p[i]; D = D + t[i]*t[i]; E = E + t[i]*t[i]*p[i]; F = F + t[i]*t[i]*t[i]; G = G + t[i]*t[i]*t[i]*t[i]; } //
cout<<"A = "<<A<<" B = "<<B<<endl; //
cout<<"C = "<<C<<" D = "<<D<<endl; //
cout<<"E = "<<E<<" F = "<<F<<endl; //
cout<<"G = "<<G<<endl; /*n,A,B,C,D,E,F,G - коэффициентымногочленовдлясистемыуравненийвида: n*(a0) + A*(a1) + D*(a2) = B A*(a0) + D*(a1) + F*(a2) = C D*(a0) + F*(a1) + G*(a2) = E */ // РешаемсистемуметодомКрамераdetA = n*D*G + A*F*D + D*A*F - D*D*D - A*A*G - n*F*F; detA1 = B*D*G + C*F*D + E*A*F - E*D*D - C*A*G - B*F*F; detA2 = n*C*G + A*E*D + D*B*F - D*C*D - A*B*G - E*F*n; detA3 = n*D*E + A*F*B + D*A*C - D*D*B - A*A*E - F*C*n; // cout << " detA = " << detA << " detA1 = " << detA1 << endl; // cout << " detA2 = " << detA2 << " detA3 = " << detA3 << endl; cout << " A0 = " << (A0 = detA1/detA) << endl; cout << " A2 = " << (A2 = detA2/detA) << endl; cout << " A3 = " << (A3 = detA3/detA) << endl;
cout << "APROCSIMATION POLINOM:" << endl; A2=A2; A3 = A3; cout << "P = (" << A0<<")+(" << (A2) << ")*T + (" << (A3) << ")*T^2" <<endl; for ( i=0; i<n; i++) { P[i] = A0 + A2*t[i] + A3*t[i]*t[i]; cout<<"P["<<i<<"]="<<P[i]<<" "; } cout<<"\n";
cout << " THE ABSOLUTE & RELATIVE MISTAKES OF APROCTIMATION \n"; for ( i=0; i<n; i++) { dp[i] = (P[i]-p[i]); cout<< "dP["<<i<<"]="<<(fabs(dp[i]))<<" dP(%)="<<(100*fabs(dp[i])/p[i])<<endl; }
cout <<" INTEGRAL LEVEL OF APROCTIMATION IS:\n" ;
for ( i=0; i<n; i++) { INTG = INTG + (dp[i])*dp[i]; } float ITG = sqrt(INTG/(n+1)); cout<<"ITG = "<<ITG<<"\n"; //интегральнаяоценкааппроксимацииgetch();
goto L; }
/* Графическое отображение, полученной зависимости P = f(t) в виде полинома 2 степени, на координатной плоскости */
if(answer == 3) {
int regimen = 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<n;i++)
{
tmpr= t[i];
pwr = p[i];
GRAPH_POINTS( tn,pn,tmpr,pwr );
} getch () ; closegraph(); // выход из графического режима
}
else
{ cout<<" Error code regimen = "<<regimen<<endl; cout << "Dont find driver or driver damaged\n" ; /*Вэтомместе cделатьвозвратвглавноеменю*/ getch(); closegraph();
}
goto L;
}
/*-------------------------------------------------------------------------*/ /* Расчет линейной функции аппроксимации экспериментальных данных */ cout<<" II. LINEARAPROCTIMATION " <<endl; floatR = 0, R2 = 0, B0, B1; floatSCp = 0, Cpi = 0, detB, detB1, detB2; float* dCp = newfloat [n];; float* ACp = newfloat [n];; floatINTGL = 0; if(answer == 4) { for ( i=0;i<n;i++) { R = R+t[i]; SCp = SCp + p[i]; R2 = R2 + t[i]*t[i]; Cpi = Cpi + p[i]*t[i]; } // cout << " R =" << R << " SCp =" << SCp << endl; // cout << " R2 =" << R2 << " Cpi =" << Cpi << endl; /*n, R, SCp, R2, Cpi - коэффициенты в уравнениях для системы вида (А0)*n + (A1)*R= SCp(A0)*R + (A1)*R2 = Cpi*/ detB = n*R2 - R*R; detB1 = SCp*R2 - R*Cpi; detB2 = n*Cpi - R*SCp; // cout<<"detB = "<<detB<<" detB1 = "<<detB1<<"detB2 = "<<detB2<<"\n"; B0 = detB1/detB; B1 = detB2/detB; // cout << " B0 =" << B0 << endl; // cout << " B1 =" << B1 << endl; cout << " APROCTIMATIONLINEARPOLINOM" << endl; cout<<"F =("<<B0<<") + ("<<B1<<")*T" << endl; for (i = 0; i<n;i++) { ACp[i] = B0 + B1* t[i]; cout <<"ACp["<<i<<"]=" <<ACp[i]<<endl; } for ( i = 0; i<n;i++) { dCp[i] = ACp[i] - p[i]; cout<< "dCp["<<i<<"]="<<(fabs(dCp[i]))<<" dCp(%)="<<(100*fabs(dCp[i])/p[i])<<endl; } cout <<" INTEGRALLEVELOFAPROCTIMATIONIS:\n" ; for ( i=0; i<n; i++) { INTGL = INTGL + (dCp[i])*(dCp[i]); } floatITGL = sqrt(INTGL/(n+1)); cout<<"ITGL = "<<ITGL<<"\n"; cout<<" "<<"\n"; getch(); goto L; }
Графическое отображение, полученной зависимости P = f(t) в виде линейной функции аппроксимации на, координатной плоскости */
if(answer==5)
{
int regimen = 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<n;i++)
{tmpr = t[i]; pwr = p[i]; GRAPH_POINTS(tn,pn,tmpr,pwr);
} getch () ; closegraph(); // выход из графического режима
}
else
{ cout << " Error code regimen = "<<regimen<<endl; cout << "Dont find driver or driver damaged\n" ; getch();
} goto L;
}
return 0;
}
* Функция вывода на координатную плоскость графика функции 2-й степени */
void GrafikPolinom
(float A0, float A2, float A3,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,x0,470);
// график
xl = tn0;
x2 = tn;
dx = 0.01;
x = xl;
while ( x < x2 )
{
y =A3*x*x + A2*x+A0; // функция
px = x0 + x*mx;
py = y0 - y*my;
putpixel(px,py, WHITE);
x += dx;
}}
int GRAPH_MODE()
{
int grdriver = DETECT; // драйвер
int grmode; // режим
int errorcode; // кодошибки
initgraph(&grdriver, &grmode, PATHTODRIVER);
errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации графического режима
{
printf("ERROR: dont find driver or driver damaged \n", errorcode);
puts("PRESS <Enter>");
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,x0,470);
// график
xl = tn0;
x2 = tn;
dx = 0.01;
x = xl;
while ( x < x2 )
{
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,float pwr )
{
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;
float lx,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<<" MX = 1 : "<< 2*tn/14 <<"\n"; //масштаб по Х
cout<<" MY = 1 : "<< 2*pn/9 <<"\n"; //масштабпо Y
// засечки, сетка и оцифровка
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 < x0+w);
// засечки, сетка и оцифровка по оси Y
int y = 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
,
detA
1,
detA
2,
detA
3
] полученных при решении системы линейных уравнений и значения коэффициентов [A
0,
A
2,
A
3
] в аналитической формуле, рассчитанные программой при выборе аппроксимирующего многочлена 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;
A
2
= 27,71546;
Аппроксимирующий полином:
P
= 25440,380859 ─ 1670,317871*
T
+ 27,71546*
T
2
;
Данная аналитическая зависимость, обобщает экспериментальные данные табл. 01.
Для проверки правильности вычисления аналитической формулы 1 – й степени, которая аппроксимирует экспериментальную (табличную), зависимость, выведем на экран:
- значения определителей [det
В,
det
В1,
det
В2
] полученные при решении системы линейных уравнений и значения коэффициентов [В0, В1
] в аналитической формуле, рассчитанные программой при выборе аппроксимирующего многочлена 1 – й степени;
- вспомогательные данные [
R
,
SCp
,
R
2,
Cpi
] необходимые для вычисления уравнения функции аппроксимации экспериментальных данных 1 – й степени;
R
= 284;
SCp
= 9744,099609;
R2
= 10124;
Cpi
= 358409,6875;
det
В
= 336;
det
В1
= ─ 3139086,75;
det
В2
= 99953,210937;
B
0
= ─ 9342,52058;
B
1
= 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*
T
2
;
- 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.
После запуска программы на экране появляется приглашение <
Enter
input
dates
>
, предлагающее пользователю ввести количество пар входных данных, после чего выводится строка ввода значений аргумента <
ENTER
EXPERIMENTAL
ARGUMENT
VALUE
>
и затем значений экспериментальной зависимости <ENTER EXPERIMENTAL
DEPENDENCY
VALUE> .
После ввода данных на экран выводится меню:
FOR DRAWING POINTS INPUT <1>;
FOR FIND APROCSIMATION POLINOM FUNCTION INPUT <2>;
FOR DRAWING THE GRAPHIC OF POLINOM FUNCTION INPUT <3>;
FOR FIND APROCSIMATION LINEAR FUNCTION INPUT <4>;
FOR DRAWING THE GRAPHIC OF LINEAR FUNCTION INPUT<5>;
FOR
EXIST
INPUT
<0>,
состоящее из 6 пунктов, выбрав один из которых можно произвести соответствующие операции, указанные в аннотации:
-
FOR
DRAWING
POINTS
INPUT
<1>
- позволяет произвести графическое отображение экспериментальных данных в виде точек зависимости P = f(t)
на координатной плоскости ;
FOR
FIND
APROCSIMATION
POLINOM
FUNCTION
INPUT
<2>
- позволяет произвести расчет функции аппроксимации экспериментальных данных в виде полинома 2 - й степени;
FOR
DRAWING
THE
GRAPHIC
OF
POLINOM
FUNCTION
INPUT
<3>
- позволяет построить графическое отображение, полученной зависимости P
=
f
(
t
)
в виде аппроксимирующего многочлена 2 степени, на координатной плоскости;
FOR
FIND
APROCSIMATION
LINEAR
FUNCTION
INPUT
<4>
- позволяет произвести расчет линейной функции аппроксимации экспериментальных данных;
FOR
DRAWING
THE
GRAPHIC
OF
LINEAR
FUNCTION
INPUT
<5>
- позволяет построить графическое отображение, полученной зависимости P
=
f
(
t
)
в виде линейной функции аппроксимации на, координатной плоскости;
FOR
EXIST
INPUT
<0>
- предлагает выйти из программы:
Вывод
Данная программа позволяет произвести аппроксимацию экспериментальных зависимостей методом наименьших квадратов с отображением результатов аппроксимации в текстовом и графическом режимах. Программа позволяет оценить точность аппроксимации и произвести сравнительный анализ типов аппроксимации ( с помощью многочлена 2 – й степени или с помощью многочлена 1 – й степени ).
Список литературы
Яремчук Ф.П., Рудченко П.А. АЛГЕБРА И ЭЛЕМЕНТАРНЫЕ ФУНКЦИИ - Киев, НАУКОВА ДУМКА, 1987, 647.
Глушаков С.В., Сурядный А.С. MICROSOFT EXCEL XP - Харьков, ФИЛИО, 2006, 508.
Дорош Н.Л., Бартенев Г.Л. и др. Методические указания к выполнению индивидуальных заданий и курсовой работы по дисциплинам "Информатика" и "Вычислительная математика". Днепропетровск, УДХТУ, 2004, 47.
|