
- •Содержание
- •2) Представление исходных данных.
- •3)Описание критерия аппроксимации и способа его минимизации.
- •. Применим операцию дифференцирования к параметру с1 :
- •И, выполняя необходимые алгебраические преобразования, получим уравнение
- •4)Описание метода вычисления коэффициентов нормальных уравнений.
- •5)Описание метода определения параметров аппроксимирующей функции (решение системы нормальных уравнений).
- •6)Схемы алгоритмов и их описание.
- •7)Kонтрольный расчет параметров аппроксимирующей функции (без использования компьютера).
- •8)Программы и результаты расчетов параметров на компьютере.
- •9) График
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]);
}