Использование компьютерной техники и программного обеспечения для определения параметров эмпирических формул

Автор работы: Пользователь скрыл имя, 04 Марта 2015 в 19:33, курсовая работа

Краткое описание

В данной работе приводится решение задачи, которая заключается в аналитическом представлении искомой функциональной зависимости, т.е. в подборе формулы, описывающей результаты эксперимента, с помощью табличного редактора MS Excel и языка программирования Turbo Pascal v.7.0.

Содержание

Введение. - 6 -
1. Получение физических зависимостей при обработке результатов эксперимента методом наименьших квадратов - 7 -
1.1. Постановка и математическая модель задачи - 7 -
1.1.1. Содержательная формулировка задачи - 7 -
1.1.2. Исходные данные (задача №1) - 7 -
1.1.3. Расчетные формулы - 8 -
1.2. Разработка алгоритма решения задачи - 11 -
1.2.1. Укрупненный алгоритм и его описание - 11 -
1.2.2. Детали алгоритма и их описание - 12 -
2. Программирование - 14 -
2.1. Описание используемых переменных, массивов - 14 -
2.2. Файловый ввод-вывод данных - 14 -
2.3. Пояснения к циклам - 15 -
2.4. Соответствие между блок-схемой и программой - 15 -
2.5. Текст программы на языке Turbo Pascal v.7.0 - 16 -
2.7. Результаты выполнения программы и их анализ - 20 -
3. Построение эмпирических формул средствами Microsoft Excel. - 21 -
3.1. Аппроксимация функции у=f(x) линейной функцией. - 22 -
3.2. Аппроксимация функции у=f(x) квадратичной функцией. - 22 -
3.3. Аппроксимация функции у=f(x) степенной функцией. - 23 -
3.4. Аппроксимация функции у=f(x) экспоненциальной функцией. - 24 -
3.5. Вычисление коэффициентов детерминированности. - 25 -
3.4. Построение графиков зависимостей и линии тренда - 27 -
4. Сравнительный анализ результатов, полученных в Excel, с результатами, полученных при выполнении программы - 30 -
Библиографический список - 31 -

Прикрепленные файлы: 1 файл

Курсовой_проект.doc

— 1.41 Мб (Скачать документ)

Такие матрицы лучше всего решать по формулам Крамера, т.к. достаточно легко можно сосчитать определители. Суть метода Крамера состоит в следующем:

Пусть нам даны следующие матрицы ( -матрица коэффициентов, - матрица свободных членов):

       ;

Допустим, что необходимо решить матричную систему уравнений

, где 

Обозначим через - вспомогательных определителей, где - определитель матрицы, полученной из матрицы коэффициентов заменой её -ого столбца столбцом свободных членов.


 

Если -определитель матрицы , то справедливы следующие уравнения:

 

2. Программирование

2.1. Описание используемых переменных, массивов

При написании программы на языке программирования Pascal было использовано достаточно много различных переменных и массивов. Дадим им краткую характеристику.

Road_Input, Road_Output – Константы, содержащие пути к входному и выходному файлу.

N – Константа, которая хранит количество произведённых измерений физических величин.

File_Input, File_Output – Файловые переменные, необходимые для организации файлового ввода-вывода.

Matrix – Массив, содержащий исходную таблицу с данными.

Matrix_Teor – Массив, содержащий теоретические значения функции.

D – Главный определитель матрицы коэффициентов.

D1, D2, D3 – Вспомогательные определители матриц.

Koef_Lin – Массив, содержащий коэффициенты линейной аппроксимации.

Koef_Kvad – Массив, содержащий коэффициенты квадратичной аппроксимации.

Koef_Step – Массив, содержащий коэффициенты степенной аппроксимации.

Koef_Exp – Массив, содержащий коэффициенты экспоненциальной аппроксимации.

Q – Массив, содержащий значения отклонений эмпирических значений из исходной таблицы и теоретических значкний.

R – Массив, содержащий коэффициенты детерминированности.

Q_Min – Переменная, содержащая наименьшее значений Q.

I, j – Различные счётчики циклов.

Также в подпрограммах были использованы переменные, которые использовались в основном как счетчики циклов и как хранилища различных значений для подсчета тех или иных физических величин.

2.2. Файловый ввод-вывод данных

