Is there a matrix A such that AxB=B?

  • Context: Undergrad 
  • Thread starter Thread starter yazid12111980
  • Start date Start date
  • Tags Tags
    Matrix
Click For Summary

Discussion Overview

The discussion revolves around the question of whether there exists a matrix A such that the cross product of A and a given 3x3 matrix B equals B itself. Participants explore the definitions and properties of matrix multiplication versus the cross product, particularly in the context of MATLAB and Mathematica.

Discussion Character

  • Debate/contested
  • Technical explanation
  • Mathematical reasoning

Main Points Raised

  • One participant asks if there exists a matrix A such that AxB = B, given a 3x3 matrix B.
  • Another participant suggests using the identity matrix as A, but this is challenged as not applicable for the cross product.
  • A participant clarifies that the operation in question is a cross product, not standard matrix multiplication, and provides an example with specific matrices.
  • There is a discussion about how to define the cross product for matrices, with some participants expressing uncertainty about its standard definition.
  • One participant mentions that interpreting AxB as a cross product is non-standard and emphasizes the conventional definition of matrix multiplication.
  • Another participant notes that MATLAB can compute cross products for matrices, but questions whether this aligns with the original inquiry.
  • A later reply introduces the concept of the matrix commutator as a potential alternative to the cross product, suggesting it may be more appropriate for matrices.
  • Further technical details are provided regarding how to implement cross products in Mathematica, including timing comparisons of different methods.

Areas of Agreement / Disagreement

Participants express disagreement on the interpretation of the operation AxB, with some insisting it refers to matrix multiplication while others argue it pertains to the cross product. The discussion remains unresolved regarding the existence of a matrix A that satisfies the original condition.

Contextual Notes

There is ambiguity regarding the definitions of operations involved, particularly the cross product in the context of matrices, and how these definitions may vary between programming environments like MATLAB and Mathematica.

yazid12111980
Messages
3
Reaction score
0
AxB=B ?

Hello, This my first post .. I hope to find someone can help me.

My question:
Assume that we have a 3x3 matrix B, is there a matrix A such that

AxB=B

??

Thanks
 
Physics news on Phys.org


Take A the identity matrix. That is, take

[tex]A=\left(\begin{array}{ccc} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{array}\right)[/tex]
 


I tried that .. it doesn't work for cross product !
 


Its not a multiplication .. its a cross product. For example:

A =

1 2 3
4 5 6
7 8 9

>> B=eye(3)

B =

1 0 0
0 1 0
0 0 1

>> cross(B,A)

ans =

0 8 -6
-7 0 3
4 -2 0

?
 


So, how do you define the cross product for matrices??
 


yazid12111980 said:
Its not a multiplication .. its a cross product.
I would double check on that if I were you. The standard definition of A×B is that of matrix multiplication:

[tex](A\times B)_{ij} = \sum_k A_{ik} B_{kj}[/tex]

Interpreting A×B to mean Matlab's cross(A,B) when A and B are matrices is extremely non-standard.
 


Cross products for matrices can be done in Matlab, and it seems to be defined as several cross products in the matrix. Are you sure this is what you want? I have never seen this before. AxB has always been ordinary matrix multiplication.
 


@Yazid: I'm not sure there is even a sensible way to define a cross product for matrices in 3 dimensions. The closest you can probably get to it is just the matrix commutator. It's a antisymmetric product that takes two matrices and returns a matrix.

Then [A,B] = B is basically an eigenvalue problem for the adjoint representation of A...
where you've been given an eigenvector (B) and need to find an operator (ad(A)) with that eigenvector.
 
  • #10


Actually, http://www.mathworks.com.au/help/techdoc/ref/cross.html"
It works something like (I don't have matlab, so I can't be sure)

So if A = (a1,a2,...,an) and B=(b1,b2,...,bn) with ai and bi 3d vectors, then

cross(A,B) = ( cross(a1,b1), cross(a2,b2), ..., cross(an,bn) )

In Mathematica, the example provided can be written as

Code:
A = {{1, 2, 3}, 
     {4, 5, 6}, 
     {7, 8, 9}};
B = IdentityMatrix[3];

Transpose[Table[Cross[Transpose[B][[i]], Transpose[A][[i]]], {i, 3}]]
(* Output: 
{{ 0,  8, -6}, 
 {-7,  0,  3}, 
 { 4, -2,  0}}
*)

So for n=3, the original problem becomes

cross(A,B)=B ==> (a1xb1, a2xb2, a3xb3) = (b1, b2, b3)

which requires that aixbi=bi, something that is never true...
 
Last edited by a moderator:
  • #11


Simon_Tyler said:
In Mathematica, the example provided can be written as

I'd use the http://reference.wolfram.com/mathematica/ref/Thread.html" command myself.
 
Last edited by a moderator:
  • #12


@pwsnafu

I couldn't get Thread to work without Cross complaining about its arguments - although the error messages can be suppressed. Overall, I found that a combination of Apply at level 1 (@@@) the fastest, but not by much. Table is definitely the clearest to someone who is not used to functional programming.

Here's some timings using my custom TimeAv function. The FullForm of Transpose, instead of its typeset form, definitely makes the whole thing less readable...

Code:
In[1]:= A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        B = IdentityMatrix[3];

In[3]:= SetOptions[TimeAv, Method -> {"MinNum", 10000}, "BlockSize" -> 1000];

In[4]:= Transpose[Table[Cross[Transpose[B][[i]], Transpose[A][[i]]], 
                  {i, 3}]] // TimeAv

During evaluation of In[4]:= Total wall time is 4.817133, 
total cpu time is 4.07 and total time spent evaluating the expression is 4.07

During evaluation of In[4]:= The expression was evaluated 10000 times, 
in blocks of 1000 runs. This yields a mean timing of 0.000407 
with a blocked standard deviation of 7.81025*10^-6.

Out[4]= {0.000407, {{0, 8, -6}, {-7, 0, 3}, {4, -2, 0}}}

In[5]:= Transpose[Apply[Cross, Transpose[{Transpose[B], Transpose[A]}], 
                        {1}]] // TimeAv

During evaluation of In[5]:= Total wall time is 3.847493, 
total cpu time is 3.85 and total time spent evaluating the expression is 3.85

During evaluation of In[5]:= The expression was evaluated 10000 times, 
in blocks of 1000 runs. This yields a mean timing of 0.000385 
with a blocked standard deviation of 5.*10^-6.

Out[5]= {0.000385, {{0, 8, -6}, {-7, 0, 3}, {4, -2, 0}}}

In[6]:= Quiet[Transpose[Thread[Cross[Transpose[B], Transpose[A]]]], 
              Cross::nonn1] // TimeAv

During evaluation of In[6]:= Total wall time is 4.462055, 
total cpu time is 4.46 and total time spent evaluating the expression is 4.46

During evaluation of In[6]:= The expression was evaluated 10000 times, 
in blocks of 1000 runs. This yields a mean timing of 0.000446 
with a blocked standard deviation of 9.16515*10^-6.

Out[6]= {0.000446, {{0, 8, -6}, {-7, 0, 3}, {4, -2, 0}}}
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 7 ·
Replies
7
Views
4K
  • · Replies 20 ·
Replies
20
Views
4K
  • · Replies 33 ·
2
Replies
33
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 14 ·
Replies
14
Views
5K
  • · Replies 12 ·
Replies
12
Views
4K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 7 ·
Replies
7
Views
3K