function [Welfare ToTF VoTF ToTEjsF ToTMjsF VoTMjsF  ToTX VoTX ToTEjsX ToTMjsX VoTMjsX votEijsF votEijsX EjisF_dc EjisX_dc Ijp] = Welfarelineal0515(Ij,PiF,Pi,alphas,gammas,tauF,tauX,cost,Surplusnp,VAn,wagehat,tauFp,PiFp,tauXp,Pip,YY,Youtput_test,J,S,N)

%先构建EjisF，注意是基年的数据。
      AI= alphas.*(ones(S,1)*Ij');   %AI表示alphas*I
      EjisF= PiF./tauF.*repmat(AI,J/S,1);
      c_all=repmat(reshape(cost,[],1),1,J/S);
      EjisF_dc=EjisF.*((c_all-1));
  %计算dMijsFp，要先计算Ijp.
    CtyConsp = wagehat.*VAn - Surplusnp;
    F1_test=1-sum(PiFp./tauFp.*(tauFp-1).*repmat(alphas,N,1));
    IGS1 =sum(Pip./tauXp.*(tauXp-1).*repmat(gammas,N,1).*repmat((reshape(Youtput_test,[],1))',J,1));%Youtput_test运行时需修改为YYp
    IGS2 = (sum(reshape(IGS1,S,J/S)))';
    Ijp = (CtyConsp+IGS2)./F1_test';
    %计算dMijsFp，要先计算 EjisFp
    AIp= alphas.*(ones(S,1)*Ijp');   %AI表示alphas*I
    EjisFp= PiFp./tauFp.*repmat(AIp,J/S,1);
    %MijsFp = PiFp./tauFp.*repmat(alphas,N,1).*repmat(Ijp',J,1);
    %计算dMijsFp
    EjisFhat= EjisFp./EjisF;%注意dMijsrp与dEjisp基本上是相等的，请看两者的计算公式，只是按照j国加总时的按照不同的行和列加总。
    tauMijsF=EjisF.*(tauF-1);
    %计算VoTMjsF,先计算votEijsF
    votEijsF = tauMijsF.*((EjisFhat-1) - (c_all-1));
    
    %计算Ejisr，注意基年数据
    RY= gammas.*repmat(YY',S,1);   %AI表示gammas*YY
    Ejisr= Pi./tauX.*repmat(RY,J/S,1);   %RY表示gammas*YY
    %计算dMijsrp
    RYp= gammas.*repmat(Youtput_test',S,1);%Youtput_test运行时需修改为YYp
    Ejisrp= Pip./tauXp.*repmat(RYp,J/S,1);   %RY表示gammas*YY
    Ejisrhat= Ejisrp./Ejisr;
    
    c_allp=repmat(reshape(cost,[],1),1,J);
      Ejisr_dc=Ejisr.*((c_allp-1));
      tauMijsr=Ejisr.*(tauX-1);
      votEijsr = tauMijsr.*((Ejisrhat-1) - (c_allp-1));
      %对r部门进行合并，不论对Ejisr还是对Mijsr，对r部门进行合并都不会影响，而且也不会影响Ejisr转换到Mijsr。
for j = 1:1:J/S
    Ejis(:,j) = (sum((Ejisr(:,1+J/N*(j-1):J/N*j)')))';
    EjisX_dc(:,j) =(sum((Ejisr_dc(:,1+J/N*(j-1):J/N*j)')))';
    votEijsX(:,j) = (nansum((votEijsr(:,1+J/N*(j-1):J/N*j)')))';
end   
    %计算ToTEjsF ToTMjsF
for j = 1:1:J/S
for   s =  1:1:S
    ToTEjsF(s,j) = sum(EjisF_dc(s + S*(j-1),:));
    ToTMjsF(s,j) = sum(EjisF_dc(s:S:J,j));
    VoTMjsF(s,j) = nansum(votEijsF(s:S:J,j));
    
    ToTEjsX(s,j) = sum(EjisX_dc(s + S*(j-1),:));
    ToTMjsX(s,j) = sum(EjisX_dc(s:S:J,j));
    VoTMjsX(s,j) = nansum(votEijsX(s:S:J,j));    
 end
end   
 
ToTF = (sum(ToTEjsF)' - sum(ToTMjsF)')./Ij;
VoTF = (nansum( VoTMjsF)')./Ij;
ToTX = (sum(ToTEjsX)' - sum(ToTMjsX)')./Ij;
VoTX = (nansum( VoTMjsX)')./Ij;
Welfare = ((ToTF+VoTF)+(ToTX+VoTX));