Для ввода данных в программу и для вывода полученных результатов используются текстовые типизированные файлы. Так файл Input.txt предназначен для ввода данных, а файл Output.txt для вывода полученных результатов.

 

2.3. Пояснения к циклам

В основном все циклы, использованные в программе предназначены либо для заполнения массивов исходными или теоретическими значениям, либо для организации последовательного суммирования  элементов этих массивов.

2.4. Соответствие между блок-схемой  и программой

Основная блок-схема программы:



 










 

 

2.5. Текст программы  на языке Turbo Pascal v.7.0

Program Kurs_Project;

Const

Road_Input='D:\Kurs\Input.txt';

Road_Output='D:\Kurs\Output.txt';

n=25;

Var

File_Input,File_Output:Text;

Matrix:Array[1..2,1..n] of Real;

Matrix_Teor:Array[1..2,1..n] of Real;

d:Real;  

d1,d2,d3:Real;

Koef_Lin:Array[1..2] of Real;

Koef_Kvad:Array[1..3] of Real;

Koef_Step:Array[1..2] of Real;

Koef_Exp:Array[1..2] of Real;

Q:Array[1..4] of Real;

R:Array[1..4] of Real;

Q_Min:Real; i,j:Byte;

{-------------Функция суммирования известных аргументов-------------------}

Function Summ(Key:String):Real;

Var i:Byte; S,K:Real;

Begin Function

S:=0;

If key='x' then

Begin

For i:=1 to n do S:=S + Matrix[1,i];

Summ:=S;

End

Else If key='y' then

Begin

For i:=1 to n do S:=S + Matrix[2,i];

Summ:=S;

End

Else If key='xy' then

Begin

For i:=1 to n do S:=S + Matrix[1,i]*Matrix[2,i];

Summ:=S;

End

Else if key='x^2' then

Begin

For i:=1 to n do S:=S + sqr(Matrix[1,i]);

Summ:=S;

End

Else if key='x^3' then

Begin

For i:=1 to n do S:=S + Matrix[1,i]*sqr(Matrix[1,i]);

Summ:=S;

End

Else if key='x^4' then

Begin

For i:=1 to n do S:=S + sqr(Matrix[1,i])*sqr(Matrix[1,i]);

Summ:=S;

End

Else if key='x^2y' then

Begin

For i:=1 to n do S:=S + sqr(Matrix[1,i])*Matrix[2,i];

Summ:=S;

End

Else if key='lnx' then

Begin

For i:=1 to n do S:=S + ln(Matrix[1,i]);

Summ:=S;

End

Else if key='lny' then

Begin

For i:=1 to n do S:=S + ln(Matrix[2,i]);

Summ:=S;

End

Else if key='lnx^2' then

Begin

For i:=1 to n do S:=S + ln(sqr(Matrix[1,i]));

Summ:=S;

End

Else if key='lnxy' then

Begin

For i:=1 to n do S:=S + ln(Matrix[1,i]*Matrix[2,i]);

Summ:=S;

End

Else if key='xlny' then

Begin

For i:=1 to n do S:=S + Matrix[1,i]*ln(Matrix[2,i]);

Summ:=S;

End;

End; Function

{------------------Подпрограмма вычисления Q -------------------------}

Function Znach_Q:Real;

Var Q:Real;

Begin

Q:=0;

For i:=1 to n do

Begin

Q:=Q + sqr(Matrix_Teor[2,i]-Matrix[2,i]);

End;

Znach_Q:=Q;

End;

{-------------------Подпрограмма вычисления R---------------------------}

Function Znach_R:Real;

Var

Chislo1,Chislo2,Sred_y:Real;

Begin

Chislo1:=0;Chislo2:=0;

Sred_y:=0;

For i:=1 to n do

Begin

Sred_y:=Sred_y + Matrix_Teor[2,i];

End;

Sred_y:=Sred_y/n;

For i:=1 to n do

Begin

Chislo1:=Chislo1 + sqr(Matrix_Teor[2,i]-Matrix[2,i]);

Chislo2:=Chislo2 + sqr(Matrix[2,i]-Sred_y);

End;

Znach_R:=1-Chislo1/Chislo2;

End;

Begin

{------------------Чтение из файла----------------------------------------}

Assign(File_Input,Road_Input);

Reset(File_Input); i:=1;

