提问人:Josh 提问时间:8/10/2023 最后编辑:Josh 更新时间:8/11/2023 访问量:65
有没有一种好方法可以降低朱莉娅多项式的系数
Is there a good way to drop coefficients of a Julia polynomial
问:
我正在用有理数的朱莉娅多项式进行计算。在运算后,我可能有一个高阶多项式,我想通过抛出高阶项来截断为较小阶的多项式。我在下面想出了一个解决方案。但是代码将运行数小时,我需要使事情尽可能优化。我基本上重新创建了一个新的 Poly。有没有更好的方法?
using Polynomials
R = Polynomial{Rational{BigInt}, :x}([1,2,2,2])
L = coeffs(R)
R = Polynomial{Rational{BigInt}, :x}(L[1:2])
答:
0赞
Dan Getz
8/11/2023
#1
假设您使用的是 Polynomials.jl 包,我们有:
julia> using Polynomials
julia> R = Polynomial(Rational{BigInt}[1,2,3,4,5], :x)
Polynomial(1//1 + 2//1*x + 3//1*x^2 + 4//1*x^3 + 5//1*x^4)
julia> degree(R)
4
julia> resize!(coeffs(R), 3);
julia> R
Polynomial(1//1 + 2//1*x + 3//1*x^2)
julia> degree(R)
2
这可能略微使用内部结构,并且专门在包装中降低程度的功能可能会更好。我没有搜索足够的内容来查看是否有,但是如果有的话,那就是做这个简单的技巧是合理的。resize!
评论
0赞
Josh
8/11/2023
有趣的是,我会认为调整大小!将修改数组 coeffs(R),而不是实际修改 R。我想我不完全了解朱莉娅是如何工作的。
1赞
Josh
8/11/2023
我假设 coeffs(R) 是用于表示多项式的实际内部数组。我在哪里可以找到这种东西。另外,有谁知道快速傅里叶变换是否用于实现多项式乘法?
1赞
DNF
8/11/2023
我看不出这是以什么方式使用内部结构的。这似乎应该有效。
0赞
Dan Getz
8/11/2023
因为返回内部系数数组是最高性能的选项,而在 Julia 中,性能至关重要。这也允许您在自己的算法中实现高性能,这将使它感觉像是 Polynomials 包的原生,这是另一个 Julia 成语:使扩展与原生一样好。coeffs(R)
评论
resize!(coeffs(R), N)
R