gpt4 book ai didi

python - Python SymPy 模式匹配中的对应系数

转载 作者:太空宇宙 更新时间:2023-11-04 01:10:18 25 4
gpt4 key购买 nike

我有一个名为 f = 0.5/(z-3) 的函数。我想知道如果 f 写成以下形式,系数 p 和 q 是什么:q/(1-p*z) 但不幸的是 sympy 匹配函数返回 None。难道我做错了什么?或者做这样的事情的正确方法是什么?这是代码:

z = symbols('z')
p, q = Wild('p'), Wild('q')
print (0.5/(z-3)).match(q/(1-p*z))

编辑:我预期的答案是:q=-1/6 和 p = 1/3

当然是一种方式

p, q = symbols('p q')
f = 0.5/(z-3)
print solve(f - q/(1-p*z), p, q,rational=True)

但我不知道如何在模式匹配中做到这一点,或者它是否能够做这样的事情。

提前致谢 =)

最佳答案

如果您首先转换为线性形式,

1 / (2*z - 6) == q / (1 - p*z)
# multiply both sides
# by (2*z - 6) * (1 - p*z)
1 - p*z == q * (2*z - 6)

然后

from sympy import Eq, solve, symbols, Wild 

z = symbols("z")
p,q = symbols("p q", cls=Wild)

solve(Eq(1 - p*z, q*(2*z - 6)), (p,q))

给予

{p_: 1/3, q_: -1/6}

正如预期的那样。

编辑:我发现了一种稍微不同的方法:

  1. solve(Eq(f, g)) 等同于 solve(f - g)(隐式 ==0)

    <
  2. 我们可以像 simplify(f - g) 一样减少 f - g,但默认情况下它不会做任何事情,因为生成的方程式超过比原来长 1.7 倍(ratio 参数的默认值)。如果我们指定一个更高的比率,比如 simplify(f - g, ratio=5),我们得到

    >>> simplify(1/(2*z-6) - q/(1-p*z), ratio=5)
    (z*p_ + 2*q_*(z - 3) - 1)/(2*(z - 3)*(z*p_ - 1))
  3. 现在这是求解器将要处理的形式:

    >>> solve(_, (p,q))
    {p_: 1/3, q_: -1/6}

关于python - Python SymPy 模式匹配中的对应系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28130376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com