
Лаба 1-6 ОАИП, 2сем, 1 курс [Вариант 1] / Отчет2_3
.docx/*
Трацевский Никита Андреевич, группа 243302
Лабораторная работа №3
Тема: АППРОКСИМАЦИЯ ФУНКЦИЙ
Вариант 1
*/
Консольный режим.
Код программы:
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#pragma argsused
int sign(int aa)
{
if(aa < 0) return -1;
else return 1;
}
double* MQ(double** a, double* b, int n);
double* MQ(double** a, double* b, int n)
{
double* x;
double* d;
double** s;
double* y;
double del;
int k, i, j;
x = new double[n];
s = new double* [n];
d = new double [n];
y = new double [n];
for(i=0; i<n; i++)
s[i] = new double[n];
for (k=0; k<n; k++)
{
del=a[k][k];
if (k!=1)
for ( i=0; i<=k-1; i++)
del = del - d[i]*pow(s[i][k], 2);
d[k] = sign(del);
s[k][k] = sqrt(fabs(del));
for (j= k+1; j<n; j++)
{
del = a[k][j];
if (k!=1)
for (i=0; i<= k-1; i++)
del = del -d[i]*s[i][k]*s[i][j];
s[k][j] = del / (s[k][k]*d[k]);
}
}
y[1]= b[1] / s[1][1]*d[1];
for (i = 1; i< n; i++)
{
del = b[i];
for (k = 0; k <= i-1; k++)
del = del - d[k]*y[k]*s[k][i];
y[i] = del / s[i][i]*d[i];
}
x[n-1] = y[n-1] / s[n-1][n-1];
for (i = n-2; i >= 0; i--)
{
del = y[i];
for (k= i+1; k<n; k++)
{
del = del - x[k]*s[i][k];
}
x[i]= del / s[i][i];
}
for(int i=0; i<0; i++) delete[] a[i];
return x;
}
double f(double x);
double f(double x)
{
return 4 * x - 7*sin(x);
}
double fiK(double x, int k);
double fiK(double x, int k)
{
if (k==0) return 1;
if (k==1) return x;
return x * fiK(k-1,x) * (2 * k - 1) - fiK(k-2,x) * (k - 1);
}
int main(int argc, char* argv[])
{
double *xj, *xi, *yi, *yj, *fi, **g, *del, *c, *b, p;
int i, a, be, m, n, nn, j, k;
a = -2;
be = 3;
m = 11;
n = 3;
g = new double* [n];
c = new double [n];
b = new double [n];
xi = new double[m];
yi = new double [m];
xj = new double [nn];
yj = new double [nn];
fi = new double [nn];
del = new double [nn];
for (i=0; i<n; i++)
g[i] = new double [n];
for (i=0; i<m; i++)
{
xi[i] = a + i * (be - a)/(m - 1.);
yi[i] = f(xi[i]);
xi[i] = (xi[i] - (be-a)/2.) * 2./(be-a);
}
for (j = 0; j<nn; j++)
{
xj[j] = a + j * (be - a)/(nn - 1.);
yj[j] = f(xj[j]);
}
for (i = 0; i<n; i++)
{
b[i] = 0;
for (k = 0; k<n; k++)
{
g[i][k] = 0;
for (j = 0; j<m; j++)
g[i][k] += fiK(xi[j],i)*fiK(xi[j],k);
}
for (j = 0; j<m; j++)
b[i] += fiK(xi[j],i) * yi[j];
}
c = MQ(g, b, n);
for (j=0; j<nn; j++)
{
p = c[n-1];
for (i= n - 2; i >= 0; i--)
p = p * xj[j] + c[i];
fi[j] = p;
}
for (j = 0, i = 0; j<nn, i<nn; j++, i++)
{
del[i] = fabs(yj[i] - fi[i]);
cout << "\n Y = " << setw(10) << yj[j] << " Fi = " << setw(10) << fi[j] <<" Raznost' = " << del[i];
}
getch();
return 0;
}
Скриншот работоспособности программы: