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
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
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
↑ 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