Re: Evaluating a polynomial on a matrix; matrix computations over a finite field
- To: mathgroup at smc.vnet.net
- Subject: [mg43134] Re: [mg43123] Evaluating a polynomial on a matrix; matrix computations over a finite field
- From: Selwyn Hollis <selwynh at earthlink.net>
- Date: Thu, 14 Aug 2003 05:07:50 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
The key is to replace Power with MatrixPower, and constants need to be
replaced by a multiple of IdentityMatix[n]. The following function
seems to work pretty well:
matp[poly_,x_Symbol][A_?MatrixQ /;
First[Dimensions[A]]==Last[Dimensions[A]]] :=
With[{n = Length[A]}, ( poly /.
b_^c_ -> MatrixPower[b, c] /.
b_+c___ /; FreeQ[b, x] ->
HoldForm[b*IdentityMatrix[n] + c] /.
x -> A ) //ReleaseHold ]
A:= {{2, 2}, {1, 3}};
matp[x^3 + 5*x^2 + 2*x + 3, x][A]
{{59, 96}, {48, 107}}
...which beats typing in this:
MatrixPower[A, 3] + 5MatrixPower[A, 2] + 2A + 3IdentityMatrix[2]
{{59, 96}, {48, 107}}
-----
Selwyn Hollis
http://www.math.armstrong.edu/faculty/hollis
On Wednesday, August 13, 2003, at 07:49 AM, Lot-o-fun wrote:
> How do I compute p(A), where p is a polynomial and A is a matrix?
>
> For example, if
>
> p[x_] := x^2 - 3x + 2
>
> and
>
> A = {{1,2},{3,4}}, then I want to compute
>
> p(A) = A^2 - 3A + 2I = {{6,4},{6,12}}
>
> Is there some way of doing this?
>
> I'd also like to be able to do various matrix computations over finite
> fields. For example, I'd like to compute the minimal polynomial of a
> matrix over Z_2.
>
> Thanks!
>
> -Lotofun
>
>