2016-11-15 6 views
0

Für meine Klasse in der Universität ich diese mathematische Formel in eine kleine Funktion zu transformieren müssen:verwandeln taylor_sin in C++ Programm

enter image description here

Mein Code sieht wie folgt aus:

double taylor_sin(double x) 
{ 
    double taylor = x - (std::pow(x, 3)/6); 
    return taylor; 
} 

Das Problem ist , das muss ich mit st :: sin (x) vergleichen. Und wenn ich das Programm ausführe, bekomme ich sehr unterschiedliche Antworten. Bin ich falsch mit meiner Implementierung?

+1

Werfen Sie einen Blick auf https://www.wolframalpha.com/input/?i=plot+sin(x)+und+x+-+x%5E3%2F6 –

+0

Danke. Das half ein wenig, mein Problem zu verstehen :) – adamswebspace

+0

Stellen Sie sicher, dass Sie Winkel als Radianten an beide übergeben. Die Taylor-Reihenentwicklung ist nur für kleine Winkel gut. – duffymo

Antwort

0

Ihre Implementierung ist richtig, wenn x nahe 0 ist.

Es weicht schnell von sin(x) für x > 1 oder x < -1. Der nächste verbleibende Teil ist pow(x, 5)/(5!).

Zum Beispiel ist der Fehler für x = 2 um 32/120, nicht mehr vernachlässigbar für ein Ergebnis, das in [-1, +1] sein sollte.

Für Ihr Problem, können Sie taylor_sin in einem Intervall berechnen, wie [0, PI/2] mit N groß genug, so dass die folgende Berechnung

sin_taylor

Nähe ist für alle x sin in [ 0, PI/2].

Dann können Sie Formel wie sin (PI + x) = -sin (x), sin (-x) = -sin (x), sin (2 * PI + x) = sin (x) zu finden ein y in [0, PI/2] mit derselben Sünde, wenn x nicht in diesem Intervall ist.

+0

Danke für deine Antwort. Okay, das ist schlecht, weil ich es für Winkel wie 90, 180 und 331 und so weiter verwenden muss. Also muss ich nur meinen vorhandenen Powder zu dem, den du erwähnt hast, ändern? – adamswebspace

+0

@adamswebspace Nicht sicher; Die genaue sin (x) Berechnung ist zum Beispiel in http://math2.org/math/algebra/functions/sincos/expansions.htm mit einer unendlichen Berechnung gegeben. Wenn x in [-pi/2, pi/2] steht, können Sie die entsprechende Anzahl von Begriffen finden. – Franck

+0

Es funktionierte am Ende. Vielen Dank :) – adamswebspace