2017-02-18 2 views
1

Ich möchte den Umfang der Ellipse mit gegebenen Werten der Neben- und Hauptachsenwert berechnen. Ich verwende derzeit Python.So berechnen Sie den Umfang der Ellipse

I haben Nebenachse und einer Hauptachsenlänge berechnet für Ellipse d.h. a und b .

Es ist einfach, Fläche zu berechnen, aber ich möchte den Umfang der Ellipse berechnen, um die gerundete Länge zu berechnen. Hast du irgendeine Idee ?

+0

Siehe auch: http://www.mathsisfun.com/geometry/ellipse-perimeter.html –

+0

ich schon dort besucht haben und bekommen verwirrt –

+0

eine Menge Annäherung, die man am besten ist, eine Idee zu verwenden ?? –

Antwort

2

Nach Ramanujans Näherungsformel der Umfang der Ellipse zu finden ->

>>> import math 
>>> 
>>> def calculate_perimeter(a,b): 
...  perimeter = math.pi * (3*(a+b) - math.sqrt((3*a + b) * (a + 3*b))) 
...  return perimeter 
... 
>>> calculate_perimeter(2,3) 
15.865437575563961 

Sie können das Ergebnis mit google calculator auch

+0

Vielen Dank für Ihre Antwort. Ich habe gerade oben Code überprüft und funktioniert gut –

3

ein Definitionsproblem vergleichen: major, minor Achsen unterscheiden sich von großen Halb, semi moll
die OP sollte klar sein, sollten diejenigen greifen, im Vergleich zu Online-Lösungen werden zu

enter image description here

Sie können sympy bekommen (numerisch) das Problem zu lösen, bin ich mit der vollen Achsen Definition

from sympy import * 
a, b, w = symbols('a b w') 

x = a/2 * cos(w) 
y = b/2 * sin(w) 

dx = diff(x, w) 
dy = diff(y, w) 

ds = sqrt(dx**2 + dy**2) 

def perimeter(majr, minr): 
    return Integral(ds.subs([(a,majr),(b,minr)]), (w, 0, 2*pi)).evalf().doit() 

print('test1: a, b = 1 gives dia = 1 circle, perimeter/pi = ', 
     perimeter(1, 1)/pi.evalf()) 

print('test2: a, b = 4,6 ellipse perimeter = ', perimeter(4,6)) 

test1: a, b = 1 gives dia = 1 circle, perimeter/pi = 1.00000000000000 
test2: a, b = 4,6 ellipse perimeter = 15.8654395892906 

sein auch möglich, die symbolische ds Gleichung als eine Funktion für den Export mit anderen Python lib Integrationsfunktionen zu versuchen,

func_dw = lambdify((w, a, b), ds) 

from scipy import integrate 

print(integrate.quad(func_dw, 0, 2*np.pi, args=(4, 6))) 

(15.865439589290586, 2.23277254813499e-12) 

scipy.integrate.quad (func, a, b, args =() ...
Returns:
y: float das Integral von func von a bis b.
abserr: float, Eine Schätzung des absoluten Fehler im Ergebnis

+0

Keine Notwendigkeit für "scipy.integrate.quad". Verwende 'scipy.special.ellipe'. –

Verwandte Themen