【问题标题】:Curve translation in Python does not reach expected valuePython 中的曲线平移未达到预期值
【发布时间】:2023-01-31 00:59:38
【问题描述】:

假设我有两条曲线 f(x) 和 g(x),我想评估 g(x) 是否是 f(x) 的平移。 我使用 Sympy Curve 来完成函数translate 的工作。但是,我需要帮助才能获得正确的结果。考虑两个函数:

f(x) = -x^2 和 g(x) = -(x+5)^2 + 8

请注意,g 垂直平移 8,水平平移 5。为什么 at 在以下 Python 代码中不等于 b

from sympy import expand, Symbol, Curve, oo

x = Symbol('x')
f = -x**2
g = -(x+5)**2+8

a = Curve((x, f), (x, -oo, oo))
at = a.translate(5,8)
b = Curve((x, g), (x, -oo, oo))

a, at, b, at == b
>>> (Curve((x, -x**2), (x, -10, 10)),
 Curve((x + 5, 8 - x**2), (x, -10, 10)),
 Curve((x, 8 - (x + 5)**2), (x, -10, 10)),
 False)

我怎样才能使用这种或任何其他方法进行分析?

【问题讨论】:

  • 我对sympy.Curve 不够熟悉,但这可能与 sympy 文档中的这个“陷阱”有关:sympy gotchas: double equal signs
  • 另外,我觉得应该是at = a.translate(-5,8),而不是at = a.translate(5,8)
  • 请注意,测试两个表达式是否相等并不完全明显。你应该让y = x+5,将8-x**2重写为y而不是x的函数,然后使用sympy.simplify测试结果表达式是否等同于8 - (y + 5)**2

标签: python math sympy


【解决方案1】:

Curve 可能不是正确的方法。如果你有单变量函数,你想知道 x 和 y 的翻译会使它们相等,你可以使用类似下面的东西:

>>> dx,dy = Symbols('dx dy')
>>> eq = Eq(f.subs(x,x-dx)+dy
>>> solve_undetermined_coeffs(eq,g),(dx,dy),x)
[(-5, 8)]

如果 dxdy 中没有可以解决相等性的值,那么将返回一个空列表。

【讨论】:

    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2018-03-19
    • 2021-08-04
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    相关资源
    最近更新 更多