Sympy 求解无法找到简单方程的零空间

2024-06-28

我正在尝试使用 pythons 模块找到各种函数集的零空间sympy。它设法找到了一些集合的解决方案,例如
{(x - 1)!, x * (x - 2)!, (x - 2)!}
我的代码是

from sympy import solve, factorial
from sympy.abc import a, b, c, x
eq = a * factorial(x - 1) + b * x * factorial(x - 2) + c * factorial(x - 2)
print(solve(eq, a, b, c, set=True))  #  output: ([a, b, c], {((-b*x + b - c)/x, b, c)})
eq = -b * x + b - c - a * x
print(solve(eq, a, b, c, set=True)) #  output: ([a, b], {(-c, c)})

然而,它在设定上遇到了困难
{upper_gamma(x, -1), upper_gamma(x - 1, -1), x * upper_gamma(x - 1, -1), (-1) ^ x}
这很公平,即使是 Wolfram-alpha 也找不到解决方案。然而,令我惊讶的是它在简化问题上也失败了
{(x - 1) * y - z, y, x * y, z}
我的代码又是一样的

eq = a * (x-1) * y - a * z + b * y + c * x * y + d * z
print(solve(eq, a, b, c, d, set=True))  # output: ([a, b, c, d], {((b*y + c*x*y + d*z)/(-x*y + y + z), b, c, d)})

我期待解决方案([a, b, c], {d, d, -d}).
我正在使用吗solve错误或者方程对于这个求解器来说太难了?


你依赖于一个隐含的行为solve给定一个不在所有未知数中呈线性的列表中的单个方程,它将假设您正在寻找一个未确定的系数解,该解在语义上与普通解完全不同。

它们之间的区别可以看出:

In [5]: solve(a*x + b*y, a, b, set=True)
Out[5]: ([a, b], {(0, 0)})

In [6]: solve([a*x + b*y], a, b, set=True)
Out[6]: 
⎛        ⎧⎛-b⋅y    ⎞⎫⎞
⎜[a, b], ⎨⎜─────, b⎟⎬⎟
⎝        ⎩⎝  x     ⎠⎭⎠

这里第一种情况是返回值a and b可以使表达式对于所有可能的值都相同为零x and y。第二种情况正在治疗x and y作为固定但未指定的参数并返回可能值的集合a and b作为符号参数的函数x and y这可能会使表达式为零。

从概念上讲,这是两个截然不同的事物,如果解决方案不将它们混合在单个最终用户函数中会更好。您看到的差异是因为您的方程被视为第二种情况而不是第一种情况。话虽如此,我无法使用最新版本的 SymPy (1.11.1) 重现您报告的输出:

In [1]: a, b, c, d = symbols('a, b, c, d')

In [2]: eq = a * (x-1) * y - a * z + b * y + c * x * y + d * z
   ...: print(solve(eq, a, b, c, d, set=True))  # output: ([a, b, c, d], {((b*y + c*x*y + d*z)/(-x*y + y 
   ...: + z), b, c, d)})
([a, b, c, d], {(d, d, -d, d)})

如果我通过了eq在列表中然后我确实看到了它:

In [7]: solve([eq], a, b, c, d, set=True)
Out[7]: 
⎛              ⎧⎛      b⋅y          c⋅x⋅y          d⋅z             ⎞⎫⎞
⎜[a, b, c, d], ⎨⎜- ─────────── - ─────────── - ───────────, b, c, d⎟⎬⎟
⎝              ⎩⎝  x⋅y - y - z   x⋅y - y - z   x⋅y - y - z         ⎠⎭⎠

无论如何,最好不要依赖于使用solve这边走。我建议使用solve仅用于其主要目的,即上面的情况 2,并且为此应始终使用列表来调用它(即使对于单个方程)。

相反,有一个函数solve_undetermined_coeffs这是执行您想要执行的操作的显式函数:

In [9]: solve_undetermined_coeffs(eq, [a, b, c, d], [x, y, z])
Out[9]: {a: d, b: d, c: -d}

