How to calculate A matrix if C1=A*C2*A' ?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Dear members,
How to calculate matrix A using matlab if C1 and C2 are known?
6 commentaires
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
Réponses (0)
Voir également
Catégories
En savoir plus sur Linear Algebra dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!