# 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 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; } ```