рефераты бесплатно
Рефераты бесплатно, курсовые, дипломы, научные работы, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения,рефераты литература, рефераты биология, рефераты медицина, рефераты право, большая бибилиотека рефератов, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент и многое другое.
ENG
РУС
 
рефераты бесплатно
ВХОДрефераты бесплатно             Регистрация

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

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

Задание 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 — определитель, полученный из определителя системы заменой ko столбца столбцом свободных членов (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.

 

Таблица 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

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<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);//Функция построения

//графика линейной аппроксимации экспериментальных данных

void GRAPH_POINTS(float,float,float,float ); //Функция выводит на экран точки //экспериментальных данных

int GRAPH_MODE(); //Функция инициализации графического режима

void GRID(float, float);// Функция формирования координатной сетки

/*-------------------------------------------------------------------------*/

int main()

{ clrscr();

int n;

float tmpr,pwr; //текущие значения аргумента и функции

float discret; //дискретность изменения аргумента

float tn0, 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<<"Enter T"<<(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();

} 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;

Страницы: 1, 2


© 2010.