Behandeln Sie das Problem als Mindestsuchproblem (mit 240-Parameter):
clear
L=[3,2.8,2.25,1.5,1,1,1,1,0.48,0.48,0.48,0,0,0,0];
a0=rand(1,15)-0.5;
t0=rand(1,15*15);
v0=[a0,t0];
[email protected](v)Fun(v,L);
options = optimoptions('fmincon','Display','iter','Algorithm','sqp',...
'MaxFunctionEvaluations',1e8,'MaxIterations',1e4);
[v,fval,exitflag,output]=fmincon(fun,v0,[],[],[],[], -1+0*v0, 1+0*v0,[],options);
A=diag(v(1:5))+squareform(v(6:15));
eta=reshape(v(15+1:15+15*15),15,15);
function err=Fun(v,L)
A=diag(v(1:5))+squareform(v(6:15));
M=eye(15)+kron(1-eye(3),A);
eta=reshape(v(15+1:15+15*15),15,15);
res1=M-eta*diag(L)*eta'; %first eq
err1=sum(res1(:).^2);
res2=eta-eta'; %orthogonality
err2=sum(res2(:).^2);
err3=0;
for k=1:4
for i=1:2
etaik=eta(1+(i-1)*5:i*5, k);
for j=i:3
etajk=eta(1+(j-1)*5:j*5, k);
res3=etaik'*A*etajk - (L(k)-1)/6;
err3=err3+sum(res3(:).^2);
end
end
end
err=err1+err2+err3;
end
Lösung:
A =
0.2717 -0.07536 0.079584 -0.016013 0.45538
-0.07536 0.58885 0.17244 0.46076 -0.036574
0.079584 0.17244 0.93162 -0.18853 -0.011267
-0.016013 0.46076 -0.18853 0.47542 0.10454
0.45538 -0.036574 -0.011267 0.10454 0.70009
Eta 15x15 ist ...
fval =
0.00067
von hier weiter und fügen Sie weitere Einschränkungen hinzu.
Darf ich fragen, was meinst du "Von hier fortfahren und weitere Einschränkungen hinzufügen" .Die singulären Werte von [I, A, A; A, I, A; A, A, I] sind nicht so nahe an der erforderlichen Lambda. – John
Sie haben viele freie Parameter, vielleicht haben Sie also viele lokale Mindestwerte. Ich denke nicht, dass dies SVD ist, also erwarte nicht, die singulären Werte zu bekommen. –