1个不稳定版本
0.1.0 | 2020年5月9日 |
---|
#1632 in 数学
34KB
993 行
Poly – 泛型密集多项式
该crate实现了泛型密集多项式算术。
用法
以下代码计算并打印两个单精度浮点多项式除法余数的结果
let a = Polynomial::new(coefficients![1f32, 2.0, 3.0, 0.0]);
let b = Polynomial::new(coefficients![1f32, 0.0, 1.0]);
let (q, r) = a.div_rem(&b);
println!(
"({0}) / ({1}) = ({1}) * ({2}) + {3}",
a.to_display("ω"),
b.to_display("ω"),
q.to_display("ω"),
r.to_display("ω")
);
得到的结果是
(ω³ + 2ω² + 3ω) / (ω² + 1) = (ω² + 1) * (ω + 2) + 2ω + -2
此外,poly
允许对混合类型的多项式进行评估,以及对多项式的第 n 阶导数进行评估
let x = Complex::new(0f32, 1.0);
let e = a.eval(x);
println!("{} = {} for x = {}", a.to_display("x"), e, x);
let d = a.eval_der(1f32, 2);
println!("({})'' = {} for z = {}", a.to_display("z"), d, 1f32);
得到的结果是
x³ + 2x² + 3x = -2+2i for x = 0+1i (z³ + 2z² + 3z)'' = 10 for z = 1
状态
这是一个早期原型,API可能会更改。此外,它没有针对性能进行调整,除了使用 SmallVec
进行系数存储。由于Rust泛型特质的实现限制,左标量乘法(标量 · 多项式)没有泛型实现,而是针对固定类型的列表实现。欢迎提供改进此crate的建议。除此之外,目前缺失的主要部分是找到一个实现根查找算法(可能是 Bairstow的方法,因为我的重点是具有实数值系数的多项式)。
依赖项
~545KB
~11K SLoC