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

/*-------------------------------------------------------------------------*/ /* Расчет линейной функции аппроксимации экспериментальных данных */ cout<<" II. LINEAR APROCTIMATION " <<endl; float R = 0, R2

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

Курсовой проект

Математика и статистика

Другие курсовые по предмету

Математика и статистика

Сдать работу со 100% гаранией

Задание 1

 

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

 

Таблица 1

Ts,0К3233343536373839Pмм рт. ст.360,3509,5699,2935,31223.71570,51981,82463,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

T3233343536373839P370,8291668502,0267858688,6518930,70421228,18391581,0911989,42562453,188

Для оценки точности параболической аппроксимации сравниваем значения Р из табл.01 и табл.2. Модуль разности соответствующих значений представляет P-погрешность аппроксимации, значения которой представлены в табл.3. В таблице приведена также относительная погрешность Р, равная отношению Р к Р.

 

Таблица 3

Т3233343536373839Р10,5297,47320,54824,595834,483910,5917,62510,6125P,%2,83935781,48860871,53170,49380,365090,66990,383310,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 FU

Похожие работы

1 2 3 4 > >>