MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Help for Symbolic matrix manipulations in mathematica?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg26099] Re: [mg26069] Help for Symbolic matrix manipulations in mathematica?
  • From: Daniel Lichtblau <danl at wolfram.com>
  • Date: Tue, 28 Nov 2000 01:55:42 -0500 (EST)
  • References: <200011220655.BAA19975@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Louis Trichard wrote:
> 
> Hi
> 
>     I'm quite new to mathematica and not sure on where to start.
> 
>     What I would like to do is to initially symbolically manipulate
> matrices.
> 
>     i.e. find the coefficients of (R+X)^i where R and X do not
> commute...ie. binomial theorem does not apply.
> 
>     for example    (R+X)^2 = R^2 + RX + XR + X^2 **********1
> 
>     then simplify the expression  s^t (R + X)^i s where X = s s^t and
> s^t s = 1   where t indicates transpose and s is a vector.
> 
>     for example **********1 will simplify to
> 
>         s^t (R+X)^2 s = s^t R^2 s + s^t RX s + s^t XR s + s^t X^2 s
>                                = s^t R^2 s + 2 s^t R s +
> 1                         , where s^t X = s and so forth....
> 
>         of course this looks like just an application of the binomial
> theorem but for i=3 we get....
> 
>     s^t (R+X)^3 s = s^t R^3 s + 2 s^t R^2 s + (s^t R s)^2 + 3 s^t R s +
> 1....
> 
>     So I would like to have a program which can give me the coefficients
> etc for an arbitrary i...
> 
>     Can mathematica do it, if so, could someone point me in the right
> direction to do such a thing...
> 
> Thanks
> 
> Louis


There might be more efficient approaches, but you could put rules on
NonCommutativeMultiply, define expansion of noncommutative products that
possibly involve sums, and interleave simplification rules. For example:

simprules = {
	NonCommutativeMultiply[a___,x_?NumberQ,b___] ->
	  x*NonCommutativeMultiply[a,b],
	(NonCommutativeMultiply[a___,x_^m_.,x_^n_.,b___]/;Head[x]=!=Plus) ->
	  NonCommutativeMultiply[a,x^(m+n),b],
	X^n_ -> X, Transpose[s]**s -> 1,
	Transpose[s]**X^n_. -> Transpose[s], X^n_.**s -> s,
	NonCommutativeMultiply[a_] -> a
	};

ncExpandPower[sum_,0] = 1;
ncExpandPower[sum_,1] := sum
ncExpandPower[sum_,2] := ncExpandProduct[sum,sum]
ncExpandPower[sum_,n_Integer /; n>2] :=
	ncExpandProduct[ncExpandPower[sum,n-1],sum] //. simprules
ncExpandProduct[s1_,s2_] :=
	Distribute[NonCommutativeMultiply[s1,s2]] //. simprules
ncExpandProduct[s1_,s2_,s3__] :=
ncExpandProduct[ncExpandProduct[s1,s2],s3]


Here are some simple examples along the lines of your example.

In[122]:= InputForm[ncExpandProduct[Transpose[s],
ncExpandPower[(R+X),3], s]]
Out[122]//InputForm= 
1 + 3*Transpose[s]**R**s + 2*Transpose[s]**R^2**s + Transpose[s]**R^3**s
+ 
 Transpose[s]**R**X**R**s

In[123]:= InputForm[ncExpandProduct[Transpose[s],
ncExpandPower[(R+X),5], s]]
Out[123]//InputForm= 
1 + 5*Transpose[s]**R**s + 4*Transpose[s]**R^2**s +
3*Transpose[s]**R^3**s + 
 2*Transpose[s]**R^4**s + Transpose[s]**R^5**s +
 3*Transpose[s]**R**X**R**s + 
 2*Transpose[s]**R**X**R^2**s + Transpose[s]**R**X**R^3**s + 
 2*Transpose[s]**R**X^2**R**s + Transpose[s]**R**X^2**R^2**s + 
 Transpose[s]**R**X^3**R**s + 2*Transpose[s]**R^2**X**R**s + 
 Transpose[s]**R^2**X**R^2**s + Transpose[s]**R^2**X^2**R**s + 
 Transpose[s]**R^3**X**R**s + Transpose[s]**R**X**R**X**R**s


A symbolic form of rank-1 updates?


Daniel Lichtblau
Wolfram Research


  • Prev by Date: Computeralgebra in University physics teaching
  • Next by Date: Re: Problem with finding angles between points in Cartesian plane
  • Previous by thread: Help for Symbolic matrix manipulations in mathematica?
  • Next by thread: Phase Plane Plotting