Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

Nejste přihlášen(a). Přihlásit

#1 24. 03. 2021 14:04

nitaciii
Zelenáč
Příspěvky: 2
Reputace:   
 

Diferenciální rovnice druhého řádu Python

Zdravím, nedávno jsem napsal kód pro řešení diferenciálních rovnic prvního řádu, program vcelku dobře funguje. Pŕikládám ukázku pro eulerovu metodu.

def funkce_1(y, t):                           #pravá strana rovnice dy/dt= f
    return (-y)

def euler_1(dt, y, t, funkce):             
y = y + dt * funkce(y , t)
t = t + dt
return (y,t)

def solver(y0, t0, tstop, dt, typ, funkce):  #resi rovnice typu dy/dt pomoci typu resení(=euler_1, euler_2, Runge) a zadane funkce()=funkce_1 funkce_2)
    y = y0
    t = t0
    n = 0
    ys = [y]
    ts = [t]
    while (t < tstop):
        (y,t) = typ(dt, y, t, funkce)
        ts.append(t)
        ys.append(y)
    return(ts,ys)


Nyní máme za úkol rozšířit program do libovoného řádu diferenciální rovnice např d^2y/dt^2=f.
Tohle se obecně řesní substitucí dy/dt= u a pak máme soustavu dvou rovnic druhého řádu. Mysllím že bych zvládl pro no napsat další kód. Ovšem náš úkol je výslovně kód rozšířit tak aby počítal i rovnice tohoto druhu.
Mohl by mi někdo prosím poradit, původně jsem si myslel, že bude stačit jako počáteční podmínku zadat array y0= numpy.array[ y01, y02]. No tohle dosti pohořelo, hádám, že musím upravit funci euler_1. No nevím jak.

Offline

 

#2 24. 03. 2021 18:31

MichalAld
Moderátor
Příspěvky: 5367
Reputace:   130 
 

Re: Diferenciální rovnice druhého řádu Python

Rozhodně bych doporučoval si nejdříve napsat přesně vztahy, které potřebuješ implementovat, a potom teprve přemýšlet o tom, jak to naprogramovat...

Jinak bych řekl, že formálním zápisem y'=f(y,x) můžeme popsat jak jednu rovnici 1. řádu, tak i soustavu rovnic prvního řádů, za předpokladu, že x, y budou vektory, a ta funkce bude vektor funkcí.

Takže krok 1 bude napsat, jak přesně má vypadat Eulerova metoda, když x,y,y',f(x,y) budou vektory a potom vymyslet, jak upravit kód, aby dokázal pochroustat vektory. Problém bude podle mě hlavně s těma funkcema...na druhou stranu, pokud má jít o jednu rovnici řádu n, tak skutečná funkce tam bude jen jedna, a ty ostatní budou jen takové kvazi-funkce, sestávající jen z násobení jedničkou a nulou. Toho by se mělo asi nějak využít...tj. udělat extra výpočet toho prvního řádku a pak toho zbytku.

Offline

 

#3 24. 03. 2021 20:57

nitaciii
Zelenáč
Příspěvky: 2
Reputace:   
 

Re: Diferenciální rovnice druhého řádu Python

↑ MichalAld:jo díky za radu, vyšlo najevo, že jsem špatně pracoval s np.array. No kód už funguje, ještě jednou dík a přeji hezký večer.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson