> * (TF + (j * yr + i)) = * (F + (i * n + j));
}
}
// Вважаємо TMP = TF * F
MatrixMultiply (TF, n, yr, F, n, TMP);
// Далі вважаємо оперделітель від TMP
if ((dt = Determinant (TMP, n)) == 0)
{
printf (" nТак, як визначник матриці TF * F дорівнює 0, n "
"неможливо порахувати зворотну до них матрицю n ");
free (F); abort ();
}
// Складаємо зворотну матрицю.
for (j = 0; j
{
for (i = 0; i
{
// Беремо Мінор елемента ij
MMinor (TMP, AC2, n, i, j);
// Знак елемента
flag = ((i + j)% 2 == 0)? 1. : -1.; p>// Відразу транспонування
* (REV + (i * n) + j) = flag * Determinant (AC2, (N - 1))/dt;
}
}
// Множимо зворотну матрицю на транспоновану до F
// тобто Inverse (TF * F) * TF
// Така матриця буде розміру yr * n, тому цілком вистачить пам'яті для F
MatrixMultiply (REV, n, n, TF, yr, F);
// І, нарешті, все це множимо на матрицю Y і отримуємо шукані
// коефіцієнти a1, a2, ... aN
// Для такої матриці (розміром 1 * n) цілком вистачить пам'яті під REV
MatrixMultiply (F, n, yr, ym, 1, REV);
// Все, друкуємо відповідь
printf (" nВичісленія успішні, отриманий наступні коефіцієнти: ");
for (i = 0; i
printf (" na% d =% lg", i, * (REV + i));
// Звільнити пам'ять
free (F);
printf (" nНатисніть any key");
getch ();
printf (" nDone. n");
return 0;
}
Результат рішення задачі 30 на ЕОМ
Після запуску програма відразу ж починає розрахунок коефіцієнтів. На екран виводиться наступне:
Програма апроксимації функції методом найменших квадратів для моделі
y = a1x1 + a2x2 ^ 2 + a3x1x2
за заданою таблиці експерименту.
Розробник: студент групи ПС-146
Нечаєв Леонід Володимирович
25.02.2004
Відомі результати спостережень:
x1 x2 y
1 1 0
-1 -1 -2
2 лютого -2
3 -2 29
-2 4 54
Починаємо апроксимацію ...
Обчислення успішні, отримані наступні коефіцієнти:
a0 = 1
a1 = 2
a2 = -3
Натисніть any key
Done.
Результат вірний, тому що при підстановці змінних в модель виходить правильне рівність:
0 = 1 * 1 + 2 * 1 - 3 * 1 * 1
-2 = 1 * (-1) + 2 * (-1) - 3 * (-1) * (-1)
-2 = 1 * 2 + 2 * 2 - 3 * 2 * 2
29 = 1 * 3 + 2 * (-2) - 3 * 3 * (-2)
54 = 1 * (-2) + 2 * 4 - 3 * (-2) * 4
Висновок:
Задача вирішена вірно.