Math Modul WO??? oder: Wie berechnet man sinus(x)?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lucifer

Dienstag 7. Dezember 2004, 19:03

Hallo zusammen!

Kann mir einer sagen, wo das Math modul ist? Ich wollte mir nämlich mal daraus ansehen, wie die da sin(x) bzw. cos(x) rechnen... ich habe zwar ausm internet ne rechnungsfolge gefunden, aber wenn ich das so bei python berechne gibt der mir monsterzahlen die dem richtigen ergebnis meist voll weit entfernt ist (ich versuche das mit einer Schleife zu berechnen ^^ ).

Die formel die ich kenne ist:
sin(x)=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!+-......

nur wenn ich jetzt folgende Zählschleife mache:

Code: Alles auswählen

for a in range(1,80):
       sinusy=sinusy+float(((-1)**a+1)*(y**(2*a-1)/fak(2*a-1)))
Erläuterung: sinusy ist vorher von mir als sinusy=float(0) bezeichnet worden und y=5 (Bogenmaß, entspricht ca. 286,48°).

so aber wenn ich jetzt
print sinusy

mache kommt so um die 200 und mehr raus (was natürlich falsch ist ^ ^).

auch wenn ich jetzt die range auf 1 bis 81 oder so umänder kommt noch immer ne megahohe zahl raus, die total falsch ist.....

Bitte sacht mir einer was ich falsch gemacht habe???
fire-

Dienstag 7. Dezember 2004, 19:09

Hi!

Code: Alles auswählen

import math

print math.sin(x)
print math.cos(x)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 7. Dezember 2004, 19:10

Lucifer hat geschrieben:Kann mir einer sagen, wo das Math modul ist? Ich wollte mir nämlich mal daraus ansehen, wie die da sin(x) bzw. cos(x) rechnen... ich habe zwar ausm internet ne rechnungsfolge gefunden, aber wenn ich das so bei python berechne gibt der mir monsterzahlen die dem richtigen ergebnis meist voll weit entfernt ist (ich versuche das mit einer Schleife zu berechnen ^^ ).
Quellcode von math
Quellcode von cmath
Sind aber beides C Module, und nutzen afaik die libm (-lm) für alles.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Dienstag 7. Dezember 2004, 19:26

Hi Lucifer,

das Math modul heisst bei Python math. Da math die Funktionen der FPU verwendet würde dir der Source dazu aber nicht weiterhelfen, da die Winkelfunktionen ja in der FPU berechnet werden und nicht so wie in deinem Beispiel über eine Funktion.
Deine Funktion scheint auch etwas daneben zu sein, du hast wohl übersehen, daß du abwechselnd addieren und subtraihieren musst. ;)

Code: Alles auswählen

from operator import mul
fak = lambda n: reduce(mul, xrange(2,n),n)

y = 5.0

sinusy = y
for a in xrange(3, 161, 4): # from 3 to 161 step 4
     sinusy -= y**a/fak(a) # erst subtrahieren
     sinusy += y**(a+2)/fak(a+2) # dann mit (a+2) addieren

print sinusy
Da hier zwei berechnungen pro schleifendurchlauf geschehen reicht ein step 4. Es ist immer besser schon mit sinvollen Startwerten und Schrittweiten zu arbeiten, statt dann innerhalb der Schleife mittels Zählvariable und herummultiplizieren und addieren den wert von a zu berechnen.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Lucifer

Dienstag 7. Dezember 2004, 19:51

meinetweg mag es sinnvoller sein, mich interesiert trozdem was ich bei meinem Code falsch gemacht habe, bei mir steht ja EIGENTLICH ein und das selbe, nur halt zusammen. Wieso klappt es so denn nicht???
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 7. Dezember 2004, 20:11

Hi Lucifer,

nein, bei Dir steht nicht dasselbe. Schau mal die Reihenentwicklung an und dann Deinen Code und zum Schluß Dookies Bemerkung. Na, geht Dir ein Licht auf?

Gruß,
Christian
Antworten