Files
uni/ws2019/ipi/uebungen/integration.cc
T
2020-01-17 01:56:24 +01:00

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;
}