Readln(File_Input); Пропуск строки в файле While not EOF(File_Input) do

Begin While

Read(File_Input,Matrix[1,i]); Readln(File_Input,Matrix[2,i]); i:=i+1;

End; While

Close(File_Input);

For i:=1 to n do Matrix_Teor[1,i]:=Matrix[1,i];

{-------------------Проверка линейной зависимости-------------------------}

d:=n*Summ('x^2')-Summ('x')*Summ('x');

d1:=Summ('y')*Summ('x^2')-Summ('xy')*Summ('x');

d2:=n*Summ('xy')-Summ('x')*Summ('y');

Koef_Lin[1]:=d1/d;

Koef_Lin[2]:=d2/d;

For i:=1 to n do

Begin

Matrix_Teor[2,i]:=Koef_Lin[1]+Koef_Lin[2]*Matrix_Teor[1,i];

End;

Q[1]:=Znach_Q;

R[1]:=Znach_R;

{-------------------Проверка квадратичной зависимости---------------------}

d:=n*Summ('x^2')*Summ('x^4')+Summ('x')*Summ('x^3')*Summ('x^2')+

Summ('x^2')*Summ('x')*Summ('x^3')-Summ('x^2')*Summ('x^2')*Summ('x^2')-

Summ('x^3')*Summ('x^3')*n-Summ('x^4')*Summ('x')*Summ('x');

d1:=Summ('y')*Summ('x^2')*Summ('x^4')+Summ('x')*Summ('x^3')*Summ('x^2')+

Summ('x^2')*Summ('xy')*Summ('x^3')-Summ('x^2y')*Summ('x^2')*Summ('x^2')-

Summ('x^3')*Summ('x^3')*Summ('y')-Summ('x^4')*Summ('xy')*Summ('x');

d2:=n*Summ('xy')*Summ('x^4')+Summ('y')*Summ('x^3')*Summ('x^2')+

Summ('x^2')*Summ('x')*Summ('x^2y')-Summ('x^2')*Summ('xy')*Summ('x^2')-

Summ('x^2y')*Summ('x^3')*n-Summ('x^4')*Summ('x')*Summ('y');

d3:=n*Summ('x^2')*Summ('x^2y')+Summ('x')*Summ('xy')*Summ('x^2')+

Summ('y')*Summ('x')*Summ('x^3')-Summ('x^2')*Summ('x^2')*Summ('y')-

Summ('x^3')*Summ('xy')*n-Summ('x^2y')*Summ('x')*Summ('x');

Koef_Kvad[1]:=d1/d;

Koef_Kvad[2]:=d2/d;

Koef_Kvad[3]:=d3/d;

For i:=1 to n do

Begin

Matrix_Teor[2,i]:=Koef_Kvad[1]+Koef_Kvad[2]*Matrix_Teor[1,i]+

Koef_Kvad[3]*sqr(Matrix_Teor[1,i]);

End;

Q[2]:=Znach_Q;

R[2]:=Znach_R;

{---------------------Проверка степенной зависимости-----------------------}

d:=n*Summ('lnx^2')-Summ('lnx')*Summ('lnx');

d1:=Summ('lny')*Summ('lnx^2')-Summ('lnxy')*Summ('lnx');

d2:=n*Summ('lnxy')-Summ('lnx')*Summ('lny');

Koef_Step[1]:=exp(d1/d);

Koef_Step[2]:=d2/d;

For i:=1 to n do

Begin

Matrix_Teor[2,i]:=Koef_Step[1]*exp(Koef_Step[2]*ln(Matrix_Teor[1,i])); End;

Q[3]:=Znach_Q;

R[3]:=Znach_R;

{---------------------Проверка экспоненциальной зависимости-----------------}

d:=n*Summ('x^2')-Summ('x')*Summ('x');

d1:=Summ('lny')*Summ('x^2')-Summ('xlny')*Summ('x');

d2:=n*Summ('xlny')-Summ('x')*Summ('lny');

Koef_exp[1]:=exp(d1/d);

Koef_exp[2]:=d2/d;

For i:=1 to n do

Begin

Matrix_Teor[2,i]:=Koef_exp[1]*exp(Koef_exp[2]*Matrix_Teor[1,i]);

End;

Q[4]:=Znach_Q;

R[4]:=Znach_R;

