login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Edit detail for Polynomial Coefficients revision 2 of 4

1 2 3 4
Editor: test1
Time: 2015/10/20 13:59:27 GMT+0
Note:

changed:
-map(coefficients, Dg::List MPOLY([p0,p1,p2,p3],?))
map(coefficients, Dg::List MPOLY([p0,p1,p2,p3], INT))

changed:
-map(coefficients, Dg::List MPOLY([p3,p2,p1,p0],?))
map(coefficients, Dg::List MPOLY([p3,p2,p1,p0], INT))

changed:
-(Dg::List MPOLY([p0,p1,p2,p3],?)=Dg::List MPOLY([p3,p2,p1,p0],?))::Boolean
(Dg::List MPOLY([p0,p1,p2,p3], INT)=Dg::List MPOLY([p3,p2,p1,p0], INT))::Boolean

changed:
-
-
-
-From unknown Mon Dec 19 19:25:59 -0600 2005
-From: unknown
-Date: Mon, 19 Dec 2005 19:25:59 -0600
-Subject: 
-Message-ID: <20051219192559-0600@wiki.axiom-developer.org>
-
-atan  
Actually, unstated assumption in FriCAS is that multivariate
polynomials are sparse, so omiting  zeros is desirable.
For univariate polynomials one can use 'vectorise'.
Choosing 'p0' as main variable and converting to
univariate polynomial in one variable we get:
\begin{axiom}
[vectorise(univariate(p, p0), 2) for p in Dg]
\end{axiom} 


Let's examine a simple case:

fricas
Dg :=  [p3 - 3*p2 + 3*p1 - p0,3*p2 - 6*p1 + 3*p0,3*p1 - 3*p0,p0]

\label{eq1}\left[{p 3 -{3 \  p 2}+{3 \  p 1}- p 0}, \:{{3 \  p 2}-{6 \  p 1}+{3 \  p 0}}, \:{{3 \  p 1}-{3 \  p 0}}, \: p 0 \right](1)
Type: List(Polynomial(Integer))

Now calculate coefficients in two ways:

fricas
map(coefficients, Dg::List MPOLY([p0,p1,p2,p3], INT))

\label{eq2}\left[{\left[ - 1, \: 3, \: - 3, \: 1 \right]}, \:{\left[ 3, \: - 6, \: 3 \right]}, \:{\left[ - 3, \: 3 \right]}, \:{\left[ 1 \right]}\right](2)
Type: List(List(Integer))

and

fricas
map(coefficients, Dg::List MPOLY([p3,p2,p1,p0], INT))

\label{eq3}\left[{\left[ 1, \: - 3, \: 3, \: - 1 \right]}, \:{\left[ 3, \: - 6, \: 3 \right]}, \:{\left[ 3, \: - 3 \right]}, \:{\left[ 1 \right]}\right](3)
Type: List(List(Integer))

As you see the list are all reversed, but... they were not padded with zeros. While in my opinion they should be - we have a given order of variables, and alone 1 in the last list suggests that this is a coefficient of p3 while it isn't. It is a coefficient of p0.

According to the Axiom book function coefficients does not include zeros in the list. Furthermore it does not say explicitly in what order the coefficients themselves are listed. Remember that there are also terms of degree higher than 1. In fact the two multivariate polynomials that you used above are formally identical

fricas
(Dg::List MPOLY([p0,p1,p2,p3], INT)=Dg::List MPOLY([p3,p2,p1,p0], INT))::Boolean

\label{eq4} \mbox{\rm true} (4)
Type: Boolean

To produce a list of coefficients of the terms of degree 1, including the zeros and in a specific order, use the function coefficient like this:

fricas
[[coefficient(p,x,1) for x in [p0,p1,p2,p3]] for p in Dg]

\label{eq5}\left[{\left[ - 1, \: 3, \: - 3, \: 1 \right]}, \:{\left[ 3, \: - 6, \: 3, \: 0 \right]}, \:{\left[ - 3, \: 3, \: 0, \: 0 \right]}, \:{\left[ 1, \: 0, \: 0, \: 0 \right]}\right](5)
Type: List(List(Polynomial(Integer)))

And of course you can use this to produce a matrix.

fricas
matrix %

\label{eq6}\left[ 
\begin{array}{cccc}
- 1 & 3 & - 3 & 1 
\
3 & - 6 & 3 & 0 
\
- 3 & 3 & 0 & 0 
\
1 & 0 & 0 & 0 
(6)
Type: Matrix(Polynomial(Integer))

Actually, unstated assumption in FriCAS? is that multivariate polynomials are sparse, so omiting zeros is desirable. For univariate polynomials one can use vectorise. Choosing p0 as main variable and converting to univariate polynomial in one variable we get:

fricas
[vectorise(univariate(p, p0), 2) for p in Dg]

\label{eq7}\left[{\left[{p 3 -{3 \  p 2}+{3 \  p 1}}, \: - 1 \right]}, \:{\left[{{3 \  p 2}-{6 \  p 1}}, \: 3 \right]}, \:{\left[{3 \  p 1}, \: - 3 \right]}, \:{\left[ 0, \: 1 \right]}\right](7)
Type: List(Vector(Polynomial(Integer)))