solving an LMI with a Schurr complement formulation: stops due to slow progress

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

Asked:

on 4 Mar 2013

Community Treasure Hunt

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

Start Hunting!