Скачиваний:
55
Добавлен:
15.06.2014
Размер:
56.85 Кб
Скачать

/*

Трацевский Никита Андреевич, группа 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;

}

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

Соседние файлы в папке Лаба 1-6 ОАИП, 2сем, 1 курс [Вариант 1]