Die Mathe-Redaktion - 06.12.2019 06:53 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte / Top 15
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt? im neuen Schwätz
ListenpunktWerde Mathe-Millionär!
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 513 Gäste und 7 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von Spock mire2
Mathematische Software & Apps » Mathematica » MiniMaxApproximation arcsin(sqrt(x/2)) / sqrt(x/2) im Intervall [0, 1/2]
Druckversion
Druckversion
Autor
Beruf J MiniMaxApproximation arcsin(sqrt(x/2)) / sqrt(x/2) im Intervall [0, 1/2]
AlphaSigma
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 23.11.2012
Mitteilungen: 168
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2019-10-02


Hallo,

im Forum von www.mikrocontroller.net sucht jemand für eine math-lib eine
minmax rationale Approximation für
\[\arcsin\left(\sqrt{x/2}\right) / \sqrt{x/2}\]
im Intervall [0, 1/2]. Der relative Fehler soll kleiner 55 Bit, also 2e-17 sein. Dafür gibt es laut dieser Seite Function Approximations Package in Mathematica die Funktion
MiniMaxApproximation. Ich habe kein Mathematica und habe daher auf wolfram alpha versucht
\[
\text{MiniMaxApproximation} [sin^{-1} (x^{1/2}) / x^{1/2},{x,\{0,1/2\},6,6}]
\] zu lösen. Das und andere Umschreibungen der Aufgabe versteht wolfram alpha scheinbar nicht. Habe ich das Problem nur nicht richtig formuliert oder bietet wolfram alpha diese Funktionalität nicht?
Ich verwende Debian Linux und habe u.a. Maxima, Axiom, Reduce und Octave. Da habe ich die Funktionalität noch nicht gefunden (habe aber auch noch nicht richtig gesucht).
Kennt hier jemand die "Syntax" von wolfram alpha oder wäre jemand mit Mathematica bereit, die Koeffizienten für das rationale Approximationspolynom zu generieren?

Vielen Dank
AlphaSigma




  Profil  Quote  Link auf diesen Beitrag Link
StefanVogel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 26.11.2005
Mitteilungen: 3373
Aus: Raun
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2019-10-05


Hallo AlphaSigma,
online rechnen geht mit mathematica.wolframcloud.com Sign up for free, doch bin ich noch nicht weiter gekommen als bis zur Fehlermeldung "Failed to locate the extrema in 20 iterations. The function ArcSin[Sqrt[x]]/Sqrt[x] may be vanishing on the interval {0,1/2} or the WorkingPrecision may be insufficient to get convergence", auch nicht mit geänderten Intervall, WorkingPrecision, MaxIterations.

Viele Grüße,
  Stefan



  Profil  Quote  Link auf diesen Beitrag Link
hyperG
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.02.2017
Mitteilungen: 831
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2019-10-05


Vermutlich soll die Wandlung einer gegebenen expliziten Funktion in ein Bruch 2er Polynome einfach nur ein Geschwindigkeitsgewinn bringen
(oder eine Sprache kann asin(x) nicht).

Hier mal eine Lösung mit mathematica:



Die Abweichung ist also immer kleiner 3e-14, was dem normalen double
Datentyp etwa entspricht.

2e-17 bekommt man mit double nicht hin!



  Profil  Quote  Link auf diesen Beitrag Link
hyperG
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.02.2017
Mitteilungen: 831
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2019-10-05


Die Reihenentwicklung ist selbst mit Polynom 10.Grades nicht so genau:




  Profil  Quote  Link auf diesen Beitrag Link
AlphaSigma
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 23.11.2012
Mitteilungen: 168
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, vom Themenstarter, eingetragen 2019-10-05


