# Way to solve AX=XB

13 views (last 30 days)
SATISH SONWANE on 25 Jan 2023
Edited: Bruno Luong on 28 Jan 2023
Is there any implementation of Tsai and lenz's (Or any other) method for solving AX=XB for hand- Eye Calibration?

the cyclist on 25 Jan 2023
This is a special case of the Sylvester equation.
Looks like the sylvester function will be helpful for you.
You might also be interested in this blog post on the topic by Cleve Moler.
SATISH SONWANE on 28 Jan 2023
Sorry. That didn't help.

Torsten on 28 Jan 2023
Edited: Torsten on 28 Jan 2023
dim = 4;
X = sym('X',[dim dim]);
A = rand(dim);
B = A.';
[M, ~] = equationsToMatrix(A*X==X*B)
if rank(M) < size(A,1)^2
N = null(M);
for i = 1:size(N,2)
S{i} = reshape(N(:,i),size(X));
S{i}
A*S{i}-S{i}*B
end
end

Matt J on 28 Jan 2023
Edited: Matt J on 28 Jan 2023
[ma,na]=size(A);
[mb,nb]=size(B);
%size(X)=[na,mb]
X=null( kron(speye(mb),A) - kron(B.',speye(na)) );
X=reshape(X,na,mb,[]);
##### 2 CommentsShowHide 1 older comment
Bruno Luong on 28 Jan 2023
Edited: Bruno Luong on 28 Jan 2023
null can only work wth full matrix
rng default
A = rand(5);
XX = rand(5);
B = XX\(A*XX);
[ma,na]=size(A);
[mb,nb]=size(B);
K=null( kron(eye(mb),A) - kron(B.',eye(na)));
R = rand(size(K,2),1); % Any random vector with this size will do the job
X = reshape(K*R,[na,mb])
X = 5×5
0.1100 0.1626 0.0772 -0.0458 0.0810 -0.0536 -0.3884 0.0510 0.0552 -0.0602 0.1937 -0.1993 0.3240 0.3508 -0.0352 -0.1165 0.4388 -0.3413 -0.3089 0.1851 0.0500 0.0277 0.0913 0.1389 0.0450
norm(A*X-X*B)
ans = 7.4501e-16

### Categories

Find more on Mathematics and Optimization in Help Center and File Exchange

R2022b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!