Sinus in Python selbst programmieren ohne Library?

4 Antworten

Am einfachsten ist es, wenn du die Taylor Reihe des Sinuses in dein Programm implementierst. Falls du dich nicht so gut mit diesen Summen auskennst, das große Summenzeichen kannst du dir als for-schleife vorstellen. k ist der Iterator der Schleife.

Bild zum Beitrag

Woher ich das weiß:Studium / Ausbildung
 - (programmieren, Python, Dreieck)

Katzenmaster123  16.01.2025, 10:58

so könnte das ganze in python aussehen

import math

def sin(x):
  sin_approx = 0
  for k in range(100): #da unendlich nicht geht, nehmen wir hundert. allgemein gesagt: je höher der wert, desto genauer die approximierung => desto langsamer das programm
    term = ((-1)**k * x**(2*k + 1)) / math.factorial(2*k + 1)
    sin_approx += term
  return sin_approx
Katzenmaster123  16.01.2025, 11:02
@Katzenmaster123

Übrigens ist es generell sehr kompliziert die Sinus Funktion selber ins Programm zu implementieren. Man muss ein hohes mathematisches Verständnis haben, um solche Funktionen selber beschreiben zu können. Es ist gut, dass du das selber machen möchtest aber lass dich dadurch nicht einschüchtern. Schließlich gibt es solche Funktionen schon und man muss das Rad ja nicht neu erfinden :)

4starfighter2 
Beitragsersteller
 16.01.2025, 10:52

Könnte sein, dass mich das nur noch mehr verwirren würde, trotzdem danke😅

Funktionen wir sin(x) werden auf einem Computer näherungsweise mit der entsprechenden Taylor-Reihe näherungsweise berechnet. So gilt z.B.



Der Index in der Potenz läuft bis unendlich.

Die Addition wird abgebrochen, sobald ein Term unterhalb des möglichen Wertebereichs des verwendeten Zahlenformats liegt.

Bei sehr kleinen x kann man von sin(x) ~ x ausgehen, da bereits der zweite Term x³/3! digital nicht mehr darstellbar ist.


J0T4T4  16.01.2025, 11:05

sin x = x, da spricht der Physiker :D

Meines Wissens ist das die Taylor-Entwicklung um x=0, es könnte also sinnvoll sein, x vorher noch in den Bereich (-π, π] abzubilden. Eventuell sogar nach (-π/2, π/2].

Schau mal hier:

https://en.wikipedia.org/wiki/Sine_and_cosine#Software_implementations

https://en.wikipedia.org/wiki/Lookup_table#Computing_sines

https://stackoverflow.com/questions/18662261/fastest-implementation-of-sine-cosine-and-square-root-in-c-doesnt-need-to-b

Gibt verschiedene Wege den Sinus zu berechnen.

Beispielsweise lässt der sich durch eine Reihe darstellen und über die kannst du den Sinus annähern.

Kannst du machen, darin sehe ich aber keinen Sinn. Es ist sinnvoller, wenn du dich mit vorhandenen Packages beschäftigst, denn die kannst du nützlich verwenden. Spaßhalber einmal eine sinus-Funktion schreiben (siehe Antworten...) ist schon ok; aber um eine wirklich performante und in jeder Hinsicht brauchbare Implemetierung zu erstellen, muss man sich schon sehr mit der Materie auseinandersetzen und tief einsteigen. Ich würde mir das nicht zutrauen, obwohl ich mathematisches Python täglich verwende.