Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

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: 5071
Reputace:   126 
 

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