• Register

Napaka pri računanu diferencialne enačbe

+1 vote
422 views

Rešujem diferencialno enačbo in sem naletel na neko napako, ki je ne znam popraviti, in me zanima koko bi se rešil tega problema.

Zanima me tudi kako potem nadaljujem reševanje, kako uvedem novo spremenljivko in kako nadaljujem.

 

Koda:


import numpy as np
from ipywidgets import interact
import matplotlib.pyplot as plt
%matplotlib inline
import sympy as sym
sym.init_printing()

y, x = sym.symbols('y x')
enacba = sym.Eq(y(x).diff(x,2) + 100*sym.tan(x)*y(x).diff(x,1)+y(x), 0)
enacba

dsol = sym.dsolve(enacba, y(x))
dsol


asked May 21, 2016 by JanLampret (1,300 points)
prilagam še link do večje slike: http://shrani.si/f/2L/G9/2BupNJaJ/brez-naslova.png

2 Answers

+5 votes
 
Best answer
Jst ti predlagam, da delaš po postopku, ki smo ga uporabili na vajah, kjer smo rešili 2 ali 3 primere, med katerimi je bila tudi diferencialna enačba drugega reda.

1. # Uvozimo potreben modul
from scipy.integrate import ode

2. Uvedeš nove spremenljivke (ti boš potreboval 2), ki predstavljajo pri tebi y' in y''

npr.  z = k'
       w = z' = k"
       w' = z" = k'''     (za moj primer enačbe)

3. Definiraš seznama m in n (ali kakor jih pač poimenuješ), v katera zapišeš

 m = [k, z, w]
 n = [k', z', w']

4. Definiraš funkcijo in kaj ti vrne

def funk(t,m):
    return [m[1], m[2], np.sin(t)*m[1]+m[0]]

5. Definiraš začetne pogoje

6. Nato še s solverjem rešiš in narišeš
answered May 22, 2016 by urskamlakar (4,080 points)
selected May 22, 2016 by JanLampret
Da ti bo bolj jasno, moja enačba je bila sledeča:   k(t) - k'''(t) = sin(t)*k'(t)

Pa mogoče še komentar glede vseh modulov, ki si jih uvozu... Predvidevam, da si jih večina uporabil že v prejšnjih točkah naloge.... Pa ti jih ni treba v vsaki točki ponovno uvozit, vsaj sympy pa numpy si zihr že uporabil prej...

Pa asistenti so omenili, da samo v prvi točki uporabimo simbolno reševanje... V nadaljevanju pa se mu, če se le da izognemo...

Pa ne mi zamerit vseh mojih komentarjev ;)
+4 votes
Raje dif. enačbo reši numerično, npr. z metodo odeint. Postopek je hiter in enostaven
answered May 22, 2016 by Blaž Velkavrh (29,970 points)
...