xh4399 2021-10-30 16:05 采纳率: 100%
浏览 11
已结题

其他相同数据矩阵都没问题,但这个数据放进去就不行,希望解答

X=[1026.2  1521.2  1433.1  1543.3  2123.6  2046.5  2077.5  2095.3  2135.5  2605.31  2670.44;
   305884  304029  293912  243019  275895  289603  291791  286719  242689   245802  274703;
   152135  154344  156965    163045  174492  179200  184553     188431  191693   193252  196983]; 
Y=[1357.8  1514.9    1773.3  2207.8  2291.5  2333.5    2399.3  2410.3  2541.9   2606.5  2916;    
   123065  156596  189799  219130.3  198009  209946  198024  210586  228854  249323  243445;
   15306.9  18003.6  21384.7  23077.5  24259.6  25208.9  26398.4  28474.1  30604.8  32394.6  34978.6];                                  

n=size(X',1);m=size(X,1);s=size(Y,1);      
A=[-X' Y'];b=zeros(11,1);
LB=zeros(6,1);UB=[];
for i=1:11
    Aeq =[X(:,i)',zeros(1,3)];beq=1;
    f=[zeros(1,3),-Y(:,i)'];
    w(:,i)=linprog(f,A,b,Aeq,beq,LB,UB);  
    Eii=Y(:,i)'*w(4:6,i);     
     for k=1:11                      
         f=[zeros(1,3) Y(:,k)'];
         Aeq=[X(:,k)',zeros(1,3)
             Eii*X(:,i)',-Y(:,i)'];   
         beq=[1
             0];   
         v=linprog(f,A,b,Aeq,beq,LB,UB);
         E(i,k)=(Y(:,k)'*v(4:6))/(X(:,k)'*v(1:3));
     end
 end
E                                 
mean(E)
[Y I]=sort(mean(E));               
fliplr(I) 

索引超出数组元素的数目(0),
E(i,k)=(Y(:,k)'*v(4:6))/(X(:,k)'*v(1:3));

  • 写回答

1条回答 默认 最新

  • 技术专家团-Joel 2021-10-30 16:26
    关注

    同学你好,你的程序运行到出错的一步的时候,显示第22行linprog求解没有可行域,即解出来的是空解v=[],这个时候在23行强制索引v(4:6)和v(1:3)自然会报错说“索引超出数组元素的数目(0)”,因为这个时候的v的长度是0。所以建议当v=[]的时候,把v设置成全部都是NaN的形式,就可以继续进行求解了。修改后的代码如下:

    X=[1026.2  1521.2  1433.1  1543.3  2123.6  2046.5  2077.5  2095.3  2135.5  2605.31  2670.44;
       305884  304029  293912  243019  275895  289603  291791  286719  242689   245802  274703;
       152135  154344  156965    163045  174492  179200  184553     188431  191693   193252  196983]; 
    Y=[1357.8  1514.9    1773.3  2207.8  2291.5  2333.5    2399.3  2410.3  2541.9   2606.5  2916;    
       123065  156596  189799  219130.3  198009  209946  198024  210586  228854  249323  243445;
       15306.9  18003.6  21384.7  23077.5  24259.6  25208.9  26398.4  28474.1  30604.8  32394.6  34978.6];                                  
    n=size(X',1);m=size(X,1);s=size(Y,1);      
    A=[-X' Y'];b=zeros(11,1);
    LB=zeros(6,1);UB=[];
    for i=1:11
        Aeq =[X(:,i)',zeros(1,3)];beq=1;
        f=[zeros(1,3),-Y(:,i)'];
        w(:,i)=linprog(f,A,b,Aeq,beq,LB,UB);  
        Eii=Y(:,i)'*w(4:6,i);     
         for k=1:11                      
             f=[zeros(1,3) Y(:,k)'];
             Aeq=[X(:,k)',zeros(1,3)
                 Eii*X(:,i)',-Y(:,i)'];   
             beq=[1
                 0];   
             v=linprog(f,A,b,Aeq,beq,LB,UB); % 当函数返回的值为空的时候,没有可行域,说明线性规划没有解,即v为空
             if(isempty(v)) % v的值为空的时候,自动用NaN填充
                 v = NaN(6,1);
             end
             E(i,k)=(Y(:,k)'*v(4:6))/(X(:,k)'*v(1:3)); % 当v为空的时候自然v(4:6)和v(1:3)不存在,即超出索引
         end
     end
    E                                 
    mean(E)
    [Y I]=sort(mean(E));               
    fliplr(I) 
    

    可见求解会顺利进行下去,没有解的地方都会标记成NaN。
    如有帮助,还望题主给个采纳支持一下答主答题哟,谢谢啦(づ ̄3 ̄)づ╭❤~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 创建了问题 10月30日

悬赏问题

  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的