Gebruikersavatar
Professor Puntje
Artikelen: 0
Berichten: 7.575
Lid geworden op: vr 23 okt 2015, 23:02

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
Professor Puntje
Artikelen: 0
Berichten: 7.575
Lid geworden op: vr 23 okt 2015, 23:02

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
Professor Puntje
Artikelen: 0
Berichten: 7.575
Lid geworden op: vr 23 okt 2015, 23:02

Re: Python en Jacobi

Kennelijk moet de eerste waarde sn(.5|.7) voorstellen, en dat klopt ook met WolframAlpha:
wa
Gebruikersavatar
Professor Puntje
Artikelen: 0
Berichten: 7.575
Lid geworden op: vr 23 okt 2015, 23:02

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
Professor Puntje
Artikelen: 0
Berichten: 7.575
Lid geworden op: vr 23 okt 2015, 23:02

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
Gebruikersavatar
OOOVincentOOO
Artikelen: 0
Berichten: 1.645
Lid geworden op: ma 29 dec 2014, 14:34

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?
CoenCo
Technicus
Artikelen: 0
Berichten: 1.209
Lid geworden op: di 18 okt 2011, 00:17

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
CoenCo
Technicus
Artikelen: 0
Berichten: 1.209
Lid geworden op: di 18 okt 2011, 00:17

Re: Python en Jacobi

oeps, dubbel
Gebruikersavatar
Professor Puntje
Artikelen: 0
Berichten: 7.575
Lid geworden op: vr 23 okt 2015, 23:02

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
Professor Puntje
Artikelen: 0
Berichten: 7.575
Lid geworden op: vr 23 okt 2015, 23:02

Re: Python en Jacobi

@ CoenCo

Dank voor de tips.
Gebruikersavatar
OOOVincentOOO
Artikelen: 0
Berichten: 1.645
Lid geworden op: ma 29 dec 2014, 14:34

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
Professor Puntje
Artikelen: 0
Berichten: 7.575
Lid geworden op: vr 23 okt 2015, 23:02

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
OOOVincentOOO
Artikelen: 0
Berichten: 1.645
Lid geworden op: ma 29 dec 2014, 14:34

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
Professor Puntje
Artikelen: 0
Berichten: 7.575
Lid geworden op: vr 23 okt 2015, 23:02

Re: Python en Jacobi

Dus je bedoelde iets anders?
CoenCo
Technicus
Artikelen: 0
Berichten: 1.209
Lid geworden op: di 18 okt 2011, 00:17

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.

Terug naar “Informatica en programmeren”