Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursovaya.docx
Скачиваний:
26
Добавлен:
14.03.2016
Размер:
261.21 Кб
Скачать

7)Kонтрольный расчет параметров аппроксимирующей функции (без использования компьютера).

Xi

Yi

Y(x)

ΔY-Y(x)

2

2.41

2.64

-0.23

3

2.85

2.31

0.54

4

3.91

3.76

0.15

5

5.2

6.2

-1

6

9.8

9.26

0.54

8)Программы и результаты расчетов параметров на компьютере.

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<alloc.h>

#define n 3

#define m 5

void writematri(float A[n][n]);

void writevector(float B[n]);

float fi(int k,float x);

void gauss(float B[n],float A[n][n], float E[n]);

void main()

{ float A[n][n], B[n], C[n][n+1], Y[m],d[m],E[n],J,S,x[m]={0.3,0.5,0.7,0.9,1.1},y[m]={1.2,0.7,0.3,0.9,1.5};

int k,l,i;

clrscr();

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

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

{S=0;

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

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

A[k][l]=S;

}

S=0;

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

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

B[k]=S;

}

printf("matrica A[%i][%i]:\n",n,n);

writematri(A);

printf("vector B[%i]:\n",n);

writevector(B);

gauss(B,A,E);

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

{ S=0;

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

S=S+E[k]*fi(k, x[i]);

Y[i]=S;

d[i]=y[i]-Y[i];

}

puts("Num Xi\t\tYi\tY(Xi) Di=Yi-Y(Xi)");

puts("----------------------------------------------------------------");

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

{ printf("%2i %5.2f %5.2f\t%5.2f\t%5.2f\n", i+1, x[i],y[i],Y[i],d[i]);

}

puts("----------------------------------------------------------------");

S=0;

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

{ S=S+d[i]*d[i];

}

J=S;

printf("Kriteriy approksimacii J:");

printf("%5.2f", J);

float max=d[0];

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

if((fabs(d[i]))>max)

max=fabs(d[i]);

printf("\n\n|d| max:");

printf("%5.2f", max);

getch();

}

void writematri(float A[n][n])

{ int i,j;

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

{for(j=0;j<n;j++)

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

printf("\n");

}

}

void writevector(float B[n])

{ int i;

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

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

}

float fi(int k,float x)

{ if (k==0)

return 1;

if (k==1)

return x;

else return x*x*x;

}

void gauss(float B[n],float A[n][n],float E[n])

{

float t,C[n][n+1];

int k,i,j;

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

{

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

C[i][j]=A[i][j];

C[i][3]=B[i];

}

printf("\n\n Isxodnaya matrica: \n \n");

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

{

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

printf("%6.2f\t", C[j][i]);

printf("\n");

E[j] = 0;

}

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

if (C[j][i] == 0)

{

k = j;

while ((C[k+1][j] == 0) && (k < n))

k++;

if (C[k+1][j] != 0)

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

{

t = C[j][i];

C[j][i] = C[k+1][i];

C[k+1][i] = t;

}

else

printf("Matrica imeet mnojestvo reshenii");

}

for (k = 0; k < n - 1; k++)

for (j = k + 1; j < n; j++)

{

if (C[k][k] !=0)

{

t = C[j][k] / C[k][k];

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

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

}

else

printf("Ne imeet reshenii");

}

/* printf("\n Matrica privedena k treygolnomy vidy:\n\n");

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

{

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

printf("%6.2f\t", C[j][i]);

printf("\n");

} */

for (j = n - 1 ; j >= 0; j--)

{

t = C[j][n];

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

t= t - C[j][i] * E[i];

E[j] = t / C[j][j];

}

printf("\n Korni:\n\n");

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

printf("C%d = %6.2f\n", i, E[i]);

}

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