J'ai essayé la différenciation jacobienne et partielle avec python

Je suis resté coincé dans une formule en python

Ce que j'apprends maintenant est tellement intéressant lorsque j'essaie diverses choses avec python et que j'ai oublié d'écrire un article. Vous n'avez pas à écrire python dans le code pour l'affectation, la factorisation, la différenciation, etc. La bibliothèque est trop pratique. J'étudie actuellement la théorie du chaos élémentaire, l'analyse de régression multiple de l'analyse multivariée et la distribution normale multivariée dans le cadre de cours au choix à l'université. Je vais le visualiser car je ne comprends rien même si je regarde les symboles que je ne comprends pas bien en classe. Je ne comprends pas du tout la théorie, mais si vous la regardez, cela peut être une chance de mieux comprendre. La théorie du chaos utilisant l'analyse multivariée et les équations différentielles est trop difficile, donc je trébuche depuis le début, donc cette fois j'ai cherché diversement sur le net du début à l'analyse, ce qui est idéal J'ai cherché le code. Pour dire les mots difficiles, je ne comprends rien ... Je n'ai pas écrit cet article moi-même ... Difficile ..... Un jour, je veux comprendre la théorie de l'analyse multivariée et appliquer du code. Non, pourquoi êtes-vous si motivé alors que vous ne comprenez rien?

Bibliothèque de base de code de programme

J'ai importé la fonction avec sympy en python. Bibliothèque C'est tellement pratique que la différenciation est affichée si intuitivement ... Comme vous pouvez le voir dans le code, la fonction qui utilise la différenciation est diff ().

import sympy as sym
from sympy import *      #Imoprt toutes les fonctionnalités de la bibliothèque sympy
sym.init_printing()      #Format de sortie

x=Symbol('x')                  #lettre'x'Est défini comme la variable x
y=Symbol('y')                 #lettre'y'Est défini comme la variable y


#différentiel
a=diff(sin(x),x)  #sin(x)Différenciation de
b=diff(exp(x),x)   # e^Différenciation de x

#Différentiel plus élevé
c=diff(x**4+x**3,x,2)  # x^4+x^Différentiel d'ordre 2 de 3


#Différenciation partielle
d=diff(x**2+x*y+2*y**2,x)  # x^2+xy+2y^Différenciation partielle de 2 par x
e=sym.integrate(x+2*y,(x,0,2),(y,2,3))
print('a: {0}'.format(a))
print('b: {0}'.format(b))
print('c: {0}'.format(c))
print('d: {0}'.format(d))
print('e: {0}'.format(e))

Du haut jusqu'en bas

cos(x)\\
e^x\\
6x(2x + 1)\\
2x+y\\
24


Représentation graphique de fonctions à deux variables


{3x^2+6xy+3y^2+x^3+y^3}


from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
def func1(x, y):
    return 3*x**2+6*x*y+3*y**2+x**3+y**3
x = np.arange(-10.0, 5.0, 0.1)
y = np.arange(-10.0, 5.0, 0.1)
X, Y = np.meshgrid(x, y)
Z = func1(X, Y)
fig = plt.figure()
ax = Axes3D(fig)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("f(x, y)")
ax.plot_wireframe(X, Y, Z)
plt.show()

yakobian.png yakobi2.png

Si vous prenez la peine de trouver le point d'arrêt et le point maximum à la main, il semble que le point de valeur maximum soit à (-4, -4). C'est difficile à comprendre. Je me demande si ça correspond

Trouvez la valeur minimale et la valeur maximale

from sympy import *


x = Symbol('x')

y = Symbol('y')



f =3*x**2+6*x*y+3*y**2+x**3+y**3




f_x = Derivative(f,x).doit() #Différenciation partielle du premier ordre avec x

f_y = Derivative(f,y).doit() #Différenciation partielle du premier ordre avec y



stationary_points = solve([f_x,f_y],[x,y]) #Point d'arrêt de la fonction

