• Register

Posredovanje argumentov v funkcijo scipy.integrate.solve_ivp

+3 votes
88 views
Pozdravljeni,

pri uporabi funkcije solve_ivp je kot prvi argument potrebno posredovati funkcijo, ki predstavlja desno stran obravnave diferencialne enačbe, v mojem primeru je osnovna enačba:

LQ'' + RQ' + (1/C)Q = E(t)

funkcijo solve_ivp za določitev num. polja Q(t) sem uporabil na sledeč način:

def moja_funkcija(t, y, R, L, C):

          return (y(t) - R*d_Q - (1/C)*Q')/L

y_ivp = solve_ivp(fun=moja_funkcija, t_span=(t[0], t[-1], y0=[Q_0, dQ_0]

dobljeno numerično polje rešitev ni pravilno, ampak predvidevam, da sem časovni interval t_span=(v obliki terke) in začetna pogoja y0=[](v obliki seznama) posredoval pravilno.

Zanima me, če mi lahko prosim pomagate z nasvetom/linkom/primerom kako naj pravilno pripravim zahtevani argument
asked May 29 by stanislavstojanovic (380 points)
edited May 29 by stanislavstojanovic

2 Answers

+5 votes
 
Best answer
V tvojem primeru probaj definirat:

def moja_funkcija(t, pogoj):
    x0, x1 = pogoj
    dx = x1
    ddx = (E(t) - R*x1 - (1/C)*x0)/L
    resitev = np.array([dx, ddx])
    return resitev

Nato pa uporabi funkcijo kot si jo želel uporabit (solve_ivp), le da pri mejah podaš samo oznako pod katero si predhodno označil začetne pogoje. Dobljen rezultat nato zapiši z: xxx.y[0]
answered May 30 by stasgrah (1,030 points)
selected May 30 by stanislavstojanovic
+3 votes

napaka je bila v tem, da bi moral funkcijo definirati na sledeč način:

def funkcija(t, y):

    x1, x2 = y

    return np.array([leva stran enačbe, desna stran enačbe])

answered May 30 by stanislavstojanovic (380 points)
Funkcija mora vračati prve odvode novih spremenljivk pri pretvorbi diferencialne enačbe višjega reda na sistem D.E. prvega reda in ne leve in desne strani enačbe.

dx = y[1] je druga nova neznanka (y'), `dxx`, ki ga definira kolega v zgornjem odgovoru, pa je izraz za y'', ki ga dobite iz začetne enačbe.
...