沒用piecewised解決方案從如何避免sympy
from sympy import *
t,r = symbols('t r', real=True, nonnegative=True)
c_x,c_y,a1,a2 = symbols('c_x c_y a1 a2', real=True)
integrate(-r*(a1 - a2)*(c_x*cos(-a1*t + a1 + a2*t) + c_y*sin(-a1*t + a1 + a2*t) + r)/2,(t,0,1))
我獲得分段解決方案
Piecewise((-a1*c_x*r*cos(a2)/2 - a1*c_y*r*sin(a2)/2 - a1*r**2/2 + a2*c_x*r*cos(a2)/2 + a2*c_y*r*sin(a2)/2 + a2*r**2/2, Eq(a1, a2)), (-a1*r**2/2 + a2*r**2/2 - c_x*r*sin(a1)/2 + c_x*r*sin(a2)/2 + c_y*r*cos(a1)/2 - c_y*r*cos(a2)/2, True))
它不需要被piecewised因爲如果a1
= a2
兩個表達式是0,因此第二個表達式實際上是一個全局非分段解決方案。
所以我的第一個問題是:我可以讓sympy給我非分段解決方案嗎? (通過設置一些選項或其他任何東西)
不管上面提到的可能性,因爲我可以接受a1
不等於a2
(它是沒有興趣的極限情況下),有沒有辦法告訴sympy的這樣的假設? (再次爲了obatin非分段解決方案)
從sympy新手提前感謝。
P.S.對於同樣的問題,Maxima直接給出了非分段解決方案。
有一個關鍵字'conds',其默認值是「分段」。它也可以設置爲「分離」或「無」。後者可能是正確的方向。然而,由於它是一個確定的積分,所以你可以嘗試使用關鍵字'manual = True'。 – Uvar
@Uvar謝謝,在這種情況下,所有3個選項都起作用,儘管我不明白他們做了什麼,並且該文檔並沒有太大的幫助。例如'conds ='separate''選項應該將解決方案作爲一個元組而不是分段,但給出了一個獨特的(但是正確的)解決方案。 – mmj
移動到答案,因爲它似乎已經成功了。儘管如此,我和你一樣困惑於'conds ='separate'' – Uvar