Text: |
ФІО = Горбаченко В.А.
Запитання:#include <iostream>
#include <cstdlib> // тут rand (), srand ()
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string>
// КОНСТАНТИ
#define a 0
#define b 1.79
#define h 0.2
#define MAX_X 9
#define MAX_Y 2
// МАСИВ
double mas[MAX_X][MAX_Y]={ // 10 x 2
{-0.1 ,-0.985},
{0.21 ,-0.934},
{0.63 ,-0.436},
{0.82 ,-0.0482},
{0.9 ,0.083},
{1.29 ,0.962},
{1.54 ,1.508},
{1.76 ,1.916},
{2.13 ,2.336}};
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;
}
//---------------------------------------------------------------------------
====================================
|