我想在 2 個方程上找到最近的 2 個點
我將使用:
蟒蛇和同情
我的問題的例子:
假設我有 2 個方程:
y=x^2y=-(x-3)^2
我想找到這兩個方程之間的 2 個最近點(每個方程一個點)。我將如何在同情中做到這一點?
注意:我希望能夠為任何 n 次多項式解決這個問題,例如y=x^4 x^2 x等y=x^3 3x^2。
如果我得到多個解決方案,那沒關系。
我四處搜索并查看了https://math.stackexchange.com/questions/731207/closest-distance-between-two-quadratic-curves#:~:text=First simply take the derivatives,line between the two curves。和其他一些,但我不明白如何以這種方式實作這些解決方案,以便它適用于任何一對 n 次多項式。
我的理解是我必須做一些與垂直于函式切線的線相關的計算,但我不知道如何在 sympy 中做/實作它。
如果這在 sympy 中是不可能的,請指點我一些其他的解決方案,讓我找到兩個函式之間的最近點。
TLDR:給定 sympy 中的 2 個方程,在 2 個方程上找到 2 個點最接近的 2 個點。
謝謝
uj5u.com熱心網友回復:
您可以像這樣設定要求解的方程:
In [94]: x1 = symbols('x1')
In [95]: x2 = symbols('x2')
In [96]: y1 = x1**2
In [97]: y2 = -(x2 - 3)**2
In [98]: distance_squared = (y1 - y2)**2 (x1 - x2)**2
In [99]: distance_squared
Out[99]:
2
2 ? 2 2?
(x? - x?) ?x? (x? - 3) ?
In [100]: eq1, eq2 = [distance_squared.diff(x) for x in [x1, x2]]
In [101]: eq1
Out[101]:
? 2 2?
4?x???x? (x? - 3) ? 2?x? - 2?x?
In [102]: eq2
Out[102]:
? 2 2?
-2?x? 2?x? ?x? (x? - 3) ??(4?x? - 12)
x1現在您在和中有一對多項式方程x2。你只需要找到這些方程的解。請注意,由于 Abel-Ruffini 定理,根據多項式的次數,您可以在此處執行的操作存在限制。可以給出數值解的一般方法是使用 Groebner 基:
In [106]: g = groebner([eq1, eq2], [x1, x2])
In [107]: g
Out[107]:
?? 4 3 2 5 4 3
GroebnerBasis??181?x? - 24?x? 212?x? - 624?x? 737?x? - 432, 8?x? - 96?x? 472?x? - 1206?
2 ? ?
x? 1656?x? - 999?, x?, x?, domain=?, order=lex?
In [108]: r = real_roots(g[-1])
In [109]: r
Out[109]:
? ? 3 2 ??
?CRootOf?4?x - 36?x 110?x - 111, 0??
In [112]: solve([g[0], x2 - r[0].n()], [x1, x2]) # numerical result
Out[112]: [(0.728082123067953, 2.27191787693205)]
In [111]: solve([g[0], x2 - r[0]], [x1, x2]) # exact result in terms of rootof
Out[111]:
?? 3
?? ? 3 2 ? ? 3 2 ?
??- 212?CRootOf?4?x - 36?x 110?x - 111, 0? - 737?CRootOf?4?x - 36?x 110?x - 111, 0? 432
??─────────────────────────────────────────────────────────────────────────────────────────────────
?? 181
4 2
? 3 2 ? ? 3 2 ?
24?CRootOf?4?x - 36?x 110?x - 111, 0? 624?CRootOf?4?x - 36?x 110?x - 111, 0?
──────────────────────────────────────────────────────────────────────────────────────────, CRootOf
??
??
? 3 2 ???
?4?x - 36?x 110?x - 111, 0???
??
在像這樣的簡單情況下,可以使用solve象征性地求解方程,但答案可能非常復雜:
In [114]: solve([eq1, eq2], [x1, x2])
Out[114]:
?? __
?? ╱ 8
?? 3 _____________ 5/6 3 ___________ 3 ╱ ─
??- 15066259?╲╱ 81 3?√753 - 549045?√251?3 ?╲╱ 27 √753 410109939 14945237?√753 ╲╱ 8
??───────────────────────────────────────────────────────────────────────────────────────, - ──────
?? 2/3 ? 6 ___ 2/3?
?? (27 √753) ??1647135?√251?╲╱ 3 15066259?3 ?
??
??
___________ ? ?
1 3?√753 ? ?
─ ────── ? ? 3 _____________ 5/6 3 ___________
8 1 ? ?1647135?√251?╲╱ 81 3?√753 15066259?3 ?╲╱ 27 √753
─────────── ─────────────────── 3?, ?──────────────────────────────────────────────────────────
3 _____________ ? ? 2/3 ?
╱ 81 3?√753 ? ? (27 √753) ??1647135?√25
2?3 ╱ ── ────── ? ?
╲╱ 8 8 ? ?
5/6 3 ___________ 3 _____________
549045?√251?3 ???╲╱ 27 √753 15066259???╲╱ 81 3?√753 820219878?? 29890474?√753??
────────────────────────────────────────────────────────────────────────────────────────────────, 3
2/3 6 ___ 2/3 6 ___ ?
1?3 45198777?╲╱ 3 - 15066259?3 ?? - 1647135?√251?╲╱ 3 ???
_____________ ? ?
? 1 √3??? ╱ 81 3?√753 ? ?
?- ─ ────??3 ╱ ── ────── ? ? 3 ____________
? 2 2 ? ╲╱ 8 8 1 ? ?1647135?√251?╲╱ 81 3?√753
- ────────────────────────────── ────────────────────────────────?, ?───────────────────────────
3 _____________? ?
? 1 √3??? ╱ 81 3?√753 ? ?
2??- ─ ────??3 ╱ ── ────── ? ?
? 2 2 ? ╲╱ 8 8 ? ?
_ 5/6 3 ___________ 3 _____________
15066259?3 ?╲╱ 27 √753 - 29890474?√753?? - 820219878?? - 15066259???╲╱ 81 3?√753 - 5490
───────────────────────────────────────────────────────────────────────────────────────────────────
2/3 ? 2/3 6 ___ 6 ___ 2/3 ?
(27 √753) ??1647135?√251?3 45198777?╲╱ 3 1647135?√251?╲╱ 3 ?? 15066259?3 ???
_____________
? 1 √3??? ╱ 81 3?√753
5/6 3 ___________ ?- ─ - ────??3 ╱ ── ──────
45?√251?3 ???╲╱ 27 √753 1 ? 2 2 ? ╲╱ 8 8
────────────────────────────, 3 ──────────────────────────────── - ──────────────────────────────
_____________ 3
? 1 √3??? ╱ 81 3?√753
2??- ─ - ────??3 ╱ ── ──────
? 2 2 ? ╲╱ 8 8
? ?
? ?
? ?
? ?3 3?? 3 3??? ?3 3?? 3 3????
?, ?─ - ───, ─ - ───?, ?─ ───, ─ ───??
? ?2 2 2 2 ? ?2 2 2 2 ??
? ?
? ?
? ?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/486295.html
上一篇:我如何在python(sympy)中我有0值的所有點上畫一條線?
下一篇:如何撰寫具有行內冪計算的列舉?
