Text: |
ФІО = Горбаченко В.А.
Запитання:#include <iostream>
#include <cstdlib> // тут rand (), srand ()
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string>
// КОНСТАНТИ
#define a -2.0
#define b 0.7
#define h 0.3
#define MAX_X 10
#define MAX_Y 2
// МАСИВ
double mas[MAX_X][MAX_Y]={ // 10 x 2
{-2.11 ,0.0003},
{-1.8 ,0.0096},
{-1.5 ,0.0674},
{-1.15 ,0.1700},
{-0.95 ,0.1818},
{-0.22 ,0.0763},
{-0.1 ,0.0693},
{0.34 ,0.1031},
{0.7 ,0.5819},
{1.0 ,1.00}};
using namespace std;
// =============================================================================
double func_a1(double x){// апроксимація поліном Лагранжа
double sum=0; // сума. Волков. Стор 32 формула 5
for (int i = 0 ; i < MAX_X ; i++){
double z=1;
for (int j = 0 ; j < MAX_X ; j++)
{
if (i!=j) z*=(x-mas[j][0])/(mas[i][0]-mas[j][0]);
}
sum+=z*mas[i][1];
}
return sum;
}
// =============================================================================
double func_b(double x){ // похідна 1
// Центральная разностная производная
return (func_a1(x+h)-func_a1(x-h))/(h*2);
}
//==============================================================================
double func_c(double x){// похідна 2
// ФОРМУЛА | Друга похідна. Конспект лекцій
return (func_a1(x+h)+func_a1(x-h)-2*func_a1(x) )/(h*h);
}
//==============================================================================
int main(int argc, char* argv[])
{
for (double x = a ; x <= b+h ; x+=h){ // i <= b+h тому що необхідно захопити значення 9, чомусь не захоплює
printf(
"%.2f %9.6f %9.6f %9.6f \n\r",
// Завдання a : за формулою, Лагнанж 9 точок
x, func_a1(x),
// Завдання б: похідна 1
func_b(x),
// Завдання в: друга похідна 2
func_c(x)
);
}
system("pause");
return 0;
}
//---------------------------------------------------------------------------
====================================
|