2017-07-07 61 views
0

如果我要運行類似下面的代碼,其中我將橢圓的小圓弧和主圓弧作爲由弧線形成的50度角的3.05和2.23,我如何能夠將2.531432761012828的輸出作爲弧長並將其傳回以解決t?謝謝!如何反轉scipy quad函數以傳遞弧長並接收(t)的值?

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

相關問題