solving an LMI with a Schurr complement formulation: stops due to slow progress
Show older comments
Dear reader,
Thank you for reading this message. I am trying to import experimental results in Matlab (done), and try to fit this data on a model (here for example the famous MX.. +Kx=F : the equation of motion where M,K are 2 by 2 matrices). Basically I want to find the values of M and K such that the model and the experimental results have the best fit. I am using the LMI toolbox to solve this complex problem. I don't know if I am wrongly writing the Schurr complement using lmiterm or if there is something that I am doing wrong, but Matlab doesn't display any error, and yet it does not solve my generalized eigenvalue problem.
If you have any suggestion, I would be glad to try it out.
Sincerely,
Benoit PS I don't know why the beginning of the code shows up badly; it mainly concerns the importation of the experimental results.
PPS My matlab code: % Importing experimental data to fit on the classical equation of motion Mx(dot %dot) + Kx=F
v=csvread('test_freq.csv',2,7) w=v(:,1); phi=v(:,2); %Enabling the parameters alpha0=0; M0=zeros(2); K0=zeros(2); R0=zeros(2); I2=eye(2);
%I am comparing the experiments with the model Mx(..)+Kx for all the %different frequencies. At every step I look if I have a better fit than at %previous step; if so, then I keep the parameters that fit better. I %return 0123456789 if no fit is found for k=1:1:length(w) %Comparing for every frequency in my frequency response setlmis([]); %enabling LMI set up M=lmivar(1,[2 1]); % defining the 2 by 2 matrices: mass, stiffness, Circuit loading K=lmivar(1,[2 1]); R=lmivar(1,[2 1]);
%defining the inequalities of the LMI
lmiterm([1 1 1 0],I2);
lmiterm([-1 1 1 M],1,1); %M>I
%lmiterm([-2 1 1 0],R); R>0
lmiterm([-3 1 1 K],1,1); %K>0
% Schurr complement formulation
%I want to minimize a such that the Schurr complement [a*I2 , R-(- % Mw^2+K)
% R-(-Mw^2+K) , aI2 %] >0
%I2 is the identity matrix for n=2
lmiterm([-4 1 2 R],1,1);
lmiterm([-4 1 2 M],phi(k)*(w(k))^2,1);
lmiterm([-4 1 2 K],-phi(k),1);
lmiterm([-4 1 1 0],I2);
lmiterm([-4 2 2 0],I2);
lmisys=getlmis;
%Fixing the solver
[alpha,popt]=gevp(lmisys,1);
% M=dec2mat(lmisys,popt,1);
%K=dec2mat(lmisys,popt,2);
%R=dec2mat(lmisys,popt,3);
%Comparing the result
%If better than at previous step, keep; else, disregard
if alpha<alpha0
alpha0=alpha;
end
%If I have a fit, then display a plot that should match the
%experimental data plot.
if alpha0>0
y=(-w.^2.*M0(2,2)+K0(2,2))./((-w.^2.*M0(2,2)+K0(2,2)).*(-w.^2*M0(1,1)+K0(1,1))-K0(2,1)*K0(1,2));
z=real(abs(y));
plot(w,z);
else 0123456789
%Arbitrary message in case the solver did not solve
end
end
Answers (0)
Categories
Find more on Linear Matrix Inequalities in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!