I think the problem is that FMINCON thinks your fixed "data" is meant to be passed both to meancov and covposdef. If you intend only to pass it to meancov, call FMINCON using the following more modern syntax
theta = fmincon(@(x) meancov(x,data),iv,[],[],[],[],lb,ub,@covposdef,options);
Best Answer