Python en Jacobi

Moderators: jkien, Xilvo

Reageer
Gebruikersavatar
Berichten: 7.463

Python en Jacobi

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!

Gebruikersavatar
Berichten: 7.463

Re: Python en Jacobi

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

Gebruikersavatar
Berichten: 7.463

Re: Python en Jacobi

Kennelijk moet de eerste waarde sn(.5|.7) voorstellen, en dat klopt ook met WolframAlpha:
wa.png

Gebruikersavatar
Berichten: 7.463

Re: Python en Jacobi

Code: Selecteer alles

import scipy.special

A = scipy.special.ellipj(.5, .7)

A[0]
Out[6]: 0.46729200535903359
Goed - dat werkt ook. :D

Volgende stap: een grafiekje van sn voor enige verschillende waarden van de parameter m.

Gebruikersavatar
Berichten: 7.463

Re: Python en Jacobi

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)
sn.png

Gebruikersavatar
Berichten: 1.605

Re: Python en Jacobi

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?

Technicus
Berichten: 1.151

Re: Python en Jacobi

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')
grafiekje.png

Technicus
Berichten: 1.151

Re: Python en Jacobi

oeps, dubbel

Gebruikersavatar
Berichten: 7.463

Re: Python en Jacobi

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.

Gebruikersavatar
Berichten: 7.463

Re: Python en Jacobi

@ CoenCo

Dank voor de tips.

Gebruikersavatar
Berichten: 1.605

Re: Python en Jacobi

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.

Gebruikersavatar
Berichten: 7.463

Re: Python en Jacobi

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?

Gebruikersavatar
Berichten: 1.605

Re: Python en Jacobi

Omdat je antwoord geeft en niet vraagt wat ik bedoel. Dan ga ik maar wederom ervan uit dat iets verkeerd omschreven had.

Gebruikersavatar
Berichten: 7.463

Re: Python en Jacobi

Dus je bedoelde iets anders?

Technicus
Berichten: 1.151

Re: Python en Jacobi

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.

Reageer