2017-08-23 2 views

Antwort

1

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.

+0

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

+0

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. –