Задание 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.
Таблица 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+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
#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
"< cin>>n; cout
<< " ENTER ARGUMENT VALUE " << endl; float *t = new float
[n]; //Массив значений аргумента (в данном случае - температура) float *p = new float
[n]; //Массив значений функции исследуемого процесса for(
i=0;i cout
<<" ENTER EXPERIMENTAL FNCTION VALUE"< L: cout
<<" FOR DRAWING POINTS PRESS <1>
" ; cout
<<" FOR FIND APROCSIMATION POLINOM FUNCTION INPUT <2>
"
; cout
<<" FOR FIND APROCSIMATION LINEAR FUNCTION INPUT <4>
" ; cout
<<" FOR FIND DRAWING POLINOM FUNCTION INPUT <3>
" ; cout
<<" FOR FIND DRAWING LINEAR FUNCTION INPUT <5>
" ; cout
<<" FOR EXIST INPUT <0>
" ; 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);










(zip - application/zip)









