Verwenden Sie Swift, um eine Annäherung an sinx zu finden

Warum schnell?

Sie müssen keine Umgebung erstellen, um Swift verwenden zu können, damit Sie sofort beginnen können. Wenn Sie einen Mac oder ein iPad haben, können Sie es verwenden, indem Sie einfach [Playgrounds] installieren (https://apps.apple.com/jp/app/swift-playgrounds/id1496833156?mt=12). Darüber hinaus verfügt Playgrounds über Funktionen wie ** Schrittausführung ** und ** langsame Ausführung **, und Sie können Anweisungen und während Minuten Schritt für Schritt ausführen und die Wertänderung überprüfen, wenn sie ausgeführt werden. .. Wenn Sie die ** Viewer-Funktion ** verwenden, wird der Status der Änderungen an Variablen ohne Erlaubnis als Diagramm angezeigt. 2020-10-14 11.16のイメージ.jpg

McLaughlin Erweiterung von Sinx

Wenn $ sinx $ von McLaughlin erweitert wird, $ sinx = x - \frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+⋯+\frac{(-1)^{n-1}x^{2n-1}}{(2n-1)!}+⋯ $

Es wurde ausgedrückt als. In diesem Artikel verwenden wir die Programmierung, um eine Annäherung an $ sinx $ zu finden.

1. Bereiten Sie Variablen vor

Die McLaughlin-Erweiterung approximiert die Funktion $ f (x) $, die vielfach unterschieden werden kann, durch die Summe der Erweiterungsformeln der Reihe der Potenzfunktionen von $ x $. In diesem Artikel wird der Wert von $ sinx $ als "sum" festgelegt und der Wert wird schrittweise zu "sum" addiert.

var sum = 0
print(sum)    //0
sum += 1
print(sum)    //1

Sie müssen auch eine Konstante vorbereiten, um das ungefähre $ x $ zu setzen. Zu diesem Zeitpunkt möchten wir Werte wie $ \ pi / 6 $ und $ \ pi / 3 $ als ungefähre Werte verwenden. Schreiben Sie also "import Foundation", damit $ \ pi $ verwendet werden kann.

import Foundation
var sum = 0
let x = Double.pi/2

Bereiten Sie außerdem Variablen vor, die kontinuierlich als Begriffe aktualisiert werden.

var item = x

Der erste Term ist der gleiche wie die Konstante, geben Sie also "x" ein.

Der endgültige Code sieht folgendermaßen aus:

2. Code bis zum zweiten Term mit x = π / 2

Ich denke, es ist wichtig, mit einem kleinen Wert zu beginnen und beim Codieren mit einem konkreten Wert zu experimentieren. (Persönliche Ansicht). Auch in diesem Artikel, nach dieser Idee, bis zum zweiten Term als $ x = \ pi / 2 , das heißt $ sinx=x-\frac{x^3}{3!} $$ Code bis zu.

import Foundation
var sum = 0.0  //Da int type und double type nicht hinzugefügt werden können,0.Schreiben Sie 0, um einen Doppeltyp zu erstellen.
var x = Double.pi/2

sum += x
sum += -(x*x*x)/Double(3*2*1)

$ X $ wird zu sum hinzugefügt und $ - \ frac {x ^ 3} {3!} $ Wird in der nächsten Zeile hinzugefügt.

Fügen Sie abschließend eine "print" -Anweisung hinzu, um sie mit dem wahren Wert zu vergleichen.

import Foundation
var sum = 0.0  //Da int type und double type nicht hinzugefügt werden können,0.Schreiben Sie 0, um einen Doppeltyp zu erstellen.
var x = Double.pi/2

sum += x
sum += -(x*x*x)/Double(3*2*1)

print(sum)//Ungefährer Wert 0.9248322292886504
print(sin(Double.pi/2))//Wahrer Wert 1.0

Der Ausdruck "Double (3 * 2 * 1)" wird verwendet, um den Int-Typ in den Doule-Typ zu konvertieren. Dieser Artikel ist jedoch kein wesentlicher Bestandteil, daher wird die Erklärung weggelassen.

3. Machen Sie es einfach zu verallgemeinern

Früher war der zweite Term "- (x * x * x) / 3 * 2 * 1", aber dabei muss $ x $ jedes Mal erhöht werden, wenn die Anzahl der Terme zunimmt. Fügen Sie einige Ideen hinzu, damit Sie auch dann kurz codieren können, wenn die Anzahl der Begriffe zunimmt.

import Foundation
var sum = 0.0  //Da int type und double type nicht hinzugefügt werden können,0.Schreiben Sie 0, um einen Doppeltyp zu erstellen.
var x = Double.pi/2

sum += x

for i in 2 ..< 3{
    x *= -(x*x)/Double((2*(i-1))*(2*i-1))
    sum += x
    print(x)
}

print(sum)//Ungefährer Wert 0.9248322292886504
print(sin(Double.pi/2))//Wahrer Wert 1.0

Wir haben for verwendet, um Begriffe mit Variablen i zu verknüpfen. (Obwohl es nur einmal ausgeführt wird.) In diesem Fall wird nur der zweite Term ausgeführt, also wird "für i in 2 .. <3" gesetzt. Obwohl es verallgemeinert ist, ist die Berechnung dieselbe, daher sollte sie der Antwort in 2 entsprechen.

4. Erhöhen Sie die Anzahl der Begriffe

Es kann durch Erhöhen der Anzahl von Begriffen durch Verallgemeinern behandelt werden.

import Foundation
var sum = 0.0  //Da int type und double type nicht hinzugefügt werden können,0.Schreiben Sie 0, um einen Doppeltyp zu erstellen.
let x = Double.pi/2
var item = x

sum += item

for i in 2 ..< 6{
    item *= -(x*x)/Double((2*(i-1))*(2*i-1))
    sum += item
}

print(sum)//Ungefährer Wert 1.00000035425842861
print(sin(Double.pi/2))//Wahrer Wert 1.0

Ungefähr zum sechsten Semester $ sinx= x-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+\frac{x^9}{9!}-\frac{x^{11}}{11!} $ Dann ist zu erkennen, dass fast kein Fehler vorliegt.

Recommended Posts

Verwenden Sie Swift, um eine Annäherung an sinx zu finden
Finden Sie mit Swift eine Annäherung an cosx
Ein Beispiel für einen Moya + RxSwift-API-Client (Swift5)
Finden Sie mit Swift eine Annäherung an log (1 + x)
Beispiel für die Verwendung von vue.config.js
Zusammenfassung der Verwendung von FragmentArgs
Zusammenfassung der Verwendung von DBFlow