2017-07-07 16 views
0

私が下のコードのように、楕円のマイナーアークとメジャーアークで3.05と2.23を渡し、アークによって形成された50度の角度で実行すると、2.531432761012828の出力をどのように取ることができますか?弧の長さを求め、それを通ってtを解く。ありがとう!どのように弧長で渡し、(t)の値を受け取るようにscipy quad関数を反転させますか?

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) 

最後の出力であった:(2.531432761012828、2.810454936566873e-14)

+0

'full_output'を試しましたか?分析的な統合では、積分上限を値から「取り戻す」ことができますか? – hpaulj

答えて

2

積分の値を所定の積分の上限を見つけるために、一つの関数にfsolveを適用することができます可変上限値の積分を計算します。例は、(あなたが既に持っている行を繰り返していない):

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) 

これは1.02051を印刷します。

私は積分変数と上限を同じ文字で表しているのは嫌ですので、私のコードでは上限はsです。

+0

粗い意味では、同じ積分を生成するものが見つかるまで、さまざまな上限値を最初の推定値の近くで試行します。それは、ハント・アンド・ペックよりも洗練されていますが、プリンシパルは同じです。一致するまで値を試してください。 – hpaulj

関連する問題