{-------------Анализ значений Q---------------------------------------------}

Q_Min:=Q[1]; j:=1;

For i:=2 to 4 do

If Q[i] < Q_Min then

Begin

Q_Min:=Q[i]; j:=i;

End;

{----------------Вывод полученных результатов-------------------------------}

      Assign(File_Output,Road_Output);

Rewrite(File_Output);

Writeln(File_Output,'Теоретическая Функциональная  зависимость y от x');

Writeln(File_Output);

Writeln(File_Output,'1) Линейная зависимость'); Writeln(File_Output,'y=',Koef_Lin[1]:5:3,'+',Koef_Lin[2]:5:3,'*x   ;   ',

'Q=',Q[1]:5:3,'   ;   ','R=',R[1]:5:3);

Writeln(File_Output);

Writeln(File_Output,'2) Квадратичная зависимость'); Writeln(File_Output,'y=',Koef_Kvad[1]:5:3,'+',Koef_Kvad[2]:5:3,'*x+',

Koef_Kvad[3]:5:3,'*x^2 ; ','Q=',Q[2]:5:3,' ; ','R=',R[2]:5:3); Writeln(File_Output);

Writeln(File_Output,'3) Степенная зависимость'); Writeln(File_Output,'y=',Koef_Step[1]:5:3,'*x^(',Koef_Step[2]:5:3,')   ;   ',

'Q=',Q[3]:5:3,'   ;   ','R=',R[3]:5:3);

Writeln(File_Output);

Writeln(File_Output,'4) Экспоненциальная зависимость'); Writeln(File_Output,'y=',Koef_Exp[1]:5:3,'*e^(',Koef_Exp[2]:5:3,'*x)   ;   ',

'Q=',Q[4]:5:3,'   ;   ','R=',R[4]:5:3);

Writeln(File_Output);

Writeln(File_Output);

Writeln(File_Output,'Наиболее точная зависимость:');

Case j of

1:Begin

Writeln(File_Output,'Линейная зависимость'); Writeln(File_Output,'Q=',Q_Min:5:3);

End;

2:Begin

Writeln(File_Output,'Квадратичная зависимость'); Writeln(File_Output,'Q=',Q_Min:5:3);

End;

3:Begin

Writeln(File_Output,'Степенная зависимость'); Writeln(File_Output,'Q=',Q_Min:5:3);

End;

4:Begin

Writeln(File_Output,'Экспоненциальная зависимость'); Writeln(File_Output,'Q=',Q_Min:5:3);

End;

End;

Close(File_Output);

End.

 

2.7.  Результаты выполнения программы  и их анализ

Для отладки программы воспользуемся исходными значениями.

Файл Input.txt

 x     y

2.1   3.7

2.7   4.2

3.1   4.4

3.6   4.9

4.2   5.3

4.7   5.6

5.2   6.1

5.6   6.4

6.2   6.7

6.6   7.0

7.2   7.3

7.6   7.4

8.1   7.9

8.7   8.1

9.0   8.3

9.6   8.7

10.1  8.9

10.6  9.1

11.1  9.4

11.6  9.7

12.0  9.7

12.7  10.1

13.1  10.2

13.7  10.6

14.7  11.0

 

Файл Output.txt

Теоретическая Функциональная зависимость y от x

1) Линейная  зависимость

y=2.943+0.575*x   ;   Q=1.223   ;   R=0.989

2) Квадратичная  зависимость

y=2.014+0.855*x+-0.017*x^2   ;   Q=0.127   ;   R=0.999

3) Степенная зависимость

y=1.743*x^(0.726)   ;   Q=8.791   ;   R=0.921

4) Экспоненциальная зависимость                                                                                         y=3.766*e^(0.081*x)   ;   Q=7.271   ;   R=0.934

Наиболее точная зависимость:

Квадратичная зависимость

Q=0.127

 

3.  Построение  эмпирических формул средствами  Microsoft Excel.

Для проведения расчётов данные целесообразно расположить в виде таблицы (рис.1), используя средства табличного процессора Microsoft Excel.

 


 

Поясним, как составлялась таблица (рис.1)

1) В ячейки A2:A26 заносим значения ;

2) В ячейки B2:B26 заносим значения ;

3) В ячейку C2 вводим формулу =A2^2 и копируем её в ячейки C3:C26;

