Diferenciálna rovnica s počiatočnou podmienkou (zmeniť fungujúci kód) – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Diferenciálna rovnica s počiatočnou podmienkou (zmeniť fungujúci kód) – Python – Fórum – Programujte.comDiferenciálna rovnica s počiatočnou podmienkou (zmeniť fungujúci kód) – Python – Fórum – Programujte.com

 

Euler2
~ Anonymní uživatel
2 příspěvky
29. 5. 2020   #1
-
0
-

Ahojte. 

Som úplný nováčik v Pythone (viac menej celkovo v programovaní).

Mám fungujúci kód, ktorý vyzerá takto:  

import numpy as np
import scipy.integrate as sp
import sys
g, l, k = 9.81, 10, float(input())
PTS = 6
def rhs( y, t, g, l, k ): return [ k*t/l * np.cos(y[1]) - g/l * np.sin(y[1]),y[0] ]
y0 = [ 0, 0 ]
t = np.linspace( 0, 6, PTS+1 )
y = sp.odeint( rhs, y0, t, args = (g, l, k) )
for i in range(PTS): print( t[i], np.arctan(k*t[i]/g) *180/np.pi 

a po spustení je potrebné zadať hodnotu pre k (v mojom prípade 0.5). Výsledok je: 

čas hodnota y
0.0 0.0
1.0 2.91774937823
2.0 5.82044363971
3.0 8.69348861202
4.0 11.5231772897
5.0 14.297051396

Poslednú hodnotu y = 14.297051396 (pre čas t=5)chcem použiť ako počiatočnú podmienku a vypočítať hodnoty pre čas t = 6, ..., 16, pričom chcem zadať hodnotu k=1.1.

Skúšala som viacero kódov, no nič nefunguje .... Ak to zadám takto: 

import numpy as np
import scipy.integrate as sp
import sys
g, l, k = 9.81, 10, float(input())
PTS = 12
def rhs( y, t, g, l, k ): return [ k*t/l * np.cos(y[1]) - g/l * np.sin(y[1]),
y[0] ]
y0 = [ 14.297051396, 5 ]
t = np.linspace( 5, 17, PTS+1 )
y = sp.odeint( rhs, y0, t, args = (g, l, k) )
for i in range(PTS): print( t[i], np.arctan(k*t[i]/g) *180/np.pi )

tak výsledok je rovnaký bez ohľadu na to, akú zadám počiatočnú podmienku y0. Vie mi niekto poradiť, čo robím zle?  Ďakujem!

Nahlásit jako SPAM
IP: 158.195.4.–
Euler2
~ Anonymní uživatel
2 příspěvky
29. 5. 2020   #2
-
0
-

Pokúšala som sa urobiť aj to, že som počiatočnú podmienku dala do času 0 a dala vypísať hodnoty v čase t=0 až t=12, no nepomohlo to 

import numpy as np
import scipy.integrate as sp
import sys
g, l, k = 9.81, 10, float(input())
PTS = 12
def rhs( y, t, g, l, k ): return [ k*t/l * np.cos(y[1]) - g/l * np.sin(y[1]),
y[0] ]
y0 = [14.297051396, 0 ]
t = np.linspace( 0, 12, PTS+1 )
y = sp.odeint( rhs, y0, t, args = (g, l, k) )
for i in range(PTS): print( t[i], np.arctan(k*t[i]/g) *180/np.pi )
Nahlásit jako SPAM
IP: 158.195.4.–
gna
~ Anonymní uživatel
1891 příspěvků
30. 5. 2020   #3
-
0
-

Takže tady se nijak neprojeví y nebo y0? 

print( t[i], np.arctan(k*t[i]/g) *180/np.pi )

Mělo by?

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 26 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý