スキップしてメイン コンテンツに移動

投稿

3月, 2019の投稿を表示しています

多項式 in Rust

環 R 上の多項式 R[x] とは, 有限個の R の元の組の全体 R[x] に以下の代数構造を入れたもの. 多項式 p(x) in R[x] と元 r in R の和 p(x) + r 多項式 p(x), q(x) in R[x] の和 p(x) q(x) 多項式 p(x) in R[x] と元 r in R の積 r p(x) 多項式 p(x), q(x) in R[x] の和 p(x) + q(x) 多項式 p(x) in R[x] に元 r in R を代入する: p(r) 多項式 p(x) in R[x] に多項式 q in R[x] を代入する: f(q(x)) R[x] はこの和と積に関して環をなす. より詳細な多項式環の性質については wikipedia 参照. これを Rust で実装する. ジェネリクスとトレイト境界のよい練習になった. 特に多項式への代入として環 R の元と多項式 R[x] のどちらをも許す部分で手間取った. 若干 clone を使い過ぎた気もするけど, 他にどうしようもなさそう. /// 多項式を表す構造体. #[derive(Clone, Debug, PartialEq, Eq)] pub struct Polynomial<T> {     coef: Vec<T>, } extern crate num_traits; use num_traits::Zero; use std::ops::{Add, Sub, Neg, Mul}; impl<T> Polynomial<T> where T: Clone + Zero + PartialEq {     /// 係数の配列から新しく多項式を生成する. 係数はタプルでもベクトルでもよい.     /// 係数 [ a_0, a_1, ... ] の $n$ 番目の要素が $n$ 次項の係数となる.     ///     /// 引数の配列が要素を持たない可能性を考慮し, `Polynomial::new` 関数の戻り値     /// は `Option<Polynomial>` である. 使用する前に `.unwrap()` する.     ///     ///