This is the code:
function [model] = M4(trainA,trainB,C)
%M4 Summary of this function goes here
% Detailed explanation goes here
[nx,col]=size(trainA);
ny=size(trainB,1);
sigmaA=cov(trainA);
sigmaB=cov(trainB);
if (nx+ny)>5000
muA=mean(trainA,1);
muB=mean(trainB,1);
dA=pdist2(trainA,muA,'mahalanobis',sigmaA);
dB=pdist2(trainB,muB,'mahalanobis',sigmaB);
[~,ix]=sort(-dA);
nx=2*floor(nx/10);
trainA=trainA(ix(1:nx),:);
[~,ix]=sort(-dB);
ny=2*floor(ny/10);
trainB=trainB(ix(1:ny),:);
end
rho=sdpvar(1);
w=sdpvar(col,1);
b=sdpvar(1);
xiA=sdpvar(nx,1);
xiB=sdpvar(ny,1);
xi=[xiA;xiB];
F=[];
F=[F,rho*sqrt(w'*sigmaA*w)-xiA-trainA*w-b<=0];
F=[F,rho*sqrt(w'*sigmaB*w)-xiB+trainB*w+b<=0];
F=[F,0<=xi];
F=[F,1<=rho<=50,uncertain(rho)];
objective=C*sum(xi)-rho;
options=sdpsettings('solver','cplex'); %sedumi could work
sol=solvesdp(F,objective,options);
w=double(w);
b=double(b);
model.w=w;
model.bisa=b;
model.sigmaA=sigmaA;
model.sigmaB=sigmaB;
end
Thank you for your help.