Николай Коровин (06.11.2016 18:27, просмотров: 355) ответил Ксения на Если базисы ортогональны, да еще и масштабированные под единичную норму (а это делается всегда заранее), то никого МНК тут и в помине нет - попросту вектор данных перемножается с каждым из базисов, а полученные скалярные произведения как раз и
Ну МНК тоже довольно механическая операция…
#define NBASIS 8 //Число базисных функций
static double GAUSS_A[NBASIS][NBASIS], GAUSS_C[NBASIS], GAUSS_X[NBASIS];
//Заполняем матрицы
memset (GAUSS_C,0,sizeof(GAUSS_C));
for (i=0;i<NBASIS;i++) //Для всех уравнений в СЛАУ
for (b=0;b<Всего_есть_отсчётов_АЦП;b++) GAUSS_C[i]+=Значения_аппроксимируемого_сигнала_по_y[b]*Basis(i,Загнанные_в_нужный_масштаб_значения_времени[b]); //Свободный член i-го уравнения
memset (GAUSS_A,0,sizeof(GAUSS_A));
for (i=0;i<NBASIS;i++) //Для всех уравнений в СЛАУ
for (j=0;j<NBASIS;j++) //Для всех неизвестных в каждом уравнении
for (b=0;b<Всего_есть_отсчётов_АЦП;b++) GAUSS_A[i][j]+=Basis(i,Загнанные_в_нужный_масштаб_значения_времени[b])*Basis(j,Загнанные_в_нужный_масштаб_значения_времени[b]); //Коэффициент при каждой неизвестной
for(i=0;i<NBASIS-1;i++)
{
for(j=i+1;j<NBASIS;j++) if(fabs(GAUSS_A[j][i])... //Считаем СЛАУ методом Гаусса
...}
//GAUSS_X содержит коэффициенты для базисов 0 .. NBASIS-1