MATLAB: How to find a D matrix that satisfies [K]*inv(M)​*[D]==[D]*​inv(M)*[K]

equationmatrixsolution

M and K are respectively a mass and stiffness matrices 12×12, I need to find a matrix D 12×12 that satisfies this equality.
Thank you for your help

Best Answer

Hi Ikram,
Using N in place of inv(M) for simplicity, you are looking for a D such that
K*N*D = D*N*K
Let K*N and N*K have eigenvalue expansions
(K*N)*W = W*lambda
(N*K)*V = V*lambda
for matrices W and V and diagonal eigenvalue matrix lambda (although the code outputs lambda as a vector for convenience). It's the same lambda in both cases since the eigenvalues of K*N and N*K are identical. Matlab does not put eigenvalues in any particular order, so the code sorts the lambdas to make sure they are in the same order in each case. For simplicity I also assume no repeated eigenvalues because things are more complicated in that situation. It's easy to show that
D = W*inv(V)
is the solution.
n = 7;
K = rand(n,n);
N = rand(n,n);
[W lam] = eig(K*N,'vector');
[~,ind] = sort(lam);
W = W(:,ind);
[V lam] = eig(N*K,'vector');
[~,ind] = sort(lam);
V = V(:,ind);
D = real(W/V); % remove tiny imaginary part down in the numerical noise
K*N*D - D*N*K % check, should be small