# Integralrechnung in Java



## Alexander Meischt (26. Apr 2016)

Hallo!
Wir machen gerade im Informatik-Unterricht eigene Projekte und ich habe mich für Integralrechnung entschieden. Nur habe ich absolut keine Ahnung wo ich anfangen soll. 

Wie gebe ich Funktionen in Java ein? 

Bilde ich eine Stammfunktion oder bestimme ich das Integral mithilfe einer Anäherung durch Ober- oder Untersumme? 

Hilfe..


----------



## JStein52 (26. Apr 2016)

Willst du alles selber machen oder darfst du auch fertige Bibliotheken verwenden ?


----------



## Alexander Meischt (26. Apr 2016)

Zuerst vielen Dank für die schnelle Antwort! 
Die Verwendung von Bibliotheken ist auf jeden fall legitim, würde aber gerne beide Wege verstehen.


----------



## HarleyDavidson (26. Apr 2016)

Na um die Funktionen selbst zu implementieren,
würde ich die Formeln unter https://de.wikipedia.org/wiki/Integralrechnung
verwenden und daraus eine Methode basteln.
Für Näherungsfunktionen musst du die Funktion rekursiv aufrufen.


----------



## JStein52 (26. Apr 2016)

Für eine fertige Bibliothek schau dir mal Apache Commons Math an: https://commons.apache.org/proper/commons-math/userguide/analysis.html


----------



## Tobse (26. Apr 2016)

Beliebige Funktionen in Java so abzubilden, dass du eine Aufleitung errechnen kannst, ist absolut nicht trivial. Wenn es nur um Näherungswerte für einen Interval geht, kannst du  einfach mit einer Library zum Evaluieren von Mathematischen Termen (siehe Post von @JStein52) rechnen (siehe Beispiele hier).


Wenn es wirklich um den Funktionsterm der Integralfunktion geht, hast du zwei Möglichkeiten:

Nur bestimmte Funktionstypen erlauben (z.b. Ganzrational bis zum Xten Grad); hier gibt der User dann nur die Koeffizienten an; die Struktur des Funktionsterms (und damit auch die Struktur des Funktionsterms der Aufleitung) ist schon im Voraus bekannt. Zur Laufzeit verrechnest du nurnoch die Koeffizienten und gibts die Formel formatiert aus.
Beispiel: Koeffizieten für Ganzrational 2. Grades: f(x) = 3x² + 5x + 1 ergibt (a=3, b=5, c=1). Allgemeine Aufleitung für f(x) = ax² + bx + c ist F(x) = (a/3)x³ + 0,5bx² + cx. Damit wird aus der User-Eingabe (a=3, b=5, c=1) F(x) = x³ + 2.5x² + x
Du implementierst einen Algorithmus (ggf. musst du ihn auch selbst Entwickeln), der alle bekannten Aufleitungsregeln auf einen gegebenen, geparsten Funktionsterm anwendet. Hierbei hilft dir auch eine Mathe-Library, welche Terme für dich parsen kann. Dieser Weg ist absolut nicht trivial (z.B. Mathematika spukt für einfache Terme z.T. Terme für Auf-/Ableitungen aus, die über mehrere Zielen gehen). Dafür aber natürlich umso eindrucksvoller.


----------



## stg (26. Apr 2016)

Tobse hat gesagt.:


> Aufleitung



Er hat das böse Wort gesagt, steinigt ihn! 



Tobse hat gesagt.:


> Beliebige Funktionen in Java so abzubilden, dass du eine Aufleitung errechnen kannst, ist absolut nicht trivial.



Das ist sogar unmöglich. Sogar, wenn man es auf integrierbare Funktionen beschränkt, bleibt es unmöglich. Nicht jede integrierbare Funktion besitzt eine Stammfunktion.


Und überhaupt, zunächst einmal die Frage an @Alexander Meischt: Was willst du überhaupt machen? Wilst du Integrale ausrechnen oder wirklich Stammfunktionen bestimmen? Wenn du Integrale berechnen willst, umfasts das auch unbestimmte Integrale?



Alexander Meischt hat gesagt.:


> Bilde ich eine Stammfunktion oder bestimme ich das Integral mithilfe einer Anäherung durch Ober- oder Untersumme?



Ganz salopp: Wenn du mit geringem Aufwand eine Stammfunktion bilden kannst (etwa bei Polynomen, trigonometrische Funktionen, ...) dann mache das, wenn nicht, dann bilde Näherungssummen. Das müssen übrigens nicht Ober- und Untersumme sein, sondern beliebige Zwischensummen tun auch ihren dienst. Die Berechnung von Ober- _und  _Untersumme hingegen bräuchtest du nur, um Integrierbarkeit nachzuweisen.


----------

