final ipi11
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user