• Register

DN - scipy.integrate.odeint - Diferencialna enačba 2.reda

+22 votes
641 views
Torej pri domači nalogi imamo podano diferencialno enačbo drugega reda.

m*x''(t) + d*x'(t) + k*x(t) = d*y'(t) + k*y(t)

s pogojema:

x(0) = y(0) in x'(0)=y'(0)

y in y' imam že posebej izračunana. Zanima me ali ko definiramo funkcijo (za v odeint) oz. v sami funkciji odeint potrebno tudi podati y in y' ali ju pri definiranju funkcije zapišemo kot x(0) in x'(0).

Želim poiskat x'', x', in nato še x

 

Lp Tilen Mlinarič
asked Dec 25, 2016 by tilen.mlinaric (7,770 points)
def funkcija(pogoj, t, k, d, m):
    x0, x1 = pogoj
    dx = x1
    dxx = (d*y1 + k*y0 - d*x1 - k*x0)/m
    
    return [dx, dxx]


Zdi se mi, da to ni pravilno, saj se s časom y in y' spreminjata. Ne vem pa kako bi to vključil v sam izračun.
Tipično v funkcijo odvodov vnašamo "trenutno" stanje. V zgornjo funkcijo prvih odvodov torej ne bi vnesli noter y0 in y1 (kot začetne vrednosti), pač pa y0 trenutnega stanja in y1 trenutnega stanja. Glejte predavanja in če ugotovite, napišite prosim kot odgovor!

1 Answer

+5 votes
 
Best answer

Imate prav! Napaka je v definiciji naloge. Pri četrtem vprašanju so narobe podani začetni pogoji, mišljeno  je bilo [x[t_0], x'[t_0]] (in ne [x[0], x'[0]] kot je trenutno napisano v navodilih).


Če imate y(t) in y'(t) podana v obliki funkcije, ga lahko tako tudi kličete npr.:

def y(t):
    return np.sin(t)

def dy(t):
    return np.cos(t)

potem jo pač vključite v vašo funkcijo za odeint:

def funkcija(pogoj, t, k, d, m):
    x0, x1 = pogoj
    dx = x1
    dxx = (d*dy(t) + k*y(t) - d*x1 - k*x0)/m
    
    return [dx, dxx]

Z uporabo `scipy.integrate.odeint` nato integrirate zgornjo funkcijo (pri začetnih pogojih `[y[0], dy[0]]`) in kot rezultat dobite pomike (x) in hitrosti (x'). Pospeške dobite z vstavitvijo omenjenih dveh veličin v prvotno diferencialno enačbo (x''(t) = (d*dy(t) + k*y(t) - d*x'(t) - k*x(t))/m).

answered Dec 25, 2016 by blaz (41,550 points)
edited Dec 26, 2016 by blaz
super, rešitev se mi zdi logična. Rešitev pa žal ni pravilna :/ Mogoče še kakšna malenkost, ki bi lahko bila narobe? Saj če prav razumem funkcija vrne x in x'.
Sem še enkrat preveril zgornje in bi moralo biti pravilno. Mogoče kje naredite napako (ali pa je napaka na naši strani),  npr. preverite vaše začetne pogoje. Težko je sklepati kje ste storili napako, saj imamo premalo informacij.
Imate prav! Napaka je v definiciji naloge. Pri četrtem vprašanju so narobe podani začetni pogoji, mišljeno  je bilo [x[t_0], x'[t_0]] (in ne [x[0], x'[0]] kot je trenutno napisano v navodilih).

Sedaj imate 100%.
Super, dobro da sem lahko pripomogel.
...