Hallo Leute!
Wie errechnet denn der Taschenrechner zu jedem Winkel den entsprechenden Sinuswert und umgekehrt? Gibts dafür ne Formel? Wie ist denn die?
THX 
greets
vince
Hallo Leute!
Wie errechnet denn der Taschenrechner zu jedem Winkel den entsprechenden Sinuswert und umgekehrt? Gibts dafür ne Formel? Wie ist denn die?
THX 
greets
vince
Hi Vince,
das geht mit Potenzreihen: Die Funktionen werden angenähert durch Ausdrücke der Form „Sin x = 1/(sqrt x) + 1/x^3 + 1/x^5 + …“ (das ist jetzt keine echte Funktion!). Diese Funktionen sind sehr schnell und für die meisten Fälle genau genug. Unter „Potenzreihen“ solltest du in Mathebüchern fündig werden.
Gruß Ralf
Hi Drambeldier,
die korrekte Potenzreihe des Sinus ist
sin x = x - 1/3 x^3 + 1/5 x^5 +/- 1/n x^n für n ungerade mit alternierendem Vorzeichen, entsprechend
cos x = 1 - 1/2 x^2 + 1/4 x^4 -/- 1/n x^n für n gerade und alternierendem Vorzeichen.
das geht mit Potenzreihen: Die Funktionen werden angenähert
durch Ausdrücke der Form „Sin x = 1/(sqrt x) + 1/x^3 + 1/x^5 +
…“ (das ist jetzt keine echte Funktion!).
Was ist bei Dir den eine „echte“ Funktion? Die (vollständige) Potenzreihenentwicklung ist äquivalent zur Funktion selbst.
Gruß,
Ingo
Beste Approximation vs. Potenzreihen
Hallo, ihr Sinussuchenden,
mein Studium liegt zwar schon ein wenig zurück, jedoch meine ich mich zu entsinnen, dass Taschenrechner keine Potenzreihen (zu viele Multiplikationen) benutzen, sondern die bestmögliche Approximation eines Polynoms von einem festgelegten Grad, dessen Auswertung weniger Rechenleistung für eine für die Stellenzahl des Taschenrechners ausreichende Approximation benötigt.
Man nimmt dazu eine Basis des entsprechenden Polynomraumes und kann die zugehörigen Koeffizienten durch ein lineares Gleichungssystem ermitteln.
Kennt man die Sinusfunktion auf dem Intervall [0, Pi/2), so kennt man sie überall. (Vielleicht reicht auch ein kleineres Intervall, wie gesagt, ist alles schon eine Weile her!)
Als Beispiel mal die Approximation für ein Polynom vom Grade 2:
Eine Basis des zweidimensionalen Polynomraumes ist B={1, X, X^2}. Das Gleichungssystem für die Koeffizienten {m} lautet nun
[A]*{m}={R}
mit
[A] = (a_ij) = Integral (Null bis Pi/2) b_i*b_j
{R} = (r_i) = Integral (Null bis Pi/2) b_i*sin(x)
Damit ist [A] = Integral (Null bis Pi/2) [[1,x,x^2],[x,x^2,x^3],[x^2,x^3,x^4]]=
[[pi/2,pi^2/8,pi^3/24],[pi^2/8,pi^3/24,pi^4/64],[pi^3/24,pi^4/64,pi^5/160]]
{R} = Integral (Null bis Pi/2) {SIN(x),x*SIN(x),x^2*SIN(x)}=
= {1,1,pi-2}
Löst man dieses Gleichungssystem nun, so erhält man als Koeffizienten näherungsweise:
{m}= [-1321/54309,33312/27859,-3702/10945]
Das Polynom
f(x) = -1321/54309 + 33312/27859 *x -3702/10945 * x^2
ist also unter allen Polynomen 2. Grades dasjenige, welches die Sinusfunktion im Bereich von 0 bin Pi/2 am besten approximiert. Wer Spaß daran hat, kann ja mal vergleichen, wie gut die Potenzreihe entsprechender Ordnung die Funktion annähert.
Für übliche Taschenrechner (8 Stellen) reichen Polynome ca. 7. Grades völlig aus.
Gruß
Ted
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi Ingo,
Was ist bei Dir den eine „echte“ Funktion?
das war schlicht schlecht ausgedrückt: Mein Beispiel ist gewiss nicht die Sinus funktion, auch wenn sie ihr formal ähnelt.
Gruß Ralf
Moin, Moin!
Suche mal unter dem Begriff CORDIC-Algorythmus.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
kleine Korrektur
Hi Drambeldier,
die korrekte Potenzreihe des Sinus ist
sin x = x - 1/3 x^3 + 1/5 x^5 +/- 1/n x^n für n ungerade mit
alternierendem Vorzeichen, entsprechend
cos x = 1 - 1/2 x^2 + 1/4 x^4 -/- 1/n x^n für n gerade
Hi, ich denke Du meinst 1/2!, 1/4!, 1/n! etc. (Fakultät unter dem Bruchstrich).
Gruß
Moriarty
Tach
Wie errechnet denn der Taschenrechner zu jedem Winkel den
entsprechenden Sinuswert und umgekehrt? Gibts dafür ne Formel?
Wie ist denn die?
Entgegen der Meinungen meiner Vorredner bin ich eher der Meinung das ein Taschenrechner sin und cos über Tabellenwerte bestimmt. D.h. in einer (E)EPROM Tabelle liegen alle Werte für den sin und cos mit einer bestimmten Genauigkeit und Schrittweite. Sollte der angeforderte Wert zwischen zwei Tabellenwerten liegen wird eine lineare Interpolation durchgeführt.
Ich denke das eine Umsetzung über eine Tabelle technisch einfacher umzusetzen ist und auch nur rudimentäre Bauteile benötigt. Während man bei einer Errechnung des Ergebnisses über Potenzreihen eine aufwendigere Schaltlogik und auch RAM benötigt.
Wobei man aber unterschieden muß zwischen den „normalen“ Taschenrechnern (Casio fx-?? etc.) und den kleinen Taschen-PCs (TI38?) !
Aber das ist nur eine Vermutung.
Unn wech, Ingo
Hallo Apophes,
Entgegen der Meinungen meiner Vorredner bin ich eher der
Meinung das ein Taschenrechner sin und cos über Tabellenwerte
bestimmt. D.h. in einer (E)EPROM Tabelle liegen alle Werte für
den sin und cos mit einer bestimmten Genauigkeit und
Schrittweite. Sollte der angeforderte Wert zwischen zwei
Tabellenwerten liegen wird eine lineare Interpolation
durchgeführt.
Ich denke das eine Umsetzung über eine Tabelle technisch
einfacher umzusetzen ist und auch nur rudimentäre Bauteile
benötigt. Während man bei einer Errechnung des Ergebnisses
über Potenzreihen eine aufwendigere Schaltlogik und auch RAM
benötigt.
Nein, diese Lösung wäre nicht praktikabel!
Ein Taschenrechner möge mit 8-stelliger Genauigkeit rechnen, und wir wollen nur die Sinusfunktion betrachten. Es genügt, wenn man sin(x) für 0 auf 8 Stellen genau berechnen können soll. Um das zu erreichen, wäre jedoch eine sehr große Zahl von Stützstellen erforderlich. Bei linearer Interpolation ginge es vielleicht mit 1/5 oder 1/10 von 157 000 000 Stützstellen, aber das wären 31 400 000 bzw. 15 700 000 Stützstellen, von denen jede im Speicher ca. 4 Byte belegen würde. So viel Speicher kann man in einen Taschenrechner-Prozessorchip nicht integrieren.
Man kann aber zeigen, daß sich die Anzahl der benötigten Stützstellen auf einen Bruchteil reduziert, wenn man nicht linear, sondern z. B. kubisch interpoliert. Da man dann aber eh mit Polynomen höherer Ordnung als „linear“ rechnet, geht man letzten Endes den Weg, auf Stützstellen komplett zu verzichten, und den Sinus durch ein Polynom z. B. siebter Ordnung zu approximieren – mit der geforderten Genauigkeit von 8 Stellen und immer noch ausreichend schnell (bei einem Taschenrechner ist es ja ohnehin relativ egal, ob die Berechnung von „sin(0.94)“ innerhalb von 0.0015 oder 0.08 Sekunden abgeschlossen ist).
Wenn das Ergebnis sin(x) nicht so genau sein müßte (z. B. nur 3-stellige Genauigkeit), dann wäre die Tabellen-Methode mit linearer Interpolation zwischen Stützstellen in der Tat einfacher zu programmieren und schneller in der Ausführung.
Mit freundlichem Gruß
Martin