for (j=2;j>=0;j--)
{
X[j] = B[j]/A[j][j];
if (j!=2)
{
for (i=2;i>j;i--) {X[j] = X[j]-A[j][i]*X[i]/A[j][j];};
};
};
}
// Главная функция
void main()
{
clrscr();
float Xi[21],Yi[21], // таблица данных
a[3][3],b[3],x[3]; // а - матрица, b - вектор,
// x - вектор неизвестных
float A=0,B=0,C=0; // искомые параметры функции g(A, B, C, x)
float h=0; // шаг
int n=20; // число отрезков - n
float ai=-2,bi=3; // отрезок [-2;3]
float R=0; // значение среднеквадратичной погрешности
h = float(bi-ai)/n; // вычисляем шаг
// Создание таблицы данных
for(int i=0;i<=n;i++)
{
Xi[i] = ai+i*h;
Yi[i] = fn(Xi[i]);
}
// Обнуление элементов матрицы а и вектора b
for(i=0;i<3;i++)
{
b[i] = 0;
for(int j=0;j<3;j++) { a[i][j] = 0;}
}
// Заполнение матрицы а и вектора b
for(i=0;i<=n;i++)
{
a[0][0] = a[0][0] + sin(Xi[i]) * sin(Xi[i]);
a[0][1] = a[0][1] + Xi[i] * sin(Xi[i]);
a[0][2] = a[0][2] + sin(Xi[i]);
a[1][1] = a[1][1] + Xi[i] * Xi[i];
a[1][2] = a[1][2] + Xi[i];
b[0] = b[0] + Yi[i] * sin(Xi[i]);
b[1] = b[1] + Xi[i] * Yi[i];
b[2] = b[2] + Yi[i];
}
a[2][2] = n+1;
a[1][0]=a[0][1];
a[2][0]=a[0][2];
a[2][1]=a[1][2];
// Нахождение неизвестных х[3] методом Гаусса с частичным выбором
//ведущего элемента
GaussMethod(a,b,x);
A = x[0]; B = x[1]; C =x [2]; // искомые параметры A, B, C
// регрессионной функции g
// Расчет значений функции g
float Gi[21];
for(i=0;i<=n;i++)
{
Gi[i] = gx(A,B,C,Xi[i]);
}
// Вычисление среднеквадратичной погрешности
for(i=0;i<=n;i++)
R=R+(Yi[i]-gx(A,B,C,Xi[i]))*(Yi[i]-gx(A,B,C,Xi[i]));
R=sqrt(R/(n+1));
// Вывод значений
printf("Узлы сетки\tФункция f Регрессионная функция g\n");
for(i=0;i<=n;i++)
printf(" %.2f \t %.2f \t\t %.2f \n",Xi[i],Yi[i],Gi[i]);
printf("\n\nЗначение среднеквадратичной погрешности равно : %.2g",R);
getch();
}
Узлы сетки Функция f Регрессионная функция g
-2.00 10.25 8.94
-1.75 9.55 8.88
-1.50 8.85 8.70
-1.25 8.17 8.39
-1.00 7.50 7.96
-0.75 6.84 7.43
-0.50 6.21 6.82
-0.25 5.59 6.14
0.00 5.00 5.43
0.25 4.44 4.73
0.50 3.91 4.05
0.75 3.43 3.44
1.00 3.00 2.91
1.25 2.63 2.48
1.50 2.33 2.17
1.75 2.11 1.99
2.00 2.00 1.93
2.25 2.01 1.98
2.50 2.16 2.12
2.75 2.48 2.35
3.00 3.00 2.62
Значение среднеквадратичной погрешности равно : 0.44
ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ 2
Задание. Построить алгоритм для нахождения прогноза с по уровень временного ряда , , методом наименьших квадратов для квадратичной модели. Разработать программу, которая реализует этот алгоритм и выводит на печать значения прогноза , , . Заданы , , и : 1.11; 1.24; 1.39; 1.55; 1.73; 1.92; 2.13; 2.36; 2.59; 2.84; 3.10; 3.37; 3.65; 3.95; 4.25; 4.56; 4.88; 5.21; 5.56; 5.91; 6.27; n = 21.
Решение. В данном случае требуется решить задачу прогноза. Решим эту задачу следующим образом. Сначала, используя метод наименьших квадратов, найдем решение задачи сглаживания – тренд . А затем, используя формулу тренда, найдем решение задачи прогноза: , . В дальнейшем будем опираться на материал, изложенный в п.п. 5.3.
Задано, что тренд является параболической функцией, следовательно, . Коэффициенты , и находятся методом наименьших квадратов. В примере выполнения задания 1 расчетно-графического задания 2 подробно разбирался алгоритм построения нормальной системы, поэтому сразу запишем систему линейных уравнений для нахождения неизвестных , и :
Эта система линейных уравнений имеет единственное решение, которое находится методом Гаусса с частичным выбором ведущего элемента.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.