Курсовая работа: Численные методы при решении задач
printf ("\n%10.4lg%8.4lg%8.4lg", *(xmp[i]), *(xmp[i] + 1), ym[i]);
printf ("\nНачинаем аппроксимацию...\n");
// Требуется посчитать am. Так:
// am - это матрица-столбец искомых коэффициентов. Представляет из себя
// am = (a1, a2, ..., aK)T высотой n, а считается так:
// am = Inverse[Transpose[F].F].Transpose[F].ym, где
// F - мартица, составленная специальным образом (смотри ниже):
// Выделяем памяти сразу на все матрицы - F, TF, REV, TMP, AC2
#define memneed (((n * yr) + (yr * n) + (n * n) + (n * n) + ((n-1) * (n-1))) * eof (double))
if ((F = malloc (memneed)) == 0)
{
printf ("\nОшибка распределения памяти. Замените компьютер");
abort(); // Если не удалось выделить для неё память
}
TF = F + (n * yr);
REV = TF + (yr * n);
TMP = REV + (n * n);
AC2 = TMP + (n * n);
// Заполнение значениями матрицы F
for (j = 0; j < yr; j++) // Цикл по строкам F
{
for (i = 0; i < n; i++) // И по столбцам F
{
// Заполняем j-й строка значениями функций fi
*(F + (j * n + i)) = f (xmp[j], (i + 1));
}
}
// Матрица F готова. Надо вычислить по формуле:
// am = Inverse[Transpose[F].F].Transpose[F].ym значение