Les équations simultanées non linéaires peuvent être facilement résolues avec Python.

Lors de calculs numériques, il y a de bonnes chances de résoudre une équation simultanée non linéaire. Il y a de nombreuses années, lorsque j'étais étudiant diplômé en recherche, je l'ai mis en œuvre à Fortran. Récemment, j'ai plus d'occasions d'écrire des programmes en Python et j'ai rencontré une situation où j'ai résolu à nouveau une équation simultanée non linéaire. La méthode Newton est la méthode la plus connue pour résoudre des équations simultanées non linéaires, mais j'ai cherché une bonne bibliothèque car elle est difficile à implémenter à partir de zéro.

Il peut être résolu avec "Scipy.optimize.root"

C'était facile, pas étrange. Cette fois, je voudrais résoudre les équations simultanées non linéaires suivantes à titre d'exemple.

\begin{align} x^{2}+y^{2}-1=0 \\\ x=0 \end{align}

Le code source est le suivant. Je donnerai une brève explication plus tard.

import numpy as np
from scipy import optimize

#Renvoie la fonction que vous souhaitez résoudre dans une liste
def func(x):
    return [x[0]**2 + x[1]**2 -1.0,
            x[0]]


result = optimize.root( func, [ 1.0, 0.0], method="broyden1")
print(result)

Le résultat de l'exécution est le suivant.

     fun: array([-1.98898568e-07, -5.14009858e-06])
 message: 'A solution was found at the specified tolerance.'
     nit: 9
  status: 1
 success: True
       x: array([-5.14009858e-06,  9.99999901e-01])

Description du code source / résultat de l'exécution

Pour plus de détails sur l'utilisation de scipy.optimize.root, reportez-vous à la documentation scipy. Voici une explication approximative. Le premier argument de Optimize.root est la fonction func qui définit la fonction que vous souhaitez résoudre. Le deuxième argument est la valeur initiale à utiliser pour commencer à résoudre le problème. Le troisième argument est l'endroit où vous spécifiez comment résoudre. Pour plus de détails, veuillez vous référer au document scipy, mais voici une mise en garde. .. Cette fois, broyden1 est spécifié dans la méthode, mais en fonction de l'argument, la matrice de Jacobi doit être définie séparément. Ce fut un problème pour moi, alors j'en ai choisi un qui ne nécessite pas de procession Jakobi.

De plus, la partie importante du résultat de l'exécution est la partie de x: array (), qui représente la solution réelle, et cela semble être comme $ x = 0, y = 1 $. Voir scipy.optimize.OptimizeResult pour plus de détails sur la solution.

finalement

Python est pratique car il peut être facilement implémenté de différentes manières. Je voulais me rencontrer quand j'étais étudiant diplômé. Non, je l'ai rencontré, mais c'était gênant de changer de train, alors j'ai fait semblant de ne pas le voir. Pardon.

Recommended Posts

Les équations simultanées non linéaires peuvent être facilement résolues avec Python.
Résolvez des équations simultanées en un instant en utilisant Python
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
Peut être utilisé chez les pros de la compétition! Bibliothèque standard Python
Formatez facilement JSON avec Python
Modélisation de fonctions non linéaires en Python
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
Nouvelles fonctionnalités de Python 3.9 (1) -L'opérateur d'ensemble de somme peut être utilisé dans le type de dictionnaire.
Résumé de l'entrée standard de Python pouvant être utilisée dans Competition Pro
Résoudre des équations différentielles normales en Python
Résumé des problèmes d'AtCoder C qui peuvent être résolus en mathématiques au secondaire
Utilisez facilement vos propres fonctions en Python
Implémenté en Python PRML Chapitre 7 SVM non linéaire
Représentez facilement des données graphiques dans le shell et Python
Tkinter n'a pas pu être importé en Python
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
Vous devenez ingénieur en 100 jours - Jour 35 - Python - Ce que vous pouvez faire avec Python
Liste des outils qui peuvent être utilisés pour essayer facilement l'analyse des émotions des phrases japonaises avec Python (essayez avec google colab)
++ et-ne peuvent pas être utilisés pour incrémenter / décrémenter en python
Résolvons des équations linéaires simultanées avec Python sympy!
Construire un Sphinx qui peut être écrit avec Markdown
Vous pouvez facilement créer une interface graphique même avec Python
ABC125_C --GCD sur tableau noir [Notes résolues en Python]
Premiers pas avec AWS IoT facilement en Python
Calcul matriciel et équations linéaires: Algèbre linéaire en Python <3>
Résumé des méthodes d'analyse de données statistiques utilisant Python qui peuvent être utilisées en entreprise
Visualisation des informations géographiques de R et Python qui peuvent être exprimées par Power BI
Dans Python3.8 et versions ultérieures, le mod inverse peut être calculé avec la fonction intégrée pow.
Un mécanisme pour appeler des méthodes Ruby à partir de Python qui peut être fait en 200 lignes