-
Notifications
You must be signed in to change notification settings - Fork 0
/
interval.c
97 lines (68 loc) · 1.4 KB
/
interval.c
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
#include <stdio.h>
#include <stdbool.h>
double fct(double x, int selected_function_idx)
{
switch (selected_function_idx) {
case 1:
return 2*x - 4;
break;
case 2:
return (1.0/3.0) + (1.0/x);
break;
case 3:
return exp(x) - 2*x - 3;
break;
case 4:
return pow(x-2, 3) + 3;
break;
case 5:
return sin(2*x);
break;
default:
printf("unkonwn function selected\n");
break;
}
}
bool nullstelle(int selected_function_idx,
double start, double end,
double accuracy,
double* approximation,
unsigned int* iterations)
{
// initialize pointer values
*iterations = 0;
double x = 0.0;
for (unsigned int i=0 ; i< 100 ; i++)
{
x = (start + end) / 2.0;
printf("%lf\n", x);
const double y = fct(x, selected_function_idx);
*iterations = i;
if(y == 0)
{
*approximation = x;
return true;
}
else if (y < 0)
{
start = x;
}
else if (y > 0)
{
end = x;
}
}
*approximation = start;
return 0;
}
int main(void)
{
double start = -50.0;
double end = 20.0;
double approx = 0.01;
int iterations = 0;
nullstelle(3, start, end, 10.0, &approx, &iterations);
printf("Die Nullstelle ist %lf\n", approx);
printf("Anzahl an Iterationen: %d", iterations);
return 0;
}