Hallo,
erstmal vielen Dank für die Antworten.
Es geht dem Fragesteller um die Implementierung spezieller Funktionen wie sin, cos, tan und deren Umkehrfunktionen in einer Bibliothek für avr-gcc, d.h. den GNU C-Compiler für 8-Bit AVR-Mikrocontroller mit double Genauigkeit. Die AVRs haben nur 8 Bit Register, nur Hardwarebefehle für Addition und Multiplikation und nur für Ganzzahlen. Sie laufen mit maximal 20 MHz und max. 256 KByte für Programme und 16 KByte RAM für Daten. Kilobyte nicht Megabyte und schon gar nicht Gigabyte. D.h. die Berechnung sollte möglichst wenige Divisionen verwenden und wenig Speicherplatz für vorberechnete Werte belegen. Bei der ursprünglichen Frage ging es um den arctan. Dafür gibt es geeignete rationale Polynome x*P(x^2)/Q(x^2) in dem Buch Hart, "Computer Approximations". Z.B. eines mit Grad 6 im Zähler und im Nenner bzgl. x^2, d.h je 7 Koeffizienten im Zähler und Nenner für eine relative Genauigkeit von ca. 2e-17 für 0 < x < tan (pi/4). Den absoluten und relativen Fehler habe ich unter Linux mit bc (bc - An arbitrary precision calculator language) überprüft. https://www.mikrocontroller.net/topic/480840#5990326
In dem Buch von Hart gibt es Koeffizienten für rationale Polynome unterschiedlicher Grade für rel. Genauigkeiten bis 1e-25. Die 1. Auflage des Buches ist, nebenbei bemerkt, von 1968. Die Frage bzgl. einer effizienten Approximation von arctan konnte somit beantwortet werden.
In diesem Beitrag wird nun nach einer ähnlich effizienten Approximation für
\[
\arcsin\left(\sqrt(x/2)\right)/\sqrt(x/2)
\] mit \(0 < x < 1/2\) gefragt. https://www.mikrocontroller.net/topic/480840#5990457 Man beacht \(x/2\) nicht \(x\).
Ich habe inzwischen Implementierungen des Remez-Algorithmus in Matlab/Octave und in C-Bibliotheken gefunden, allerdings nur für einfache Polynome, nicht für rationale. Ich werde mich dann wohl mal bei Wolfram Alpha anmelden oder mir einen RaspberryPi mit Mathematica besorgen.



  Profil  Quote  Link auf diesen Beitrag Link
hyperG
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.02.2017
Mitteilungen: 831
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2019-10-05


Also hier mit x/2 und etwas genauer:



Dort wird auch nur mit double gerechnet.



  Profil  Quote  Link auf diesen Beitrag Link
AlphaSigma
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 23.11.2012
Mitteilungen: 168
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, vom Themenstarter, eingetragen 2019-10-05


Vielen Dank hyperG,

ich denke Du hast nichts dagegen, wenn ich das Ergebnis auf mikrocontroller.net mit einem Link hierher kommuniziere, oder?




  Profil  Quote  Link auf diesen Beitrag Link
hyperG
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.02.2017
Mitteilungen: 831
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, eingetragen 2019-10-07


Kein Problem.
Durch den LINK sieht man ja die Quelle.



  Profil  Quote  Link auf diesen Beitrag Link
AlphaSigma
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 23.11.2012
Mitteilungen: 168
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, vom Themenstarter, eingetragen 2019-11-01


Hallo hyperG,

kurzer Nachtrag: Mit WorkingPrecision 30 und Polynomgrad 5/5 erhalte ich:
Mathematica
In[29]:= mmlist = 
  MiniMaxApproximation[
   ArcSin[Sqrt[x/2]]/Sqrt[x/2], {x, {0.00000000000001, 1/2}, 5, 5}, 
   WorkingPrecision -> 30];
mmfunc = mmlist[[2, 1]]
 
Out[30]= (1.00000000000000000008629059933 - 
   1.18681417959864950921122529677 x + 
   0.494264805211390263255396571324 x^2 - 
   0.0846958092538975690694231783752 x^3 + 
   0.00520341959718635442405095188701 x^4 - 
   0.0000577104932695244324239800742932 x^5)/(1 - 
   1.27014751293198280590547245976 x + 
   0.581360431289052905460197604182 x^2 - 
   0.114907603136629507944969755424 x^3 + 
   0.00906755032272074793394491020607 x^4 - 
   0.000190303978349659438168313002141 x^5)
 
In[31]:= Plot[mmfunc - ArcSin[Sqrt[x/2]]/Sqrt[x/2], {x, 0.0000000000000001, 
  0.5}]



Also in etwa das doppelte der double precision Genauigkeit von 2e-16.
Ich werde mal in der Dokumentation schauen, ob Mathematica das Approximieren auch mit höherer Genauigkeit kann.

Korrektur: Die Approximation war ja bereits mit WorkingPrecision 30. Wenn man das auch noch im Plot-Befehl anfügt, sieht man die wirklich erzielte Genauigkeit von 1e-19. Sehr schön.
Mathematica
In[32]:= Plot[mmfunc - ArcSin[Sqrt[x/2]]/Sqrt[x/2], {x, 0.0000000000000001, 0.5}, WorkingPrecision -> 30]





  Profil  Quote  Link auf diesen Beitrag Link
AlphaSigma hat die Antworten auf ihre/seine Frage gesehen.
AlphaSigma hat selbst das Ok-Häkchen gesetzt.
Neues Thema [Neues Thema]  Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2019 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]