python - 用于将具有大系数的多项式相乘的 Python 包
问题描述
我想在 python 中乘以大系数的多项式。我在 numpy 中试过这个。
import numpy as np
p = np.poly1d([1])
for i in range(250):
p = np.polymul(p, [1, 2])
print ("P : ", p)
但令人惊讶的是,numpy 给出了错误的结果!理想情况下,程序应该扩展多项式 (x+2)^250 并输出它。但它输出以下内容。
P : 250 249 248 247 246
1 x + 500 x + 1.245e+05 x + 2.058e+07 x + 2.542e+09 x
245 244 243 242
+ 2.501e+11 x + 2.043e+13 x + 1.424e+15 x + 8.652e+16 x
241 240 239 238
+ 4.653e+18 x + 2.901e+18 x + 9.18e+18 x + 9.015e+18 x
237 236 235 234
- 7.634e+18 x - 1.988e+17 x - 8.716e+18 x + 6.834e+18 x
233 232 231 230
- 3.933e+18 x + 2.712e+18 x + 6.03e+18 x - 4.58e+18 x
229 228 227 226
+ 7.714e+18 x - 5.435e+18 x + 3.734e+18 x + 4.537e+18 x
225 224 223 222
- 6.507e+18 x - 1.937e+18 x + 6.602e+17 x + 2.61e+18 x
221 220 219 218
- 3.935e+18 x + 8.436e+18 x + 6.076e+18 x - 5.604e+18 x
217 216 215 214
+ 2.542e+18 x + 3.146e+18 x + 3.515e+18 x - 3.458e+16 x
213 212 211 210
- 5.884e+18 x + 5.881e+18 x - 3.702e+18 x + 6.049e+17 x
209 208 207 206
- 9.101e+18 x - 5.37e+18 x - 8.623e+18 x + 5.234e+18 x
205 204 203 202
+ 4.466e+18 x + 8.528e+18 x - 5.645e+18 x + 6.822e+18 x
201 200 199 198
+ 2.037e+18 x - 2.809e+18 x + 5.819e+18 x + 2.675e+18 x
197 196 195 194
+ 7.458e+18 x + 5.224e+18 x + 2.018e+18 x - 9.007e+18 x
193 192
- 1.441e+18 x - 2.594e+18 x
该功能似乎存在一些精度问题。python中是否有适合将多项式与大系数相乘的库?
解决方案
Sympy 将是一个不错的选择。在 sympy 中执行此操作看起来像:
import sympy
x = sympy.var('x')
p = (x+2)**250
p = sympy.expand(p)
print(p)
我没有包括输出,因为它很长,但抽查它看起来是正确的。Sympy 使用任意精度库,因此所有系数都被扩展。您可以使用该coeff
方法获得各个系数。例如:
>> p.coeff(x**249)
250
推荐阅读
- javascript - 如何根据使用 TypeScript 的另一个属性将 React 组件的两个属性设置为可选?
- android - 设备指纹识别(Android 和 iOS)
- stenciljs - 创建多合一捆绑包?
- c# - 如何在 C# 中使用国家/地区的 id 获取当前日期时间?
- wordpress - 如何在wordpress页面中嵌入乳胶
- ios - UICollectionViewCells 在具有恒定高度约束的 ScrollView 中初始化
- java - Java:在控制台中构建和打印网格(无 GUI)
- javascript - Bootstrap 4 DateTimePicker 图标未显示
- git - VSTS Git Object Count 比预期大得多
- c++ - 为什么 boost::asio::udp::socket::async_send_to 因“不允许操作”而失败,我应该如何处理它