[PYTHON] Développement et simulation des perturbations Méthode des perturbations

Quelle est la méthode de la perturbation?

La méthode des perturbations est une méthode de calcul approximative des équations qui a été très développée dans le domaine de la physique. En utilisant cette méthode de résolution, il est possible de résoudre approximativement des équations différentielles et des équations aux dérivées partielles qui sont difficiles à résoudre par des calculs ordinaires. Lorsque la méthode de perturbation est classée en deux types, elle peut être divisée en deux types: «problème de perturbation» et «problème de perturbation spécifique». Le premier peut être résolu étape par étape, mais il existe peu de solutions établies au problème des perturbations singulières.

Dans cet article, je présenterai la méthode des problèmes de perturbation. Les résultats de la dérivation de la solution d'une équation différentielle simple et de l'exécution d'une simulation numérique sont présentés.

Équation différentielle normale non linéaire du premier ordre

\dot{y} + y + \epsilon y^2 =0 \\
s.t.   y(0)=1, \epsilon=o(1)

Il est bien connu que la résolution de problèmes non linéaires est généralement très difficile. Ici, nous supposons que $ \ epsilon $ est suffisamment petit. En termes simples, si $ \ epsilon $ est suffisamment petit, certains pourraient se demander s'il doit être traité comme 0. La solution à ce moment-là est simple

y=exp(-x)

Peut être dérivé. Ce calcul d'approximation est-il une bonne approximation?

def sim(time,y=1,e=0.01):
    save=[y]
    dt=0.01*e
    step=int(time/dt)
    for i in range(step):
        y=y-dt*y-e*dt*y**2
        save.append(y)
    return save
y1=sim(2)
a=np.linspace(0,2,len(y1))
y=np.exp(-a)
plt.plot(sim(2),a)
plt.plot(y,a)
plt.show()

result.png

Comme vous pouvez le voir, ce n'est pas très différent de la vraie distribution. Cette approximation est appelée une approximation d'ordre 0 en termes de théorie des perturbations. Pour améliorer cette approximation, faisons une expansion des perturbations.

y=y_0+\epsilon y_1+\epsilon^2 y_2+...

De cette façon, nous allons créer une série progressive de $ \ epsilon $. En le substituant à l'équation différentielle et en résolvant jusqu'au second ordre,

y_0=exp(-x)\\
\dot{y_1}+y_1+y_o^2=0\\
y_1=-exp(-x)+exp(-2x)\\
\dot{y_2}+y_2+2y_0y_1=0\\
y_2=exp(-x)-2exp(-2x)+exp(-3x)\\

Simulez cela.


y1=sim(2)
a=np.linspace(0,2,len(y1))
y=np.exp(-a)
y2=np.exp(-2*a)
y3=np.exp(-3*a)
plt.plot(sim(2),a)
plt.plot(y,a)
plt.plot(y1+(y2-y)*0.01,a)
plt.plot(y1+(y2-y)*0.01+(y-2*y2+y3)*0.0001,a)
plt.savefig("simu")
plt.show()

simu.png

Comme vous pouvez le voir sur les résultats, c'est très précis.

Conclusion

On peut voir que la précision de l'approximation est considérablement améliorée en effectuant le calcul d'approximation de cette manière.

La prochaine fois, j'introduirai le problème du terme pérenne dans lequel ce calcul approximatif ne fonctionne pas et expliquerai la méthode de la perturbation singulière.

Recommended Posts

Développement et simulation des perturbations Méthode des perturbations
Remplacement de méthode et super
Méthode de la somme cumulée et de la pomme de terre
Théorie de la prophétie et sa simulation (2)
Simulation acoustique Méthode FDTD Dérivation et mise en œuvre des limites d'absorption de Mur
Utilisation correcte de la méthode d'instance et de la méthode de classe
Méthode de normalisation (encodage) et réversion (décodage)
Introduction à la détection des anomalies et résumé des méthodes
[Python] Différence entre fonction et méthode