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+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