4) В ячейку D2 вводим формулу =A2*B2 и копируем её в ячейки D3:D26;

5) В ячейку E2 вводим формулу =A2^3 и копируем её в ячейки E3:E26;

6) В ячейку F2 вводим формулу =A2^4 и копируем её в ячейки F2:F26;

7) В ячейку G2 вводим формулу =(A2^2)*B2 и копируем её в ячейки G3:G26;

8) В ячейку H2 вводим формулу =LN(B2) и копируемеё в ячейки H3:H26;

 

9) В ячейку I2 вводим формулу =LN(A2) и копируем её в ячейки I3:I26;

10) В ячейку J2 вводим формулу =LN(A2^2) и копируем её в ячейки J3:J26;

11) В ячейку K2 вводим формулу =LN(A2*B2) и копируем её в ячейки K3:K26;

12) В ячейку L2 вводим формулу =A2*LN(B2) и копируем её в ячейки L3:L26;

13) В ячейку A28 вводим формулу =СУММ(A2:A26) и копируем её в ячейки B28:L28;

3.1.  Аппроксимация  функции у=f(x) линейной функцией.

Аппроксимируем функцию линейной функцией . Для определения коэффициентов и воспользуемся системой (4). Используя итоговые суммы таблицы, расположенные в ячейках A28, B28, C28 и D28,  вычислим значение коэффициентов (рис.2 и рис.3).


                 


 

3.2.  Аппроксимация функции у=f(x) квадратичной  функцией.

Далее аппроксимируем функцию квадратичной функцией . Для определения коэффициентов a1, a2 и a3 воспользуемся системой (5). Используя итоговые суммы таблицы, расположенные в ячейках A28, B28, C28 , D28, E28, F28, G28  вычислим значение коэффициентов (рис.4 и рис.5).


 

 


 

3.3.  Аппроксимация функции у=f(x) степенной  функцией.

Аппроксимируем функцию степенной функцией . Для определения коэффициентов и воспользуемся системой (4), в которую вместо входят значения . Используя итоговые суммы таблицы, расположенные в ячейках H28, I28, J28 и K28,  вычислим значение коэффициентов (рис.6 и рис.7).


 

 


 

3.4.  Аппроксимация функции у=f(x) экспоненциальной функцией.

Аппроксимируем функцию экспоненциальной функцией . Для определения коэффициентов и воспользуемся системой (4), в которую вместо входят значения . Используя итоговые суммы таблицы, расположенные в ячейках А28, С28, H28 и L28,  вычислим значение коэффициентов (рис.8 и рис.9).


 


 

 

3.5.  Вычисление коэффициентов детерминированности.

Таблица (рис.10) содержит теоретическую функциональную зависимость для каждой функции, заданной таблично.


 

В таблице (рис.10) значения в столбцах P,Q,R и S получили, подставляя из начальных данных в эмпирические формулы со своими коэффициентами, которые были вычислены ранее для разных зависимостей.

Поясним, как составлялась эта таблица:

1) В ячейку P4 вводим формулу =$E$36+N4*$E$37 и копируем её в ячейки P5:P28;

2) В ячейку Q4 вводим формулу =$F$46+N4*$F$47+N4*N4*$F$48 и копируем её в ячейки Q5:Q28;

3) В ячейку R4 вводим формулу =$E$60*N4^$E$61 и копируем её в ячейки R5:R28;

4) В ячейку S4 вводим формулу =$E$73*EXP($E$74*N4) и копируем её в ячейки S5:S28;

Чтобы посчитать средние значения в ячейку P30 вводим формулу =СУММ(P4:P28)/25 и копируем её в ячейки Q30:S30;

Далее приведём таблицу значений (рис.11) параметров, которые потребуются для расчётов коэффициентов детерминированности.


 

 

Поясним, как составлялась эта таблица:

1) В ячейку T4 вводим формулу =(P4-$O4)^2 и копируем её в ячейки T4:W28;

2) В ячейку X4 вводим формулу =($O4-P$30)^2 и копируем её в ячейки X4:AA28;

3) В ячейку T30 вводим формулу =СУММ(T4:T28) и копируем её в ячейки U30:AA30;

Информация о работе Использование компьютерной техники и программного обеспечения для определения параметров эмпирических формул