2017-07-07 2 views
0

Wenn ich etwas wie den Code unten ausführen würde, wo ich in den kleinen und großen Bogen einer Ellipse wie 3.05 und 2.23 mit dem 50 Grad Winkel, der durch den Bogen gebildet wird, übergeben, wie würde ich die Ausgabe von 2.531432761012828 als nehmen können die Lichtbogenlänge und pass es zurück durch, um für t zu lösen? Vielen Dank!Wie invertiert man die scipy quad Funktion um eine Bogenlänge zu übergeben und einen Wert für (t) zu erhalten?

import math 
from scipy.integrate import quad 
import numpy as np 
t = math.atan(3.05*math.tan(5*math.pi/18)/2.23) 
Dx = lambda t: -3.05 * np.sin(t) 
Dy = lambda t: 2.23 * np.cos(t) 
quad(lambda t: np.sqrt(Dx(t)**2 + Dy(t)**2), 0, t) 

Der Ausgang der letzten war: (2,531432761012828, 2.810454936566873e-14)

+0

Haben Sie 'full_output' versucht? Können Sie bei der analytischen Integration die obere Integrationsgrenze vom Wert "zurücksetzen"? – hpaulj

Antwort

2

die obere Grenze der Integration zu finden, die den Wert des Integrals gegeben, ein fsolve auf die Funktion anwenden kann, die berechnet dieses Integral für variable Obergrenzen. Beispiel (die Linien nicht zu wiederholen Sie bereits haben):

from scipy.optimize import fsolve 
target = 2.531432761012828 
fun = lambda s: quad(lambda t: np.sqrt(Dx(t)**2 + Dy(t)**2), 0, s)[0] - target 
s0 = fsolve(fun, 0)[0] 
print(s0) 

Dieser druckt 1.02051.

Ich mag nicht sowohl die Variable der Integration und die obere Grenze durch den gleichen Buchstaben bezeichnet, so in meinem Code die obere Grenze wird s genannt.

+0

In einem groben Sinne versucht es verschiedene obere Grenzwerte in der Nähe Ihrer ersten Schätzung, bis es einen findet, der das gleiche Integral erzeugt. Es ist ausgefeilter als ein Jagt-n-Peck, aber der Auftraggeber ist der gleiche. Probieren Sie die Werte aus, bis Sie eine Übereinstimmung erhalten. – hpaulj

Verwandte Themen