- •Лабораторна робота №1 поліноміальна інтерполяція
- •1.1.1 Інтерполяційний багаточлен Лагранжа
- •1.1.2 Схема Ейткена
- •1.1.3 Кінцеворізницеві інтерполяційні формули
- •1.2 Завдання до роботи
- •1.3 Контрольні питання
- •Лабораторна робота № 2 апроксимація функцій, які задані таблицею
- •2.1 Короткі теоретичні положення
- •2.2 Завдання до роботи
- •2.3 Контрольні питання
- •Лабораторна робота №3 інтерполяція функції кубічними сплайнами
- •3.1 Короткі теоретичні положення
- •3.2 Завдання до роботи
- •3.3 Контрольні питання
- •Лабораторна робота №4 чисельне інтегрування
- •4.1 Короткі теоретичні положення
- •4.1.1 Квадратурні формули прямокутників, трапецій і Сімпсона
- •4.1.2 Алгоритм прямокутників-трапецій
- •4.2 Завдання до роботи
- •4.3 Контрольні питання
- •Лабораторна робота №5 чисельне диференціювання
- •5.1 Короткі теоретичні положення
- •5.1.1 Обчислення похідної за її визначенням
- •5.2 Кінцеворізницеві апроксимації похідних
- •5.3 Формули чисельного диференціювання на основі інтерполяційних багаточленів Лагранжа
- •5.2 Завдання до роботи
- •5.3 Контрольні питання
- •6 Література
- •Навчальне видання
2.3 Контрольні питання
У чому суть наближення функції, яка задана таблицею, за методом найменших квадратів? У яких випадках він застосовується? Чим відрізняється цей метод від методу інтерполяції?
У чому сенс лінеаризації експериментальних залежностей? Яким чином завдання побудови наближеної функції у вигляді різних елементарних функцій зводиться до випадку лінійної функції?
У чому полягає основна ідея методу найменших квадратів?
Чому в методі наїменьщих квадратів використовується принцип мінімуму суми квадратів абсолютних величин, а не суми самих абсолютних величин? Відповідь обгрунтуйте і підтвердите прикладами.
Додаток 2.1
/* Визначення параметрів емпіричної формули із двома параметрами методом найменших квадратів */
#include <stdio.h>
#include <conio.h>
#include <cmath>
int i,j,k,m,n=20;
float d1,a[7],b[7],d[7];
float *x=new float[n];
float *y=new float[n];
float *x1=new float[n];
float *z1=new float[n];
void mnk_calculate_parameters(void);
void main()
{
printf ("Enter number of experimental points m > i\n");
scanf_s("%i",&m);
printf ("Enter pairs of values xi, yi; i=1,...,m\n");
for(i=1; i<=m; i++, printf("\n"))
scanf_s("%f%f",&x[i],&y[i]);
for (j=0; j<=6; j++)
{
switch (j)
{
case 0:
for(i=1; i<=m; i++)
{
x1[i]=x[i];
z1[i]=y[i];
};
break;
case 1:
for(i=1; i<=m; i++)
z1[i]=x[i]*y[i];
break;
case 2:
for(i=1; i<=m; i++)
z1[i]=1/y[i];
break;
case 3:
for(i=1; i<=m; i++)
z1[i]=x[i]/y[i];
break;
case 4:
for (i=1; i<=m; i++)
z1[i]=log(y[i]);
break;
case 5:
for (i=1; i<=m; i++)
{
x1[i]=log(x[i]);
z1[i]=y[i];
};
break;
case 6:
for (i=1; i<=m; i++)
z1[i]=log(y[i]);
break;
}
mnk_calculate_parameters();
};
for (d1=d[0],k=0,i=1; i<=6; i++)
if (d[i]<d1)
{
d1=d[i];
k=i;
};
printf ("The empirical formula N=%i d=%f", k, d1);
printf (" k=%f b=%f\n",a[k],b[k]);
printf("\nPress any key for continue...");
delete []x;
delete []y;
delete []x1;
delete []z1;
_getch();
}
Додаток 2.2
/* Функція обчислення параметрів лінійної залежності при вирівнюванні експериментальних даних*/
void mnk_calculate_parameters(void)
{
float k0, b0, a1, b1, a2, b2, f2;
for (a1=b1=a2=b2=0, i=1; i<=m; i++)
{
a1=a1+x1[i];
b1=b1+z1[i];
a2=a2+x1[i]*x1[i];
b2=b2+x1[i]*z1[i];
};
d1=m*a2-a1*a1;
k0=(m*b2-a1*b1)/d1;
b0=(b1*a2-a1*b2)/d1;
for (d1=f2=0, i=1; i<=m; i++)
{
f2=f2+z1[i]*z1[i];
d1=d1+(z1[i]-k0*x1[i]-b0)*(z1[i]-k0*x1[i]-b0);
};
d[j]=sqrt(d1/f2);
a[j]=k0;
b[j]=b0;
}
