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
#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))
{
float PointLeft,PointRight,dif,s;
int i;
float res,h;
res=0.0;
h = (Right - Left) / n;
for(i = 0; i < n; i++)
{
PointLeft=Left+(Right-Left)*(float)i/(n);
PointRight=Left+(Right-Left)*(((float)i+1.0)/n);
dif=(Right-Left)*(1.0/n);
res+=f((PointLeft+PointRight)/2)*dif;
}
res *= h;
return res;
}
int main()
{
long n;
float D = 1.57079;
float L =-D/*PI/2*/, R =D; float V, V0 = F( R ) - F( L );
printf("V0=%.9f\n", V0);
setlocale( LC_ALL, "" );
/* точное решение */
printf("Число шагов;абсолютная ошибка\n");
for ( n = 1; n < 100000; n += n/1000000+1)
{
V = Integral( L, R, n, f ); /* приближенное решение для n шагов */
printf( "%ld;=%.9f\n", n, (V-V0) ); /* n и абсолютная ошибка */
}
return 0;
}