2009-07-28 4 views
2

Ich bin für eine Bessel-Funktion in Java suchen, die Excel-Funktion BESSELI Spieler Beschreibung zur Verfügung gestellt:Bessel Bibliotheksfunktion in Java


Gibt die modifizierte Bessel-Funktion, die auf die Bessel-Funktion entspricht bewertet für rein imaginäre Argumente.

Syntax BESSELI (x, n)

X ist der Wert, bei dem die Funktion zu bewerten.

N ist die Reihenfolge der Bessel-Funktion. Wenn n keine Ganzzahl ist, wird es abgeschnitten.


Ich habe Dinge gefunden, das nahe aussehen, aber es gibt viele verschiedene Arten von Bessel-Funktion ...

Meine andere Option ist, um eine Annäherung zu versuchen und zu leiten, aber das klingt ziemlich hart. Kann mir jemand einen guten Rat geben, wie man diese Excel-Funktion in Java darstellt?

+0

Ich denke, es gibt nur einen "Typ" von Bessel-Funktionen (http://en.wikipedia.org/wiki/Bessel_function), verschiedene Befehle, aber alles, was Sie finden, sollte funktionieren. – falstro

+0

Nein, nicht wahr. Es gibt J und Y, ich und K, ber und bei, ker und kei, usw. alle in der Reihenfolge n. – duffymo

+0

Richtig, ich erinnere mich jetzt vage daran ... Entschuldigung. Ich nehme an, die meisten Bibliotheken, die sich mit Bessel-Funktionen beschäftigen, werden wahrscheinlich alles unterstützen, was Sie brauchen. – falstro

Antwort

1

JScience bietet eine Klasse SpecialMathsUtils mit modifizierten Bessel-Funktionen.

Wenn die Excel-Funktion für Sie in der aktuellen Form/Implementierung besonders wichtig ist, können Sie Excel direkt verwenden, indem Sie ein Excel-COM-Objekt starten und die Methode in Excel aufrufen. Ich habe dies vor der Verwendung JACOB getan und es funktioniert in Ordnung.

Dies hängt jedoch von Ihrem Anwendungsfall, den Leistungskriterien und dem Bereitstellungsszenario ab.

+0

Ich versuche derzeit, aus verschiedenen Gründen (einschließlich der Leistung) von Excel-Modellen wegzukommen, aber danke für Ihren Vorschlag. –

+0

Fair genug. Habe gerade das obige re modifiziert. Das JScience-Zeug –

+1

Die JScience-Bibliothek scheint nur modifizierte Bessel-Funktionen der Reihenfolge 0 und 1 anzubieten, nicht N, wie in der Frage gefordert. –

1

Dig eine Kopie von Numerical Recipes, die Sie in Fortran, C und C++ Aromen finden (oder, wenn Ihre Bibliothek sehr gut ist, auch in Basic und Pascal) und übersetzen. Durch die üblichen Standards exotischer Funktionen sind Bessel-Funktionen recht "einfach". Für weitere Informationen können Sie bei http://mathworld.wolfram.com/BesselFunction.html

4

I Bild starten, sollten Sie ganz einfach in den Hafen eine dieser Lage:

http://www.astro.rug.nl/~gipsy/sub/bessel.c

+0

Suchen Sie nach Bessk0, Bessk1, Bessk. –

+0

Wenn ich jetzt nur den Quellcode anschaue ... sieht vielversprechend aus. Vielen Dank. –

1

Sie konnten die Digitale Bibliothek mathematischer Funktionen verwenden:

http://dlmf.nist.gov/

Hier sind einige kurze Dinge über die Programmierung in Java und die Berechnung spezieller Funktionen, die ich aus der Erfahrung gelernt haben.

Wenn Sie die CPU-Leistung dafür haben, verwenden Sie BigDecimal so oft wie möglich. Momentan (im Juli 2015) scheint Microsoft keine eigene arbiträre numerische Präzisionsbibliothek im .NET-Framework zu haben. Das macht wissenschaftliches Rechnen schwierig. Wie sie die Präzision in VB6/VBA für Excel erreicht haben, entzieht sich mir.

BigDecimal hingegen ist relativ einfach zu bedienen. Ich wurde von einem Freund zu BigDecimal eingeführt und darüber in einem Buch lesen Murach auf Java 5. Ich hoch in die Dokumentation Oracle würde vorschlagen:

http://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html

Zweitens gibt es einen Unterschied, wie Sie wahrscheinlich beobachtet zwischen Fließkommafehler und dem mathematisch-numerischen Fehler, der in einer Annäherung an eine spezielle Funktion eingeführt wird. Sowohl der mathematisch-numerische Fehler als auch der Gleitkommafehler machen es schwierig, die Anwendungsentwicklung zu erschweren. Verwenden Sie viele verschiedene Programme, um sich selbst und Ihre Berechnung zu überprüfen.

Drittens sind Stringkonstruktoren für BigDecimal in vielen Fällen dem Doppelkonstruktor vorzuziehen. Siehe oben die Oracle-Dokumentation.

Viertens, seien Sie sehr vorsichtig bei der Verwendung von BigDecimal mit der unbegrenzten Genauigkeit von MathContext. Beachten Sie, dass Sie wahrscheinlich setScale verwenden müssen, um anzugeben, wie viele Dezimalstellen Sie für Ihre Anwendung benötigen, um zu vermeiden, dass Dezimal-Ausdrücke und die von der JVM ausgegebenen Ausnahmen unendlich wiederholt werden.

Fünftens, zuerst versuchen, ganzzahlige Argumente für die erste Art modifizierte Bessel-Funktion zu überprüfen. Außerdem können Sie Bessel-Funktionen entweder aus den für Sie verfügbaren Rekursionsrelationen oder aus ihren Definitionen als degenerierte hypergeometrische Funktionen berechnen. Schließlich

,

Viel Glück!

Verwandte Themen