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.
\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()
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()
Comme vous pouvez le voir sur les résultats, c'est très précis.
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