1курс,2семестр лабы для зачета / лаба4
.docxГУО «БГУИР»
Факультет радиотехники и электроники
Кафедра микро и наноэлектроники
Отчет по
Лабораторной работе №4
Аппроксимация функций
Подготовил:
Студент гр.943201
Королюк Н.В.
Проверила:
Семижон Е.А
Минск 2020
Цель: изучить алгоритмы аппроксимации функций; освоить методику построения и использования алгебраических интерполяционных много-членов Лагранжа и Ньютона
Вариант №11
Код: #include "stdafx.h"
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
double countF(double x)
{
return pow(x,3) + 6*pow(x,2) - 0.02*exp(x);
}
int main()
{
int n = 5;
int m = 5;
double a = -5;
double b = 3;
double X[21];
double Y[21];
double L[21];
double D[21];
double c[21];
double a1[21][21];
double d;
for (int t = 1; t <= 21; t++)
{
X[t] = 0; Y[t] = 0; L[t] = 0; D[t] = 0;
}
cout << "Thnachenia x,y:" << endl;
for (int i = 1; i <= 4; i++)
{
X[i] = a + (i - 1) * (b - a) / (m - 1);
Y[i] = countF(X[i]);
cout << "x[" << i << "]=" << X[i] << "\t\t";
cout << "y[" << i << "]=" << Y[i] << endl;
}
for (int k = 1; k <= n; k++)
{
a1[k][1] = 1;
int i = 0;
for (int s = 2; s <= n; s++)
{
i = i + 1;
if (i == k)
{
i = i + 1;
}
d = X[k] - X[i];
a1[k][s] = a1[k][s - 1] / d;
for (int j = s - 1; j >= 2; j--)
{
a1[k][j] = (a1[k][j - 1] - a1[k][j] * X[i]) / d;
}
a1[k][1] = -a1[k][1] * X[i] / d;
}
}
for (int i = 1; i <= n; i++)
{
c[i] = 0;
for (int k = 1; k <= n; k++)
{
c[i] = c[i] + a1[k][i] * Y[k];
}
}
for (int j = 1; j <= 21; j++)
{
X[j] = a + (j - 1) * (b - a) / 20;
Y[j] = countF(X[j]);
L[j] = c[1] + X[j] * (c[2] + X[j] * (c[3] + X[j] * c[4]));
D[j] = fabs(Y[j] - L[j]);
}
cout << endl;
for (int i = 1; i <= 21; i++)
{
cout << fixed << "X[" << i << "]=" << X[i] << "\t";
cout << "Y[" << i << "]=" << Y[i] << "\t";
cout << "L[" << i << "]" << "=" << L[i] << "\t";
cout << "D[" << i << "]" << "=" << D[i] << endl;
}
return 0;
}