How to calculate A matrix if C1=A*C2*A' ?

3 visualizaciones (últimos 30 días)
Ahmad Fakih
Ahmad Fakih el 19 de Abr. de 2019
Editada: Ahmad Fakih el 20 de Abr. de 2019
Dear members,
How to calculate matrix A using matlab if C1 and C2 are known?
Capture.PNG
  6 comentarios
David Wilson
David Wilson el 20 de Abr. de 2019
Editada: David Wilson el 20 de Abr. de 2019
Any other conditions, such as symmetry, positive definiteness etc?
Have you looked at the Riccati equation and friends?
Below I've tried a crude numerical minimisation strategy, but it is, as expected, very sensitive.
n = 3; % start small, and then work up to say n=10.
Ax = rand(n,n); % true value
C2 = rand(n,n);
C1 = Ax*C2*Ax';
f = @(A) norm(A*C2*A' - C1)
g = @(a) f(reshape(a,n,n));
optns = optimoptions('fminunc','MaxIterations',1e3,'MaxFunctionEvaluations',1e5)
a0 = randn(n^2,1); % start guess for the elements of [A] in a column.
a = fminunc(g,a0,optns)
A = reshape(a);
I've also tried a symbolic version with just 2*2 and random numbers. I get multiple solutions, so are you sure this problem is well formed, say with a unique solution?
n = 2; % test dimension
syms a11 a12 a21 a22 real
A = [a11, a12; a21 a22];
Ax = [1,2;3,5]; % true solution
C2 = [4,-2;0,6]; % arbitrary constants
C1 = Ax*C2*Ax';
Asoln = solve(A*C2*A'==C1,A) % symbolic toolbox
for i = 1:length(Asoln.a11) % look at each solution & residual
Ar = double([Asoln.a11(i), Asoln.a12(i);
Asoln.a21(i), Asoln.a22(i)]);
res = Ar*C2*Ar' - C1
end
Ahmad Fakih
Ahmad Fakih el 20 de Abr. de 2019
Editada: Ahmad Fakih el 20 de Abr. de 2019
Yeah sorry forgot to tell you the matrices are Symmetrical. @David thanks for the interesting answer. Anyway I found an exact solution, but this requires C2 to be a diagonal ones matrix but that's not a problem for me. Also, cov is basically C1.Thanks all!

Iniciar sesión para comentar.

Respuestas (0)

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by