Elliptische Problemas, etwa el Ermittlung el Bogenlänge de Ellipsen bestimmter Form y Abmessung, puede todos en drei Integrale encima Bogensegmente uno Normalellipse con kleiner oder aber großer Halbachse = 1 en fokaler Nulllage zurückgeführt voluntad. Dummerweise hay viele diferente Darstellungsformen dieser drei Arten - je después de Mathematiker, el se así verewigt ha, etwa el Legendre-Form, Gauss-Form, Jacobi-Form, el Riemann-Form y todavía viele otro mehr.
Leider wurde lo Technikern dadurch schwer gemacht, el richtige Formel para encontrar y el jeweils einzusetzenden Parametern y el nötigen Vorfaktoren klarzukommen, sodaß se bisher no Standardform como Mainstream durchgesetzt ha. Das Thema "Ellipsenumfangsstrecke" gilt deshalb como muy exotisch.
Das nachstehende Demo-Progi konzentriert se en el Legendre-Form el "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}; y - 2. Art: E(phi_max,k) = Integral{phi=0..phi_max; SQRT(1+k^2*sin(phi)^2); d_phi}. (Das Integral 3. Art wäre todavía deutlich komplizierter!) "Unvollständig" heißen el sólo, porque no todo Viertelbogen el Ellipse interessiert, pero eben sólo una zwischen 0° y una Maximalwinkel liegender Teilbogen - Details siehe Wikipedia.
Den Quellen zufolge (Q: F77-Bibliotheksmodul 1982, HP41C UPN-Programa 1983 y TrueBasic-Modul 1997) beträgt el erreichbare Genauigkeit des Algorithmus 11 Nachkommastellen. In una ungünstigen Grenzfall wurde allerdings sólo una Genauigkeit 10^-4 verifiziert. Das kommt vermutlich wegen uno Verfahrenswechsels en Parameterwerten en 0.25 zustande. Basisalgorithmus es hier el sog. "Landen-Transformation".
Umfang uno realen Ellipse: Sei el Numerische Exzentrizität el Ellipse Epsilon = sqrt(a^2-b^2)/a ; entonces el Bogenlänge des Ellipsen-Teilbogens zwischen 0 y Phi: L= a * E(Phi, Epsilon) con E = Unvollst.Ellipt.Integral_zweiter_Art, como nachstehend berechnet. Anwendung como Privado Demo, como Rechtslage dzt. ungeprüft!
Título de la ventana "Unvollständige Elliptische Integrale 1. y 2. Art {Legendre-F(phi,k), E(phi,k)}"
' Intento (Early pre-alpha) - sin jegliche Gewähr!
'{Q: F77-Bibliotheksmodul 1982, HP41C UPN-Programa 1983 y TrueBasic-Modul 1997
' 2015-07 después de XProfan 11.2a montiert - ACHTUNG: Ausschließlich como Demo!
' *** Möglicherweise bestehen Rechte Dritter! *** MfG Z. Ahnpasta
Windowstyle 24:Cls:font 2:set("decimals",17)
declarar q!,k!,a!,d2r! , F!,Ellpci_e! : d2r!=pi()/180
Whileloop 0,900,1'6
q!=d2r!* &Loop/10'30 '°
k!=sin(q!)'Referencia: Es NICHT el 'Modulwinkel'-Versión el Legendre-Normalform,
'k se hier simplemente sólo el Definitionsbereich [0..1] durchlaufen!
imprimir "\n k = ";format$("00.0",&Loop);" °"
Waitinput 2000' oder auskommentieren ...
whileloop 0,90,15 : a!=d2r!* &Loop/10'° en Zehntelgrad-Schritten
'*************************************************************************
'Proc-Aufruf setzt 2 Ergebnisse:
F!=Ellpci(a!,k!)
'El ausserhalb des Proc definierte Variable Ellpci_E!
'bringt hier el 2. Ergebnis, E(phi,k) (Legendre-Form 2. Art) zurück.
'*************************************************************************
'*************************************************************************
' EINZELWERT-TEST, nachträglich eingefügt. Bitte el nachstehende Testzeile
' auskommentieren, si no cierto Parámetro getestet voluntad debería!
'F!=Ellpci( 0.9, 0.9 ) :clearclip:putclip str$(Ellpci_E!):waitinput
' Ergebnis en el Zwischenablage 17-stellig verfügbar, en Präzision a prüfen.
'*************************************************************************
'*************************************************************************
'Edición:
imprimir " Phi = ";format$("00.0",&Loop);" °";
imprimir tab(15);"F(phi,k) = ";format$("%g",f!),
imprimir tab(45);"E(phi,k) = ";format$("%g",ellpci_e!)
'*************************************************************************
endwhile
Endwhile
waitinput
FIN
'{ VERIFIKATIONSTEIL
'*************************************************************************
' Präzisionsausgabe de E(phi,k) online verfügbar en:
' https://keisan.casio.com/exec/system/1244989948
' Weitere Kontrolle via Maxima-Función 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[rad],k): 0.808143018647826110606
'Maxima: elliptic_e(phi,k*k): 0.80814301864783
'Ellipci: 0.80818524219652310
'*** MATHEMATISCH NICHT OK !!! (Technisch 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 ! ***
'Referencia: Sqrt(0.9)=0.94868329805051379959966806332982
'-----------------------------------
'1.0, 0.0 = 1.570796326794896619231
'= Pi()/2 = 1.5707963267948966192313216916398
'*** OK ! ***
'}*********************************************************
Proc Ellpci :Parámetros a!,k!
' a := Phi_max (sometimes called 'Amplitude')
' k := Modulus (In el Literatur se auch m verwendet, con m = k^2)
' F! = integral of first kind
' E! = integral of second kind
' Algorithm: Landen transformation with the DiDonato recurrence
' en specific ranges of the argument
' Proc uses external variable ellpci_e! for output of E!
declarar s! ,c!
declarar s0!,c0!, p0!,q0!
declarar s1!,c1!
declarar p1!,q1!, p2!,q2!
declarar s2!,s3!,s4!,s7!
declarar r0!,r1!,r2!, r7!
declarar n0!,n1!,n2!
declarar t0!,t1!,t2!,t3!,t7!
declarar d0!,d1!,d2!,d3!,d4!,d7!
declarar i1!,i2!,j1!,j2!,k1!,k2!, m7!,n7!
declarar 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!)
caso 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!
caso abs(t0!)<abs(r0!):goto "ellpci_41"
caso abs(s1!)>abs(r0!):goto "ellpci_29"
ellpci_41:
f!=a!+s1!
ellpci_e!=a!-s2!
volver f!
imprimir "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!
caso 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, por lo tanto Arc=Kreisbogen[rad] 'Mi propio Änderung!
if L2!=0:ellpci_e!=sin(a!):beep:volver Ln(tan(a!/2+Pi()/4)):End: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!
caso a!>=0:goto "ellpci_94"
f!= -1*f!
ellpci_e!= -1*ellpci_e!
ellpci_94:
volver f!
ENDPROC
|