36 lines
1.1 KiB
C++
36 lines
1.1 KiB
C++
#include <iostream>
|
|
#include <cmath>
|
|
|
|
// Implementiert die Trapezregel mit der Intervallanzahl n
|
|
// der unteren Integrationsgrenze a, der oberen Integrationsgrenze b
|
|
// und ueber die Funktion f
|
|
template <class Function>
|
|
double trapezregel(int n, double a, double b, Function f) {
|
|
double h = (b-a)/n; // berechne intervalllaenge
|
|
double accum = 0;
|
|
for (int i = 1; i < n; i++) {
|
|
accum += f(a + i*h); // fuehre die summe aus
|
|
}
|
|
return h/2 * (f(a) + 2*accum + f(b)); // wende formel an
|
|
}
|
|
|
|
// beispiel fuer funktor
|
|
class Wurzel {
|
|
public:
|
|
double operator()(double x) {
|
|
return std::sqrt(x);
|
|
}
|
|
};
|
|
|
|
int main() {
|
|
Wurzel f;
|
|
// fuehre integration fuer verschiedene Intervallanzahlen n aus
|
|
double integ10 = trapezregel(10, 0, 1.5, f);
|
|
double integ100 = trapezregel(100, 0, 1.5, f);
|
|
double integ1000 = trapezregel(1000, 0, 1.5, f);
|
|
std::cout << "Integral ueber sqrt(x) von 0 bis 1.5" << std::endl;
|
|
std::cout << "n = 10: " << integ10 << std::endl;
|
|
std::cout << "n = 100: " << integ100 << std::endl;
|
|
std::cout << "n = 1000: " << integ1000 << std::endl;
|
|
}
|