1 van 14
Python en Jacobi
Geplaatst: vr 04 jun 2021, 16:37
door Professor Puntje
Graag zou ik in Python werken met de Jacobi elliptische functies. Mijn computer draait op Linux Mint. Doel is het plotten en nader onderzoeken van de baan van licht dat de zon rakelings passeert. Dat moet volgens het volgende artikel met een Jacobi elliptische functie kunnen:
https://www.researchgate.net/publicatio ... s_approach
Tips zijn welkom!
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 17:48
door Professor Puntje
Het beginnetje is er:
Code: Selecteer alles
scipy.special.ellipj(.5, .7)
Out[7]:
(0.46729200535903359,
0.8841030379585475,
0.92040574053472368,
0.48622530445618917)
Nu nog achterhalen wat daar staat. Misschien helpt dit:
https://docs.scipy.org/doc/scipy/refere ... llipj.html
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 18:10
door Professor Puntje
Kennelijk moet de eerste waarde sn(.5|.7) voorstellen, en dat klopt ook met WolframAlpha:
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 18:28
door Professor Puntje
Code: Selecteer alles
import scipy.special
A = scipy.special.ellipj(.5, .7)
A[0]
Out[6]: 0.46729200535903359
Goed - dat werkt ook.
Volgende stap: een grafiekje van sn voor enige verschillende waarden van de parameter m.
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 18:57
door Professor Puntje
Code: Selecteer alles
import numpy as np
import matplotlib.pyplot as plt1
import scipy.special
fig, ax1= plt1.subplots(figsize=(15, 15))
x=np.linspace(-10,10, 1000)
y=scipy.special.ellipj(x,.99)[0]
ax1.plot(x,y)
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 19:44
door OOOVincentOOO
Mooi, ik wist niet zeker of de scipy.special.ellipj een array als input neemt.
Ik zat al te bedenken hoe uit te leggen een array te zullen met een for loop.
Komt de halve periode van x=-10 to -3 overeen met de totale cumulative hoekdeflectie? De s-curve uit voorgaande topic?
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 19:58
door CoenCo
Fijn dat het lukt.
Even een paar tips bijgevoegd in onderstaande code:
Code: Selecteer alles
import numpy as np
# pyplot importeert iedereen standaard als plt,
# dus niet als plt1
import matplotlib.pyplot as plt
import scipy
#als je een functie vaak gebruikt,
#dan kan je hem los importeren, dan is de naam korter:
from scipy.special import ellipj
x=np.linspace(-10,10, 1000)
#als je al weet dat een functie 4 outputs heeft,
#dan kan je die gelijk aan 4 variabelen toewijzen,
#als je een variable niet wil gebruiken,
#dan gebruik je daarvoor een _
#stel dat we alleen sn en cn willen, terwijl ellipj 4 outputs geeft :
sn,cn,_,_=ellipj(x,.99)
#maak de figuur aan
fig, ax1= plt.subplots(figsize=(6, 6))
# twee grafiekjes in dezelfde figuur, geef elke lijn ook een label
# dat label komt later in de legenda
ax1.plot(x,sn, label='waarde sn')
ax1.plot(x,cn, label='waarde cn')
#voeg een legenda toe, en zeg dat hij rechtsboven moet
ax1.legend(loc='upper right')
#voeg een grid toe
ax1.grid()
#voeg een titel toe
ax1.set_title('mijn grafiekje')
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 20:12
door CoenCo
oeps, dubbel
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 20:36
door Professor Puntje
OOOVincentOOO schreef: ↑vr 04 jun 2021, 19:44
Mooi, ik wist niet zeker of de scipy.special.ellipj een array als input neemt.
Ik zat al te bedenken hoe uit te leggen een array te zullen met een for loop.
Nee - scipy.special.ellipj heeft één argument en één parameter als input, en een array als output. Het is eigenlijk vier functies in één. Zie:
https://docs.scipy.org/doc/scipy/refere ... llipj.html
Komt de halve periode van x=-10 to -3 overeen met de totale cumulative hoekdeflectie? De s-curve uit voorgaande topic?
Het is ingewikkelder, en het staat hier:
https://www.researchgate.net/publicatio ... s_approach
Ik moet dat zelf ook nog even goed lezen voor ik er verder mee ga.
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 20:40
door Professor Puntje
@ CoenCo
Dank voor de tips.
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 21:26
door OOOVincentOOO
Professor Puntje schreef: ↑vr 04 jun 2021, 20:36
OOOVincentOOO schreef: ↑vr 04 jun 2021, 19:44
Mooi, ik wist niet zeker of de scipy.special.ellipj een array als input neemt.
Ik zat al te bedenken hoe uit te leggen een array te (z)vullen met een for loop.
Nee - scipy.special.ellipj heeft één argument en één parameter als input, en een array als output. Het is eigenlijk vier functies in één. Zie:
https://docs.scipy.org/doc/scipy/refere ... llipj.html
Waarom deze reactie? Is het dan zo logisch dat een array altijd als input genomen kan worden? Dat denk ik van niet.
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 21:33
door Professor Puntje
Of het logisch is of niet weet ik niet, ik ben niet thuis in deze programmatuur. Maar zover ik het begrijp is het zoals ik beschreven heb. Wat was er mis met mijn reactie?
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 21:45
door OOOVincentOOO
Omdat je antwoord geeft en niet vraagt wat ik bedoel. Dan ga ik maar wederom ervan uit dat iets verkeerd omschreven had.
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 21:55
door Professor Puntje
Dus je bedoelde iets anders?
Re: Python en Jacobi
Geplaatst: vr 04 jun 2021, 21:56
door CoenCo
OOOVincentOOO schreef: ↑vr 04 jun 2021, 21:45
Omdat je antwoord geeft en niet vraagt wat ik bedoel. Dan ga ik maar wederom ervan uit dat iets verkeerd omschreven had.
Maak je niet te druk. Puntje komt net kijken bij Python.
Voor de volledigheid: praktisch alle commando’s uit de numpy en scipy packages zijn compatible met arrays als input. Mits dat voor de commando’s nuttig en eenduidig implementeerbaar is.
Zoals je in de handleiding van ellipj (zie boven) kan zien, zijn de inputs “array-like”. Over het algemeen kan je daar zowel een scalar, een list als een 1d-array instoppen.
Datzelfde kan bijvoorbeeld met de wortel: np.sqrt
Stop er een lijst met getallen in, en je krijgt er een even lange lijst met de wortel van die getallen (elementwise) voor terug.