Trouvez la valeur approximative de log (1 + x) avec Swift

Pourquoi Swift?

Swift n'a pas besoin de créer un environnement, et si vous avez un Mac ou un iPad, installez simplement Playgrounds et utilisez-le. être capable de. De plus, Playgrounds a des fonctions telles que ** exécution d'étape ** et ** exécution lente **, et vous pouvez exécuter des instructions et des minutes pas à pas et vérifier le changement de valeur lorsqu'elles sont exécutées. .. De plus, si vous utilisez la ** fonction de visualisation **, l'état des modifications des variables sera affiché sous forme de graphique sans autorisation. 2020-10-14 11.16のイメージ.jpg

Expansion McLaughlin du journal (x + 1)

Développement McLaughlin de $ \ log (1 + x) $

\log(1+x) = x-\frac{x^2}{2}+\frac{x^3}{3}-\frac{x^4}{4}+⋯+\frac{(-1)^{n-1}x^n}{n}+⋯

Il a été exprimé comme. Dans cet article, nous utiliserons la programmation pour trouver une approximation de $ \ log (1 + x) $. (La langue est Swift) iPad est très bien.

1. Préparez les variables

L'expansion de McLaughlin se rapproche de la fonction $ f (x) $, qui peut être différenciée plusieurs fois, par la somme des formules d'expansion de la série des fonctions de puissance de $ x $. Dans cet article, la valeur de $ \ log (x + 1) $ est définie comme «somme» et la valeur est progressivement ajoutée à «somme».

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

Vous devez également préparer une constante pour mettre le $ x $ approximatif.

var sum = 0
let x = 1

De plus, préparez des variables qui sont continuellement mises à jour sous forme de termes.

var item = x

Le premier terme est le même que la constante, alors entrez «x».

Le code final ressemble à ceci:

var sum = 0.0  //Puisque le type int et le type double ne peuvent pas être ajoutés,0.Écrivez 0 pour en faire un double type.
let x = 1.0
var item = x

2. Codez jusqu'au deuxième terme avec x = 1

Je pense qu'il est important de commencer avec une petite valeur et de faire des essais et des erreurs avec une valeur concrète lors du codage. (Vue personnelle). Dans cet article également, selon cette idée, $ x = 1 $ jusqu'au deuxième terme, c'est-à-dire

\log (1+x)=x-\frac{x^2}{2}

Codez jusqu'à.

var sum = 0.0  //Puisque le type int et le type double ne peuvent pas être ajoutés,0.Écrivez 0 pour en faire un double type.
let x = 1.0
var item = x

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

Enfin, ajoutez une instruction print pour comparer avec la vraie valeur.

import Foundation
var sum = 0.0  //Puisque le type int et le type double ne peuvent pas être ajoutés,0.Écrivez 0 pour en faire un double type.
let x = 1.0
var item = x

sum += 1.0
sum += -(x*x)/Double(2*1)
print(sum)//Valeur approximative 0.5
print(log(2.0))//Valeur vraie 0.6931471805599453

3. Facilitez la généralisation

Auparavant, le deuxième terme était $ - \ frac {x ^ 2} {2} $, mais avec cela, $ x $ doit être augmenté ou le dénominateur doit être altéré à mesure que le nombre de termes augmente. Ajoutez quelques idées afin de pouvoir coder court même si le nombre de termes augmente.

import Foundation
var sum = 0.0  //Puisque le type int et le type double ne peuvent pas être ajoutés,0.Écrivez 0 pour en faire un double type.
var item = 1.0
let x = 1.0
sum += item

for i in 2 ..< 3{
    item *= -(x*Double(i-1))/Double(i)
    sum += item
}
print(sum)//Valeur approximative 0.5
print(log(2.0))//Valeur vraie 0.6931471805599453

En observant les $ \ log (x + 1) $, $ x $ et $ 1 / n $ développés par McLaughlin sont multipliés à chaque fois que le terme grandit, exprimez-le dans le code.

計算-12.jpg

Bien que l'instruction for soit utilisée, la valeur de sum ne change pas car elle n'est exécutée qu'une seule fois.

4. Augmenter le nombre de termes

Il peut être traité en augmentant le nombre de termes en généralisant.

import Foundation
var sum = 0.0  //Puisque le type int et le type double ne peuvent pas être ajoutés,0.Écrivez 0 pour en faire un double type.
var item = 1.0
let x = 1.0
sum += item

for i in 2 ..< 10{
    item *= -(x*Double(i-1))/Double(i)
    sum += item
}
print(sum)//Valeur approximative 0.7456349206349205
print(log(2.0))//Valeur vraie 0.6931471805599453

Même si l'élément 9 est ajouté, il y a une différence considérable par rapport à la valeur réelle. Puisque $ sinx et cosx $ étaient presque les mêmes dans le sixième terme, on peut voir que $ \ log (x + 1) $ converge plus lentement que $ sin $ et $ cos $.

Recommended Posts

Trouvez la valeur approximative de log (1 + x) avec Swift
Trouver une approximation de cosx avec Swift
Format de la sortie du journal par Tomcat lui-même dans Tomcat 8
[Swift] Obtenez le moment où la valeur de textField est modifiée
Trouvez le nombre de jours dans un mois avec Kotlin
Authentification 802.1X au réseau du paramètre de liaison dans CentOS7
Examiner la liste des polices disponibles dans AWS Lambda + Java
Élimine les tracas liés au traitement des tableaux C comme des tuples par Swift
Formulaire qui reçoit la valeur de l'élément répétitif dans Spring MVC
Ordre de traitement dans le programme
Je veux changer la valeur de l'attribut dans Selenium of Ruby
À propos du niveau de journalisation de java.util.logging.Logger
Comment incrémenter la valeur de Map sur une ligne en Java
Étapes pour rendre Spring Boot capable de faire référence à la valeur dans le fichier de propriétés
Comment trouver le nombre total de pages lors de la pagination en Java
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
Trouvez le maximum et le minimum des cinq nombres saisis en Java
Développement Android, comment vérifier null dans la valeur de l'objet JSON
Obtenez le résultat de POST en Java
Utilisez Swift pour trouver une approximation de sinx
Raccourcissez l'UUID en base64 dans Swift.
[GCD] Principes de base de la programmation parallèle dans Swift
L'identité des paramètres de rails [: id]
Samshin sur la valeur du champ caché
[Swift] Changer la couleur du nœud SCN
L'histoire de l'écriture de Java dans Emacs
Trouvez la différence à partir d'un multiple de 10
Ecrire le mouvement de Rakefile dans le runbook
[Swift] Comment obtenir le nombre d'éléments dans un tableau (super basique)
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Impossible de trouver coderay-1.1.3 dans l'une des sources (Bundler :: GemNotFound) sorti pendant le co-développement
[Swift] Comment changer l'ordre des éléments de barre dans le contrôleur de barre d'onglets [Débutant]
[Order method] Définit l'ordre des données dans Rails
Comment trouver la cause de l'erreur Ruby
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
L'histoire de la fabrication d'un Othello ordinaire à Java
Stocker la valeur de retour du kit SDK AWS dans DynamoDB
À propos de l'idée des classes anonymes en Java
L'histoire de l'apprentissage de Java dans la première programmation
Mesurer la taille d'un dossier avec Java
Mémo d'implémentation SKStoreReviewController dans l'interface utilisateur Swift d'iOS14
Ordre des modificateurs utilisés dans Swift (voir SwiftLint)
Spécifiez la valeur par défaut avec @Builder of Lombok
Importer des fichiers de la même hiérarchie en Java
Je veux obtenir la valeur en Ruby
Comment trouver la valeur totale, la valeur moyenne, etc. d'un tableau à deux dimensions (tableau multidimensionnel) -java