1个不稳定版本

0.1.0 2020年5月9日

#1632 in 数学

MIT许可证

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