Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Женя сам сделал.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.13 Mб
Скачать

4.2. Текст программы и результат расчётов параметров на эвм

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <cmath>

#define n 5

#define m 3

void koeff(float A[m][m], float B[m], float x[n], float y[n]);

float fi(float x, int k);

void metodgaussa(float A[m][m], float B[m], float C[m]);

void otkl(float G[n], float X[n]);

void approk(float G[n]);

void res(float X[n], float Y[n], float C[m], float G[n]);

int main()

{

int i, k, j;

float A[m][m], B[m], C[m], D[n], x[n], y[n];

printf("Vvedite X:\n");

for (i = 0; i<n; i++)

{

scanf_s("%f", &x[i]);

}

printf("Vvedite Y:\n");

for (i = 0; i<n; i++)

{

scanf_s("%f", &y[i]);

}

koeff(A, B, x, y);

printf("matrica A: ");

for (i = 0; i<m; i++)

{

printf("\n");

for (j = 0; j<m; j++)

printf("%9.4f ", A[i][j]);

}

printf("\nVektor B:\n");

for (i = 0; i<m; i++)

{

printf("%5.4f ", B[i]);

}

metodgaussa(A, B, C);

printf("\n");

printf("\nKoefficienti C1=%5.4f, C2=%5.4f, C3=%5.4f", C[0], C[1], C[2]);

printf("\n");

printf("\nF=%4.4f+%4.4f(x)+%4.4f(x*x)", C[0], C[1], C[2]);

printf("\n");

res(x, y, C, D);

printf("\n");

approk(D);

printf("\n");

otkl(D, x);

_getch();

}

float fi(float x, int k)

{

if (k == 0)

return (1);

else

if (k == 1)

return (log(x));

else

if (k == 2)

return (x);

}

void koeff(float A[m][m], float B[m], float x[n], float y[n])

{

int i, j, l;

float S;

for (i = 0; i<m; i++)

{

for (j = 0; j<m; j++)

{

S = 0;

for (l = 0; l<n; l++)

S = S + fi(x[l], i)*fi(x[l], j);

A[i][j] = S;

}

S = 0;

for (l = 0; l<n; l++)

S = S + y[l] * fi(x[l], i);

B[i] = S;

}

}

void res(float X[n], float Y[n], float C[m], float D[n])

{

int i;

float F[n];

printf("\nRezultati vichislenii:\n");

printf("i X[i] Y[i] F[i] D[i]\n");

for (i = 0; i<n; i++)

{

F[i] = C[0] + C[1] * (log(X[i])) + C[2] * (X[i]);

D[i] = Y[i] - F[i];

printf("%i %5.4f %5.4f %6.4f %6.4f\n", i + 1, X[i], Y[i], F[i], D[i]);

}

}

void approk(float D[n])

{

int i;

float Kr;

Kr = 0;

for (i = 0; i<n; i++)

Kr = Kr + D[i] * D[i];

printf("\nMin. znachenie kachestva approksimacii:");

printf("Kr=%7.6f ", Kr);

}

void otkl(float D[n], float X[n])

{

int i, max;

float g;

g = fabs(D[0]);

max = 0;

for (i = 1; i<n; i++)

if (fabs(D[i])>g)

{

g = fabs(D[i]);

max = i;

}

printf("\n\nMax. po modulu otklonenie:\n");

printf("max|g[i]|=%5.4f pri x=x[%d]=%5.4f\n", g, max + 1, X[max]);

}

void metodgaussa(float A[m][m], float B[m], float C[m])

{

int i, k, j;

float sum;

for (i = 0; i<m - 1; i++)

{

for (k = i + 1; k<m; k++)

{

C[i] = A[k][i] / A[i][i];

A[k][i] = 0;

for (j = i + 1; j<m; j++)

A[k][j] = A[k][j] - C[i] * A[i][j];

B[k] = B[k] - C[i] * B[i];

}

}

for (i = m - 1; i >= 0; i--)

{

sum = 0;

for (j = i + 1; j<m; j++)

sum = sum + A[i][j] * C[j];

C[i] = (B[i] - sum) / (A[i][i]);

}

}

Скриншот работы программы :

Глава 4Заключение

В результате проделанной работы был описан критерий аппроксимации, способ его минимизации, составлена система нормальных уравнений, параметры которой вычислили при помощи метода Гаусса, рассчитаны отклонения аппроксимирующей функции, а также максимальное по модулю отклонение. Расчёты составлены двумя способами:

-подсчитанные вручную

-подсчитанные на ЭВМ, при помощи составленной программы

25