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

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

#include <stdio.h>

#include <math.h>

#include <conio.h>

#include <stdlib.h>

#define n 5

#define m 3

float fi(float x, int g);

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

void krit(float x[n],float y[n],float C[m],float *Kr,float Yl[n],float D[n],float *Dmax, int *IM);

int ved(float A[m][m], int i);

void perest(float A[m][m],float B[m], int i, int IM);

void rkoeff (float A[m][m],float B[m],int i,int l);

void prgauss(float A[m][m],float B[m]);

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

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

int main ()

{

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

int i,k,l,IM;

printf("Vvedite x[%i]:\n",n);

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

{

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

}

printf("Vvedite y[%i]:\n",n);

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

{

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

}

printf ("approksim. funkcii metodom naimenshih kvadratov\n metod gauusa\n\n");

koef(x,y,A,B);

printf(" Matrica A Vektor B:\n");

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

{

for(k=0;k<m;k++) printf("%9.3f ",A[i][k]);

printf("%9.3f \n",B[i]);

}

gauss(A,B,C);

printf("\n Vektor C:\n");

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

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

krit(x,y,C,&Kr,Yl,D,&Dmax,&IM);

printf("\n znachenia approcsim. funkcii\n");

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

{

printf("%.3f ",Yl[i]);

}

printf("\notklonenie approcsim. funkcii\n");

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

{

printf("%.3f ",D[i]);

}

printf("\n kriterii approksimacii J=%.3f",Kr);

printf("\n\n maksimalnoe otkolnenie = %.3f, pri x[%i]=%.1f\n\n",fabs(Dmax),IM+1,x[IM]);

getch();

return 0;

}

float fi(float x, int g)

{

if (g==0)

return 1;

else

if (g==1)

return (x);

else

if (g==2)

return (x*x*x);

}

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

{

int k,l,i;

float S;

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

{

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

{

A[k][l]=0;

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

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

}

}

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

{

B[k]=0;

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

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

}

}

void krit(float x[n],float y[n],float C[m],float *Kr,float Yl[n],float D[n],float *Dmax, int *IM)

{

int i,k;

*Kr=0;

k=0;

Yl[0]=0;

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

{

Yl[i]=C[0]*fi(x[i],k)+C[1]*fi(x[i],k+1)+C[2]*fi(x[i],k+2);

D[i]=y[i]-Yl[i];

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

}

*Dmax=D[0];

*IM=0;

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

{

if (fabs(D[i])>fabs(*Dmax))

{

*Dmax=D[i];

*IM=i;

}

}

}

int ved(float A[m][m], int i)

{

int g,h,k;

float maxa,temp;

maxa=0;

h=-1;

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

if (fabs(A[k][i])>fabs(maxa))

{

maxa=A[k][i];

h=k;

}

if (h==-1)

{

printf("\n vyrojdennaya matrica \n");

exit (1);

}

return h;

}

void perest(float A[m][m],float B[m], int i, int IM)

{

int j;

float temp;

if (IM!=i)

{

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

{

temp=A[i][j];

A[i][j]=A[IM][j];

A[IM][j]=temp;

}

temp=B[i];

B[i]=B[IM];

B[IM]=temp;

}

}

void rkoeff (float A[m][m],float B[m],int i,int l)

{

int j;

float Q;

Q=A[l][i]/A[i][i];

A[l][i]=0;

for (j=i+1;j<m;j++) A[l][j]=A[l][j]-Q*A[i][j];

B[l]=B[l]-Q*B[i];

}

void prgauss(float A[m][m],float B[m])

{

int i,l,IM;

float Q;

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

{

IM=ved(A,i);

perest(A,B,i,IM);

for (l=i+1;l<m;l++) rkoeff(A,B,i,l);

}

}

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

{

int j,k;

float sum;

C[m-1]=B[m-1]/A[m-1][m-1];

for(k=m-2;k>=0;k--)

{

sum=B[k];

for (j=k+1;j<m;j++) sum=sum-A[k][j]*C[j];

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

}

}

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

{

prgauss(A,B);

obrgauss(A,B,C);

}

Результаты: