include stdafx include complex include iostream include fstream define

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "stdafx.h"
#include "complex"
#include "iostream"
#include "fstream"
#define _USE_MATH_DEFINES
#include <math.h>
using namespace std;
const int C = 4; //точка интерполяции
const int K = 1; //порядок производной
const int M = 5; //степень многочлена
const double A = 0.1;
const double H = 0.025;
double y[M+1];
double x[M+1];
double B,P,Real;
double MinDy,MaxDy;
double RlMax, RlMin,R;
double Func(double x); //function y=e^x+ctg(x);
double d1Func(double x);
double d1LaGrange(double T);
void Rl(double T);
void main ()
{
ofstream out("output.txt");
int i;
double b=A;
//заполняем массив значений функции
for (i=0;i<=M;++i)
{
b +=H;
out << "x = "<< (x[i] = A+b) << "\ty = " << (y[i] = Func(A+b)) << "\n";
}
B = A+b;
out << "\nТочка интерполяции - x[2].";
out << "\nВычисление первого дифференциала с помощью многочлена Лагранжа 5-го порядка. Рез-т : " << (P = d1LaGrange(x[C]));
out << "\nНепосредственное вычисление, x = " << x[C] << ", y(x) = " << (Real=d1Func(x[C]));
out << "\n" << (MinDy = Func(A));
out << "\n" << (MaxDy = Func(B));
out << "\nMin d3y = " << MinDy <<"\nMax d3y = " << MaxDy;
out << "\nАбсолютная погрешность составляет " << (R = abs(P-Real));
Rl(x[C]);
out << "\n" << RlMax;
out << "\n" << RlMin;
if ((RlMax > R)&&(RlMin < R)) out << "\nНеравенство Rmin(x) < R(x) < Rmax(x) - выполняется!!!";
}
double Func(double x)
{
double temp;
temp = M_E;
for ( int ii = 1; ii < (x + 3); ii++ ) temp *= M_E;
return (1 / temp) + log10( x + 3 );
}
double d1Func(double x)
{
double temp;
temp = M_E;
for ( int ii = 1; ii < (x + 3); ii++ ) temp *= M_E;
return (-1 / temp) + (1 / M_LN10 / ( x + 3 ));
}
double d1LaGrange(double T)//,kz ,kz ,kz
{
double Sum,tmpSum,a,a_n;
Sum = 0;
for (int s = 0;s<=5;++s)//подсчет суммы
{
a = Func(x[s]);
//подсчет функции в точке на знаменатель - это константа
for (int i = 0;i<=5;++i)
{
if (i==s) continue;
a/=(x[s]-x[i]);
}
tmpSum = 0;
//подсчет числителя
for (int j = 0; j<=5;++j)
{
if (j==s) continue;
a_n = 1 ;
for (int i = 0; i<=5;++i)
{
if ((i==j)||(i==s)) continue;
a_n *=( T - x[i]);//собираем числитель по множителям
}
tmpSum+=(a*a_n);//числитель и знаменатель для одной точки
}
Sum+=tmpSum;
}
return Sum;
}
void Rl(double T)
{
double tmp = 1;
for (int i = 0;i<=M;i++)
{
tmp*=(T-x[i])/(i+1);
}
RlMax = tmp * MaxDy;
RlMin = tmp * MinDy;
}