mpolynomials: Simple multivariate polynomials.

[ algebra, gpl, library, math ] [ Propose Tags ] [ Report a vulnerability ]

Manipulation of multivariate polynomials on a ring.


[Skip to Readme]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.1.0
Change log CHANGELOG.md
Dependencies base (>=4.7 && <5), containers (>=0.6.4.1), extra (>=1.7.10), numeric-prelude (>=0.4.4), text (>=1.2.5.0) [details]
License GPL-3.0-only
Copyright 2022 Stéphane Laurent
Author Stéphane Laurent
Maintainer laurent_step@outlook.fr
Category Math, Algebra
Home page https://github.com/stla/mpolynomials#readme
Source repo head: git clone https://github.com/stla/mpolynomials
Uploaded by stla at 2022-12-05T16:40:58Z
Distributions NixOS:0.1.1.0
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 192 total (15 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2022-12-05 [all 1 reports]

Readme for mpolynomials-0.1.0.1

[back to package description]

mpolynomials

Simple multivariate polynomials in Haskell


import Math.Algebra.MultiPol
x = lone 1 :: Polynomial Double
y = lone 2 :: Polynomial Double
z = lone 3 :: Polynomial Double
poly = (2 *^ (x^**^3 ^*^ y ^*^ z) ^+^ x^**^2) ^*^ (4 *^ (x ^*^ y ^*^ z))
poly
-- M (Monomial {coefficient = 4.0, powers = fromList [3,1,1]}) 
-- :+: 
-- M (Monomial {coefficient = 8.0, powers = fromList [4,2,2]})
prettyPol show "x" poly
-- "(4.0) * x^(3, 1, 1) + (8.0) * x^(4, 2, 2)"

More generally, one can use the type Polynomial a as long as the type a has the instances Eq and Algebra.Ring (defined in the numeric-prelude library). For example a = Rational:

import Math.Algebra.MultiPol
import Data.Ratio
x = lone 1 :: Polynomial Rational
y = lone 2 :: Polynomial Rational
z = lone 3 :: Polynomial Rational
((2%3) *^ (x^**^3 ^*^ y ^*^ z) ^+^ x^**^2) ^*^ ((7%4) *^ (x ^*^ y ^*^ z))
-- M (Monomial {coefficient = 7 % 4, powers = fromList [3,1,1]}) 
-- :+: 
-- M (Monomial {coefficient = 7 % 6, powers = fromList [4,2,2]})

Or a = Polynomial Double:

import Math.Algebra.MultiPol
p = lone 1 :: Polynomial Double
x = lone 1 :: Polynomial (Polynomial Double)
y = lone 2 :: Polynomial (Polynomial Double)
poly = (p *^ x) ^+^ (p *^ y)  
poly ^**^ 2 
-- (M (Monomial {
--   coefficient = M (Monomial {coefficient = 1.0, powers = fromList [0,2]}), 
--   powers = fromList [0,2]}) 
-- :+: 
--  M (Monomial {
--    coefficient = M (Monomial {coefficient = 2.0, powers = fromList [1,1]}), 
--    powers = fromList [1,1]})) 
-- :+: 
--  M (Monomial {
--    coefficient = M (Monomial {coefficient = 1.0, powers = fromList [2,0]}), 
--    powers = fromList [2,0]})
prettyPol (prettyPol show "a") "X" (poly ^**^ 2)
-- "((1.0) * a^(2)) * X^(0, 2) + ((2.0) * a^(2)) * X^(1, 1) + ((1.0) * a^(2)) * X^(2, 0)"

Evaluation:

import Math.Algebra.MultiPol
x = lone 1 :: Polynomial Double
y = lone 2 :: Polynomial Double
z = lone 3 :: Polynomial Double
poly = 2 *^ (x ^*^ y ^*^ z) 
-- evaluate poly at x=2, y=1, z=2
evalPoly poly [2, 1, 2]
-- 8.0