https://docs.sympy.org/latest/modules/solvers/solvers.html#sympy.solvers.solvers.solve_undependent_coeffs https://docs.sympy.org/latest/modules/solvers/solvers.html#sympy.solvers.solvers.solve_undetermined_coeffs

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sympy 求解无法找到简单方程的零空间 的相关文章

  • Python 解码 JSON 中的嵌套 JSON

    我正在处理一个 API 不幸的是它返回了格式错误 或 奇怪的格式 而是 感谢 fjarri JSON 但从积极的一面来看 我认为这可能是我学习一些有关递归以及JSON 这是我用来记录锻炼的应用程序 我正在尝试制作备份脚本 我可以很好地收到
  • 设置面积图 openpyxl 的透明度(alpha)

    我想使用 openpyxl 设置面积图背景的透明度 我的图表代码是 from openpyxl drawing fill import PatternFillProperties ColorChoice c2 AreaChart c2 gr
  • Keras 中的 load_model 和 Lambda 层

    如何加载具有 lambda 层的模型 这是重现行为的代码 MEAN LANDMARKS np load data mean shape 68 npy def add mean landmarks x mean landmarks np ar
  • 如何显示 pymongo.errors.OperationFailure 详细信息?

    写入 MongoDB 时 我在 python 中遇到 pymongo OperationsFailure 除了回溯之外 还有没有办法打印出详细信息或代码属性 另请参阅 http api mongodb org python current
  • 来自 yahoo 的 python lxml etree 小程序信息

    雅虎财经更新了他们的网站 我有一个 lxml etree 脚本 用于提取分析师建议 然而现在 分析师的建议已经存在 但只是以图表的形式出现 你可以看到一个例子这一页 https finance yahoo com quote CSX ana
  • 在 Windows 中安装 IPOPT 求解器以与 pyomo 一起使用

    如何安装 IPOPT 求解器以在 Windows 中与 pyomo 一起使用 我尝试了 pip install ipopt 但收到此错误 错误 为 ipopt 构建轮子失败 我正在使用 Windows 10 和 Python 3 7 4 在
  • Python + Selenium:驱动程序路径

    是否有可能在不输入路径的情况下运行 Python Selenium 脚本exePython 行中每个脚本中的文件 driver webdriver Chrome 同样的问题也适用于 IE 驱动程序 Edge 驱动程序 和 Gecko 驱动程
  • 视频的 EXIF 之类的东西

    有没有从视频文件中获取信息的标准方法 对于图像 我们有 EXIF 数据 可用于获取有关图像文件的日期 时间 大小等信息 我想知道视频是否也有这样的东西 用例是 我有很多用数码相机拍摄的视频 我想将它们重命名为更有意义的名称 例如 YYYY
  • tkinter - 在askopenfile期间检索文件名

    我有一个用 Python 和 tkinter 制作的文本编辑器 这是我的 打开文件 方法 def onOpen self file askopenfile filetypes Text files txt txt file read sel
  • 从 paramiko 获取 PID

    我找不到一个简单的答案 我正在使用 paramiko 远程登录并执行多个进程 我需要每个进程的 PID 以便稍后检查它们 paramiko 中似乎没有函数来获取执行命令的 PID 所以我尝试使用以下命令 stdin stdout stder
  • python 使用曲面图和第四个变量的滑块可视化 4d 数据

    如何使用前 3 个变量和第四个变量的 3 维曲面图作为滑块来可视化 4 维数据 从 csv 文件加载 集 我写了一个非常小的示例 重点介绍了实现此目标的方法 import numpy as np import matplotlib pypl
  • 在 SQLAlchemy 中删除父级后删除子级

    我的问题如下 我有两个型号Entry and Tag通过 SQLAlchemy 中的多对多关系链接 现在我想删除所有Tag没有任何对应的Entry后Entry被删除 示例来说明我想要的内容 Entry 1带标签python java Ent
  • Python条件运算符“if else”不等于“and or”[重复]

    这个问题在这里已经有答案了 我认为下面两个函数的结果会相同 但事实并非如此 def fib2 n return n and n lt 2 or fib2 n 1 fib2 n 2 def fib3 m return m if m lt 2
  • 如何在Python中生成0-1矩阵的所有可能组合?

    如何生成大小为 K N 的 0 1 矩阵的所有可能组合 例如 如果我取 K 2 和 N 2 我会得到以下组合 combination 1 0 0 0 0 combination 2 1 0 0 0 combination 3 0 1 0 0
  • 由 asyncio.new_event_loop 创建的事件循环挂起

    以下代码只是挂起而不打印任何内容 import asyncio async def foo loop print foo loop stop loop asyncio new event loop asyncio ensure future
  • Python 生成器每次调用都会产生相同的值

    我希望这个生成器生成列表中每个连续值的余弦 但每次都得到相同的值 import math angles range 0 361 3 calculate x coords def calc x angle list for a in angl
  • 如何在 Ansible 中更新嵌套变量

    我有一些额外的信息 例如数据库连接详细信息等 存储在 etc ansible facts d environment fact 中 这些可以作为变量使用 例如ansible local environment database name 更
  • 如何在 python setup.py 中 chmod 文件?

    我使用 setup py 创建了一个 python 包安装 我希望它复制文件夹 为临时创建的 did 中的数据文件 问题是我必须使用 sudo 权限调用 setup py 因为它写入 usr local 因此 当我的数据文件复制到 did
  • 在 AWS ec2 实例上使用“sudo pip”时出现错误

    我正在尝试在 aws ec2 实例上运行一个小型 python 代码 需要 pytz 和其他一些包 当我尝试安装 pytz 时 出现一些错误 ec2 user ip 172 31 28 178 pip install pytz Collec
  • 如何在(最好是纯)Python 中解码 QR 码图像?

    TL DR 我需要一种使用 最好是纯 Python 从图像文件中解码 QR 码的方法 我有一个带有 QR 码的 jpg 文件 我想使用 Python 对其进行解码 我发现有几个库声称可以做到这一点 PyQRCode 网站在这里 http p

随机推荐