Курсовая работа: Аппроксимация экспериментальных зависимостей
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();
} goto
L;
}
/* Расчет функции
аппроксимации экспериментальных данных в виде полинома 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. LINEAR
APROCTIMATION " <<endl;
float R
= 0, R2 = 0, B0,
B1; float
SCp = 0, Cpi
= 0, detB, detB1,
detB2; float*
dCp = new
float [n];;
float* ACp
= new float
[n];; float
INTGL = 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 << " APROCTIMATION
LINEAR POLINOM"
<< 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 <<" INTEGRAL
LEVEL OF
APROCTIMATION
IS:\n"
; for ( i=0;
i<n;
i++) { INTGL
= INTGL + (dCp[i])*(dCp[i]);
} float ITGL
= 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; //
координаты начала координатных осей
Страницы: 1, 2, 3, 4, 5 |