Elliptische Probleme, etwa qui Ermittlung qui Bogenlänge de Ellipsen bestimmter forme et arpentage, peut alle sur trois Integrale sur Bogensegmente einer Normalellipse avec kleiner ou bien mais großer Halbachse = 1 dans fokaler Nulllage zurückgeführt volonté. Dummerweise gibt es viele différent Darstellungsformen cette trois Arten - je pour Mathematiker, qui sich avec cela verewigt hat, etwa qui Legendre-forme, Gauss-forme, Jacobi-forme, qui Riemann-forme et encore viele autre plus.
malheureusement wurde es Technikern dadurch schwer gemacht, qui richtige Formel pour trouver et den jeweils einzusetzenden Parametern et den nötigen Vorfaktoren klarzukommen, si sich bisher aucun Standardform comme Mainstream durchgesetzt hat. cela Thema "Ellipsenumfangsstrecke" gilt c'est pourquoi comme très exotisch.
cela nachstehende Demo-Progi konzentriert sich sur qui Legendre-forme qui "Unvollständigen" elliptischen Integrale ... - 1. Art: F(phi_max,k) = Integral{phi=0..phi_max; 1/SQRT(1+k^2*sin(phi)^ 2); d_phi}; et - 2. Art: E(phi_max,k) = Integral{phi=0..phi_max; SQRT(1+k^2*sin(phi)^ 2); d_phi}. (cela Integral 3. Art wäre encore deutlich komplizierter!) "Unvollständig" appeler qui seulement, weil pas qui ganze Viertelbogen qui Ellipse intéressé, mais plan seulement un entre 0° et einem Maximalwinkel liegender Teilbogen - Details siehe Wikipedia.
Den Quellen zufolge (Q: F77-Bibliotheksmodul 1982, HP41C UPN-Programme 1983 et TrueBasic-Modul 1997) beträgt qui erreichbare Genauigkeit des Algorithmus 11 Nachkommastellen. dans einem ungünstigen Grenzfall wurde allerdings seulement une Genauigkeit 10^-4 verifiziert. cela venez probablement à cause de eines Verfahrenswechsels chez Parameterwerten um 0.25 zustande. Basisalgorithmus ist ici qui sog. "Landen-Transformation".
périphérie einer realen Ellipse: Sei qui Numerische Exzentrizität qui Ellipse Epsilon = sqrt(a^2-b^2)/a ; ensuite ist qui Bogenlänge des Ellipsen-Teilbogens entre 0 et Phi: L= a * E(Phi, Epsilon) avec E = Unvollst.Ellipt.Integral_zweiter_Art, comment suivante berechnet. Anwendung comme Privé Demo, là situation juridique dzt. ungeprüft!
Titre de la fenêtre "Unvollständige Elliptische Integrale 1. et 2. Art {Legendre-F(phi,k), E(phi,k)}"
' Versuch (Early pre-alpha) - sans jegliche Gewähr!
'{Q: F77-Bibliotheksmodul 1982, HP41C UPN-Programme 1983 et TrueBasic-Modul 1997
' 2015-07 pour XProfan 11.2a montiert - ACHTUNG: Ausschließlich comme Demo!
' *** Möglicherweise bestehen Rechte Dritter! *** MfG Z. Ahnpasta
Windowstyle 24:Cls:font 2:set("decimals",17)
declare q!,k!,a!,d2r! , F!,Ellpci_e! : d2r!=pi()/180
Whileloop 0,900,1'6
q!=d2r!* &Boucle/10'30 '°
k!=sin(q!)'Hinweis: c'est NICHT qui 'Modulwinkel'-Version qui Legendre-Normalform,
'k soll ici simple seulement den Definitionsbereich [0..1] durchlaufen!
imprimer "\n k = ";format$("00.0",&Boucle);" °"
Waitinput 2000' ou bien auskommentieren ...
whileloop 0,90,15 : a!=d2r!* &Boucle/10'° dans Zehntelgrad-Schritten
'*************************************************************************
'Proc-Aufruf mets 2 Ergebnisse:
F!=Ellpci(a!,k!)
'qui ausserhalb des Proc definierte Variable Ellpci_E!
'bringt ici cela 2. Ergebnis, E(phi,k) (Legendre-forme 2. Art) zurück.
'*************************************************************************
'*************************************************************************
' EINZELWERT-TEST, nachträglich eingefügt. s'il te plaît qui nachstehende Testzeile
' auskommentieren, si pas bestimmte paramètre getestet volonté devoir!
'F!=Ellpci( 0.9, 0.9 ) :clearclip:putclip str$(Ellpci_E!):waitinput
' Ergebnis dans qui Zwischenablage 17-stellig disponible, um Präzision trop vérifier.
'*************************************************************************
'*************************************************************************
'Ausgabe:
imprimer " Phi = ";format$("00.0",&Boucle);" °";
imprimer tab(15);"F(phi,k) = ";format$("%g",f!),
imprimer tab(45);"E(phi,k) = ";format$("%g",ellpci_e!)
'*************************************************************************
endwhile
Endwhile
waitinput
FIN
'{ VERIFIKATIONSTEIL
'*************************************************************************
' Präzisionsausgabe de E(phi,k) online disponible sur:
' https://keisan.casio.com/exec/system/1244989948
' Weitere Kontrolle via Maxima-Funktion elliptic_e(phi(=a),m(=k^2))
'*************************************************************************
'E(x,k) = Ellipci_E!
'-----------------------------------
'0.0, 0.0 = 0
'0.0, 0.1 = 0
'0.0, 0.4 = 0
'0.0, 0.9 = 0
'*** OK ! ***
'-----------------------------------
'Keisan 0.6,0.4 = 0.5945980735117437678766
'Maxima 0.6,0.4^2 = 0.59459807351174
'Ellpci(0.6,0.4) = 0.59459807353087835
'*** OK ! ***
'-----------------------------------
'E(0.9,0.9) =
'Keisan(phi[roue],k): 0.808143018647826110606
'Maxima: elliptic_e(phi,k*k): 0.80814301864783
'Ellipci: 0.80818524219652310
'*** MATHEMATISCH NICHT OK !!! (technique ausreichend) ***
'---------------------------------------------------------
'Ellipci(0.9,sqrt(0.9)) = 0.79659968020564376
'Maxima's_elliptic_e(0.9,0.9=k^2) = 0.79659968020564
'Keisan_E(0.9,Sqrt(0.9)) = 0.796599680205643585782
'*** OK ! ***
'Hinweis: Sqrt(0.9)=0.94868329805051379959966806332982
'-----------------------------------
'1.0, 0.0 = 1.570796326794896619231
'= Pi()/2 = 1.5707963267948966192313216916398
'*** OK ! ***
'}*********************************************************
Proc Ellpci :Paramètres a!,k!
' a := Phi_max (sometimes called 'Amplitude')
' k := Modulus (dans qui Literatur wird aussi m verwendet, avec m = k^2)
' F! = integral of first enfant
' E! = integral of second enfant
' Algorithm: Landen transformation with le DiDonato recurrence
' dans specific ranges of le argument
' Proc uses external variable ellpci_e! for output of E!
declare s! ,c!
declare s0!,c0!, p0!,q0!
declare s1!,c1!
declare p1!,q1!, p2!,q2!
declare s2!,s3!,s4!,s7!
declare r0!,r1!,r2!, r7!
declare n0!,n1!,n2!
declare t0!,t1!,t2!,t3!,t7!
declare d0!,d1!,d2!,d3!,d4!,d7!
declare i1!,i2!,j1!,j2!,k1!,k2!, m7!,n7!
declare L1!,L2!
p2!=k!*k!
q2!=(1-k!)*(1+k!)
s!=sin(a!)
c!=cos(a!)
s0!=s!*s!
c0!=c!*c!
p0!=abs(k!*s!)
q0!=abs(k!*c!)
cas p0!>=sqrt(.5):goto "ellpci_44"
r1!=a!
r2!=1
s1!=0
s2!=0
n1!=1
n2!=2
t0!=a!*s0!
t7!=s!*c!
goto "ellpci_33"
ellpci_29:
n1!=n2!+1
n2!=n1!+1
t0!=s0!*t0!
t7!=s0!*t7!
ellpci_33:
r0!=s1!
r1!=(n1!*r1!-t7!)/n2!
r2!=p2!*r2!/n2!
s2!=s2!+r1!*r2!
r2!=n1!*r2!
s1!=s1!+r1!*r2!
cas abs(t0!)<abs(r0!):goto "ellpci_41"
cas abs(s1!)>abs(r0!):goto "ellpci_29"
ellpci_41:
f!=a!+s1!
ellpci_e!=a!-s2!
return f!
imprimer "Never reach 43-error!":waitinput
ellpci_44:
d7!=(1-p0!)*(1+p0!)
d0!=sqrt(d7!)
i2!=1
j2!=1
k2!=0
m7!=0
n7!=0
s1!=0
s2!=0
s3!=0
s4!=0
t3!=q0!*d0!
n0!=2
goto "ellpci_63"
ellpci_58:
i2!=i1!
j2!=j1!
k2!=k1!
n0!=n0!+2
t3!=d7!*t3!
ellpci_63:
n1!=(n0!-1)/n0!
n2!=(n0!+1)/(n0!+2)
i1!=n1!*i2!
j1!=n1!*n1!*q2!*j2!
k1!=k2!+2/(n0!*(n0!-1))
r0!=t3!/n0!
m7!=n2!*n2!*q2!*(m7!-r0!*i1!)
n7!=n1!*n2!*q2!*(n7!-r0!*i2!)'=Orig
d1!=j1!
d2!=n2!*j1!
d3!=m7!-j1!*k1!
d4!=n7!-n1!*q2!*j2!*k1! + q2!*j2!/(n0!*n0!)
r0!=s3!
s1!=s1!+d1!
s2!=s2!+d2!
s3!=s3!+d3!
s4!=s4!+d4!
cas s3!<r0!:goto "ellpci_58"
t0!=d0!+q0!
r7!=t0!/4
L1!= -1*ln(r7!)
t7!=1+p0!
s7!=t7!/2
L2!= ln(s7!)
'k=1:Kreis, daher Arc=Kreisbogen[roue] 'mon eigene Changement!
si L2!=0:ellpci_e!=sin(a!):beep:return Ln(tan(a!/2+Pi()/4)):Fin:endif
t1!=(1+s1!)*L1!+q0!/d0!*L2!
t2!=(.5+s2!)*q2!*L1!+1-q0!/d0!*(1-p0!)
f!=t1!+s3!
ellpci_e!=t2!+s4!
cas a!>=0:goto "ellpci_94"
f!= -1*f!
ellpci_e!= -1*ellpci_e!
ellpci_94:
return f!
endproc
|