Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Chis_Met_Lab_2010.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

2.3 Контрольні питання

  1. У чому суть наближення функції, яка задана таблицею, за методом найменших квадратів? У яких випадках він застосовується? Чим відрізняється цей метод від методу інтерполяції?

  2. У чому сенс лінеаризації експериментальних залежностей? Яким чином завдання побудови наближеної функції у вигляді різних елементарних функцій зводиться до випадку лінійної функції?

  3. У чому полягає основна ідея методу найменших квадратів?

  4. Чому в методі наїменьщих квадратів використовується принцип мінімуму суми квадратів абсолютних величин, а не суми самих абсолютних величин? Відповідь обгрунтуйте і підтвердите прикладами.

Додаток 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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]