1. Находим параметры уравнения методом наименьших квадратов.
Система уравнений МНК:
an + b∑t = ∑y
a∑t + b∑t2 = ∑y*t
t
|
y
|
t2
|
y2
|
t y
|
4.7
|
43.136
|
22.09
|
1860.723
|
202.74
|
4.8
|
55.234
|
23.04
|
3050.751
|
265.121
|
4.9
|
68.824
|
24.01
|
4736.757
|
337.238
|
5
|
84.037
|
25
|
7062.217
|
420.185
|
5.1
|
100.856
|
26.01
|
10171.953
|
514.366
|
5.2
|
119.49
|
27.04
|
14277.788
|
621.346
|
5.3
|
140
|
28.09
|
19600.028
|
742.001
|
5.4
|
162.49
|
29.16
|
26402.87
|
877.444
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
40.4
|
774.066
|
204.44
|
87163.087
|
3980.441
|
Ср.знач.
|
77.407
|
20.444
|
8716.309
|
398.044
|
Для наших данных система уравнений имеет вид:
10a + 40.4b = 774.07
40.4a + 204.44b = 3980.44
Из первого уравнения выражаем a и подставим во второе уравнение
Получаем a = -6.209, b = 20.697
Уравнение тренда:
y=20.697·t-6.209
Эмпирические коэффициенты тренда a и b являются лишь оценками теоретических коэффициентов βi, а само уравнение отражает лишь общую тенденцию в поведении рассматриваемых переменных.
Коэффициент тренда b = 20.697 показывает среднее изменение результативного показателя (в единицах измерения у) с изменением периода времени t на единицу его измерения. В данном примере с увеличением t на 1 единицу, y изменится в среднем на 20.697.
Выводы.
Изучена временная зависимость Y от времени t. На этапе спецификации был выбран линейный тренд. Оценены её параметры методом наименьших квадратов. Возможна экономическая интерпретация параметров модели - с каждым периодом времени t значение Y в среднем увеличивается на 20.697 ед.изм.
#include "stdafx.h"
#include
#include
#include
#include
using namespace std;
int _tmain()
{
setlocale(LC_ALL, "rus");
double *a = NULL, *b = NULL, **sum = NULL;
const int N = 8;
double x[N] = { 4.7, 4.8, 4.9, 5, 5.1, 5.2, 5.3, 5.4 },
y[N] = { 43.1361, 55.2336, 68.8241, 84.0370, 100.8561, 119.4897, 140.001, 162.4896 };
int K, i, j, k, m;
double z, c;
cout << "Порядок k= ";
cin >> K;
cin.get();
b = new double[K + 1];
a = new double[K + 1];
sum = new double *[K + 1];
for (int i = 0; isum[i] = new double[K + 1];
for (i = 0; i{
for (j = 0; j{
sum[i][j] = 0;
for (k = 0; k{
sum[i][j] += pow(x[k], i + j);
}
}
}
for (i = 0; i{
b[i] = 0;
for (k = 0; k{
b[i] += pow(x[k], i) * y[k];
}
}
for (int i = 0; i{
for (int j = 0; jcout << sum[i][j] << "\t";
cout << endl;
}
for (int i = 0; icout << b[i] << "\t";
cout << endl;
for (int i = 0; i{
m = i;
for (int j = i + 1; j{
if (fabs(sum[m][i])m = j;
}
for (int k = i; k{
z = sum[m][k];
sum[m][k] = sum[i][k];
sum[i][k] = z;
}
z = b[m]; b[m] = b[i]; b[i] = z;
for (int i = 0; i{
for (int j = 0; j{
cout << sum[i][j] << setw(15);
}
cout << "b" << i << "= ";
cout << b[i] << endl;
}
cin.get();
for (int j = i + 1; j{
c = -sum[j][i] / sum[i][i];
cout<<"\n\n ! "<for (int k = i; k{
sum[j][k] = sum[j][k] + c*sum[i][k];
}
b[j] = b[j] + c*b[i];
}
}
for (int i = 0; i{
for (int j = 0; j{
cout << sum[i][j] << setw(15);
}
cout << "b" << i << "=";
cout << b[i] << endl;
}
cin.get();
a[K] = b[K] / sum[K][K];
for (int i = K + 1 - 2; i >= 0; i--)
{
for (int k = i + 1; k{
b[i] = b[i] - a[k] * sum[i][k];
}
a[i] = b[i] / sum[i][i];
}
for (int i = 0; icout << "X" << i << "=" << a[i] << endl;
cin.get();
system("Pause");
}
Достарыңызбен бөлісу: |