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

1 vue (au cours des 30 derniers jours)
Ahmad Fakih
Ahmad Fakih le 19 Avr 2019
Modifié(e) : Ahmad Fakih le 20 Avr 2019
Dear members,
How to calculate matrix A using matlab if C1 and C2 are known?
Capture.PNG
  6 commentaires
David Wilson
David Wilson le 20 Avr 2019
Modifié(e) : David Wilson le 20 Avr 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 le 20 Avr 2019
Modifié(e) : Ahmad Fakih le 20 Avr 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!

Connectez-vous pour commenter.

Réponses (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by