Finden Sie mit Swift eine Annäherung an cosx

Warum schnell?

Swift erfordert keine Umgebungskonstruktion. Wenn Sie einen Mac oder ein iPad haben, installieren Sie einfach Playgrounds und verwenden Sie es. in der Lage sein. 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 cosx

Wenn $ cosx $ von McLaughlin erweitert wird,

cosx=1-\frac{x^2}{2!}+\frac{x^4}{4!}-⋯+\frac{(-1)^nx^{2n}}{(2n)!}+⋯

Es wurde ausgedrückt als. In diesem Artikel verwenden wir die Programmierung, um eine Annäherung an $ sinx $ zu finden. (Sprache ist schnell) iPad ist in Ordnung.

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:

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

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 gilt nach dieser Idee $ x = \ frac {\ pi} {2} $ bis zum zweiten Term, d. H.

cosx=1-\frac{x^2}{2!}

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.
let x = Double.pi/2
var item = 1

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

$ 1 $ wird zu sum hinzugefügt und $ - \ frac {x ^ 2} {2!} $ 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 += 1
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 (2 * 1)" wird verwendet, um den Int-Typ in den Doule-Typ zu konvertieren. Dieser Artikel ist jedoch kein wesentlicher Bestandteil, sodass die Erklärung weggelassen wird.

3. Machen Sie es einfach zu verallgemeinern

Früher war der zweite Term $ - \ frac {x ^ 2} {2!} $, Aber damit 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.
let x = Double.pi/3
var item = 1

sum += item

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

print(sum)//Ungefährer Wert 0.525479753410744
print(cos(Double.pi/3))//Wahrer Wert 0.5

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/3
var item = 1.0

sum += item

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

print(sum)//Ungefährer Wert 0.499999999639
print(cos(Double.pi/3))//Wahrer Wert 0.5

Ungefähr zum sechsten Semester

cosx=1-\frac{x^2}{2!}+\frac{x^4}{4!}-\frac{x^6}{6!}+\frac{x^8}{8!}-\frac{x^{10}}{10!}

Dann ist zu erkennen, dass fast kein Fehler vorliegt.

Bonus

Bei der Verallgemeinerung ist es einfacher zu verstehen, ob es tabellarisch aufgeführt ist.

Recommended Posts

Finden Sie mit Swift eine Annäherung an cosx
Verwenden Sie Swift, um eine Annäherung an sinx zu finden
Finden Sie mit Swift eine Annäherung an log (1 + x)
Machen Sie mit Swift einen FPS-Zähler
[GCD] Grundlagen der parallelen Programmierung in Swift
[Swift] So ermitteln Sie die Anzahl der Elemente in einem Array (Super Basic)
Von enum vor dem Schmied festgefahren
Implementierungsnotiz für SKStoreReviewController in der Swift-Benutzeroberfläche von iOS14
Ein Beispiel für einen Moya + RxSwift-API-Client (Swift5)
Reihenfolge der in Swift verwendeten Modifikatoren (siehe SwiftLint)
Die Geschichte einer illegalen staatlichen Ausnahme in Jetty.
Teilen wird in Swift zu 0
Ausgabe in Vielfachen von 3
Mehrdimensionales Array in Swift
Liste der Geräte, die mit Swift UI in der Vorschau angezeigt werden können
So ändern Sie die Hintergrundfarbe der Navigationsleiste usw. in der Swift-Benutzeroberfläche
Finden Sie mit Kotlin die Anzahl der Tage in einem Monat
Generieren Sie Stream aus einem Array primitiver Typen in Java