python - 通过仅替换一个变量来获取两个变量中多项式的值
问题描述
我在 Windows 7 上使用 python 3.6.3。我有以下代码:
from sympy import *
x, a = symbols('x a')
q = 23*a + x**4 + 6*x**3 + x**2*(a + 14) + x*(8*a + 14) + 1
我想得到 x = 3 的 q 值,我做到了:
q.evalf(subs={x:3})
我希望得到:56*a + 412
,但我得到的只是:
23.0*a + x**4 + 6.0*x**3 + x**2*(a + 14.0) + x*(8.0*a + 14.0) + 1
我在文档中没有找到任何关于通过仅替换一个变量来获取表达式的值的内容。
如何获得q
for的价值x = 3
?
解决方案
您无法使用evalf
不完整的变量字典获取值。正如评论中提到的@ForceBru,您可以使用 Substitution function subs()
。
有一些可以探索的资源evalf
:github或sympy.core.evalf。
As one can see (when verbose
option is True
) the evalf
performs calculation as a sequence of "atomic operations":
q.evalf(subs={x:3}, verbose=True)
### input x
### output 3.0
### raw ((0, 3, 0, 2), None, 74, None)
### input x**4
### output 81.0
### raw ((0, 81, 0, 7), None, 67, None)
当最后一次evalf
接近a
(它尝试两次)时,引发,并使用下一行KeyError
评估表达式:
if 'subs' in options:
x = x.subs(evalf_subs(prec, options['subs']))
xe = x._eval_evalf(prec)
re, im = xe.as_real_imag()
最终结果x
为a
,但评估结果x._eval_evalf(prec)
为None
。既然xe
是None
,最后提到的线提高了NotImplementedError
。
class EvalfMixin
在返回输入的下一行中处理此异常:
except NotImplementedError:
# Probably contains symbols or unknown functions
return v
PS。严格来说,我注意到我回答了@ForceBru 的评论为时已晚。让它保持原样。
推荐阅读
- laravel - 未捕获的错误:尝试访问 octobercms 中的配置数据时未找到类“事件”
- java - 弱引用和线程
- python - 以 0 作为输入的范围函数循环如何工作?
- elasticsearch - \Kibana\config 此时出乎意料
- python - 无法通过 pip3 macOS 安装 Spyder 或 Jupyter
- google-drive-api - 有没有办法在 Google Colab 中清理 Google Drive 垃圾桶?
- c++ - 获取 mtu C++ 便携方式
- java - 网站是否必须保存图像才能从中获取文本?
- python - AWS Sagemaker AttributeError:无法设置属性错误
- python - 使用 python 是否可以修改并可能在 csv 中添加新行?