stationary_points = list(map(lambda x:simplify(x),stationary_points)) #Simplification



f_xx = Derivative(f, x, 2).doit() #Différenciation partielle du second ordre avec x

f_yy = Derivative(f, y, 2).doit() #Différenciation partielle du second ordre avec y

f_xy = Derivative(f_x,y).doit() #Partiellement différencié par x puis partiellement différencié par y

f_yx = Derivative(f_y,x).doit() #Partiellement différencié par y puis partiellement différencié par x



#Procession de Hesse

hesse = Matrix([

[f_xx,f_xy],

[f_yx,f_yy]

])



#Formule matricielle de la matrice de Hesse

det_hessian = hesse.det()



#Sortie pour le moment

print('f_x: {0}'.format(f_x))

print('f_y: {0}'.format(f_y))

print('f_xx: {0}'.format(f_xx))

print('f_yy: {0}'.format(f_yy))

print('f_xy: {0}'.format(f_xy))

print('f_yx: {0}'.format(f_yx))

print('Tous les arrêts{0}'.format(stationary_points))



#Jugement

for i in range(len(stationary_points)):

    sign_det_hessian = det_hessian.subs([(x,stationary_points[i][0]),(y,stationary_points[i][1])]).evalf()

    if sign_det_hessian > 0:

        sign_f_xx = f_xx.subs([(x,stationary_points[i][0]),(y,stationary_points[i][1])]).evalf()

        if sign_f_xx > 0:

            print('Point d'arrêt:{0}Est f(x,y)Point minimal'.format([stationary_points[i][0],stationary_points[i][1]]))

        elif sign_f_xx < 0:

            print('Point d'arrêt:{0}Est f(x,y)Point maximum de'.format([stationary_points[i][0],stationary_points[i][1]]))

        else:

            print('Ne peut pas être déterminé par cette méthode')

    elif sign_det_hessian < 0:

        print('Point d'arrêt:{0}Est f(x,y)Point de selle'.format([stationary_points[i][0],stationary_points[i][1]]))

kyokudai.png Il y en a eu, mais je ne comprends pas. Vous ne pouvez même pas le voir de vos propres yeux. Seule l'image d'un mouchoir volant dans les airs me vient à l'esprit ...

Assurez-vous que vous êtes à la limite

J'ai vérifié si c'était la limite. Nous avons utilisé x = rcosθ y = 2rsinθ en utilisant les coordonnées polaires Changez la valeur des coordonnées polaires en fonction de la valeur du dénominateur et de la situation, faites une formule de la fonction triangulaire, etc. et essayez environ la minute. À propos, la valeur de convergence est de 2.


\lim_{(x,y)\to (0,0)}\frac{x^3-8y^3+2x^2+8y^2}{x^2+4y^2}


import sympy as sym
import math
sym.init_printing()
Pi = sym.S.Pi #Pi
E = sym.S.Exp1 #Bas du logarithme naturel
I = sym.S.ImaginaryUnit #Unité imaginaire
oo = sym.oo #Infini

#Définition des variables à utiliser(Toute une lettre minuscule est un symbole)
(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) = sym.symbols('a b c d e f g h i j k l m n o p q r s t u v w x y z')

import numpy as np
import matplotlib.pyplot as plt
c=(x**3-8*y**3+2*x**2+8*y**2)/(x**2+4*y**2)
d=sym.limit(c,x,0)
print('{0}'.format(d))
dd=sym.limit(d,y,0)
e=sym.limit(c,y,0)
ee=sym.limit(e,x,0)
print('{0}'.format(e))
if dd == ee :
    print('Des limites de fonction existent')
    f=c.subs([(x,X),(y,1/2*Y)]).trigsimp() #Besoin de simplification(Tu devrais le faire ligne par ligne)
    g=np.abs(sym.limit(f-ee,r,0))
    print('{0}'.format(g))
else :
    print('Il n'y a pas de limite de fonction')

Ce résultat d'exécution montre que la limite de la fonction existe en toute sécurité, mais lorsque la limite n'existe pas, nous n'avons pas vérifié comment elle est exécutée. Je ferai de mon mieux.

Affichage du résultat de l'exécution indiquant si une différenciation partielle est possible


(x^2+xy+y^2)\log(x^2+y^2)


J'ai essayé de différencier partiellement chacun de x et y.

from sympy import *
import sympy as sym
import math
from IPython.display import display, Latex
x=Symbol('x')                  #lettre'x'Est défini comme la variable x
y=Symbol('y')                 #lettre'y'Est défini comme la variable y

f = (x ** 2 + x * y + y ** 2) * sym.log(x ** 2 + y ** 2)

display(f)

dx = sym.diff(f, x).subs({y: 0})
dy = sym.diff(f, y).subs({x: 0})

display(dx)
sym.plot(dx, (x, -5, 5))

display(dy)
sym.plot(dy, (y, -5, 5))

Lorsque j'ai accepté la question chez teratail, j'ai pu obtenir la réponse. Merci beaucoup. Lorsque x et y sont partiellement différenciés, tous deux passent par l'origine, il est donc possible de se différencier partiellement à l'origine. Facile à comprendre. image.png

Impressions

C'était juste très pratique pour python. Comparé à d'autres langues, il a beaucoup de bibliothèques et est vraiment incroyable. Ensuite, je voudrais ajouter une théorie. Cette fois aussi, ce n'était qu'une introduction. Je veux faire quelque chose de plus appliqué. Souhaitez-vous utiliser ce code pour des calculs et des contrôles difficiles?

Sites de référence et questions

https://qiita.com/tibigame/items/aebbac176d9bbdaf3d15 https://qiita.com/hiroyuki_mrp/items/d373b951e216f62c4957 https://qiita.com/PlanetMeron/items/63ac58898541cbe81ada https://short4010.hatenablog.com/entry/2019/05/12/142731 C'est mon compte https://teratail.com/questions/283867

Recommended Posts

J'ai essayé la différenciation jacobienne et partielle avec python
J'ai essayé la synthèse de fonctions et le curry avec python
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé webScraping avec python.
J'ai joué avec PyQt5 et Python3
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé la communication SMTP avec Python
J'ai essayé la gestion du suivi avec l'API Twitter et Python (facile)
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé un langage fonctionnel avec Python
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
J'ai installé et utilisé Numba avec Python3.5
# J'ai essayé quelque chose comme Vlookup avec Python # 2
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de détecter facilement les points de repère du visage avec python et dlib
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé le web scraping en utilisant python et sélénium
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé la détection d'objets en utilisant Python et OpenCV
J'ai essayé Python> autopep8
J'ai essayé L-Chika avec Razpai 4 (édition Python)
J'ai essayé de jouer en connectant PartiQL et MongoDB
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé d'utiliser mecab avec python2.7, ruby2.3, php7
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'exécuter faiss avec python, Go, Rust
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé d'exécuter Deep Floor Plan avec Python 3.6.10.
J'ai essayé d'envoyer un email avec SendGrid + Python
J'ai essayé Python> décorateur
J'ai essayé de mettre à jour le calendrier Google avec des rendez-vous CSV à l'aide de Python et de l'API Google
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
J'ai essayé d'accélérer le code Python, y compris l'instruction if avec Numba et Cython
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé pipenv et asdf pour le contrôle de version Python
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
Je veux gérer l'optimisation avec python et cplex
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de toucher un fichier CSV avec Python
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai essayé de résoudre Soma Cube avec python
Téléchargez facilement et partiellement mp4 avec python et youtube-dl!
Résolvez des équations différentielles normales simultanées avec Python et SymPy.
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé de faire LINE BOT avec Python et Heroku
Mayungo's Python Learning Episode 1: J'ai essayé d'imprimer avec impression