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