用linprog函数求解DEA交叉效率模型,但是因为数据太多,需要计算很久。求高手优化~谢谢
程序是这样子的:
%计算交叉评价价值矩阵
[num,txt,raw]=xlsread('E:\Matlab\DEA效率的求解\AllData.xlsx',4,'A2:S2189');
[m,n]=size(num);%其中有7个产出项,9个投入项共16个指标;
X=zeros(m,9);%A为投入矩阵
Y=zeros(m,7);%B为产出矩阵
E=zeros(m);
U=zeros(16,m);
a=1;
c=1;
%区分指标是投入还是产出,并将投入产出分开
for i=1:n
if num(m,i)==1
Y(:,a)=num(:,i);
a= a + 1;
else
X(:,c)=num(:,i);
c=c+1;
end
end
B=[X,Y];
%第一阶段,计算自我评价Value,Edd
LB=zeros(16,1);UB=[];
for j=1:m
Aeq=[X(j,:),zeros(1,7)];beq=1;
Aineq=[-X(j,:),Y(j,:)];bineq=0;
f=[zeros(1,9),-Y(j,:)];
[u,fval]=linprog(f,Aineq,bineq,Aeq,beq,LB,UB,[]);
U(:,j)=u;
E(j,j)=[zeros(1,9),Y(j,:)]*u;
end
%将各个企业的各企业求和
A=zeros(1,16);
for q=1:16
A(1,q)=sum(B(:,q));
end
%第二阶段求他评,Edk
for k=1:m
for t=1:m
if t~=k
Aeq1=[A(1,1:9),zeros(1,7)
E(k,k)*X(t,:),-Y(t,:)];
beq1=[1
0];
Aineq1=[-X(t,:),Y(t,:)];bineq1=0;
f1=[zeros(1,9),-A(1,10:16)];
[v,fval]=linprog(f1,Aineq1,bineq1,Aeq1,beq1,LB,UB,[]);
E(k,t)=[zeros(1,9),A(1,10:16)]*v;
end
end
end
第一阶段模型和第二阶段模型在图片里面
附件列表