define _USE_MATH_DEFINES include stdlib include math include stdio inc

 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
#define _USE_MATH_DEFINES
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <locale.h>
float f( float x )
{
float k=tan(x);
return k;
}
float F( float x )
{
float p;
p=-log(fabs(cos(x)));
return -log(fabs(cos(x)));
}
/* функция численного интегрирования */
float Integral(float Left, float Right, int n, float (*func)(float))
{
int i;
float res,h;
res=0.0;
//printf("Left=%.9f ",Left);
h = (Right - Left) / n;
for(i = 0; i < n-1; i++)
{
//printf("Func=%.7f ", f(Left + h * (i+0.5)));
res+= f(Left + h * (i + 0.5));
//printf("res=%.7f\n",res);
}
//printf("///////%.9f\n", Left+h*i);
res *= h;
if ((Left+h*i)<Right)
res += (Right - (Left+h*i))*f((Right/2)+(Left+h*i)/2);
return res;
}
int main()
{
long n;
float D = 1.57079;
float L =-D/*M_PI/4*/, R =D /*M_PI/4*/; float V, V0 = F( R ) - F( L );
printf("V0=%.9f\n", V0);
setlocale( LC_ALL, "" );
/* точное решение */
printf("Число шагов;абсолютная ошибка\n");
for ( n = 1; n < 100; n += n/100+1)
{
V = Integral( L, R, n, f ); /* приближенное решение для n шагов */
printf( "%ld;=%.9f\n", n, (V-V0) ); /* n и абсолютная ошибка */
}
return 0;
}