查看: 1951|回复: 3|关注: 0

[已解决] 报错”下标索引必须为正整数类型或逻辑类型。“

[复制链接]

新手

12 麦片

财富积分


050


2

主题

5

帖子

0

最佳答案
想完成一个调度方面的排序,下标都是正整数,不知道哪里出错了。。。
代码:
function [O] = danji( kind,W,P,D )
kind = 0;
if kind == 1
    for i=1:length(P)
    O(i)=W(i)./P(i);
    end
    sort (O);
    fliplr(O);
elseif kind == 2
       for i=1:length(D);
        O(i)=sort(D);
       end
    elseif kind == 3
           for i=2:1:length(P);
               p(i)=P(i);
               d(i)=D(i);
               p(i)=p(i)+p(i-1);
               if p(i)<=d(i)
                   O(i)=p(i);
               else p(i)=[];
               end
            end
            sort(O);
        elseif kind == 4
                for i=1:length(P)
                    h(1)=P(1);
                    if i>1 && i<k
                        h(i)=h(i-1)+P(i);
                        x(i)=h(i)-D(i);
                    elseif i>k
                             h(i)=h(i-1)+P(i)-P(k);
                             r(i)=h(i-1)+P(i);
                             x(i)=h(i)-D(i);
                             g(i)=r(i)-D(i);
                    end
                end
                if i<=(k-1)
                     for i=2:(k-1)
                         if x(i)>0
                             A(t)=g(i);
                         else
                             A(t)=0;
                         end
                     end
                elseif i>k
                     for i=(k+1):n
                         if x(i)>0
                             A(t)=x(i);
                         else
                             A(t)=0;
                         end
                     end
                end
                for i=k:n
                    B(t)=g(i);
                end
                if i<=n
                  for i=(k+1):n
                    C(t)=g(i)+P(i+1)-D(i+1);
                  end
                else
                    C(t)=0;
                end
                O(i)=A(t)+B(t)+C(t);
                sort (O);

end

运行

运行

论坛优秀回答者

中级

856 麦片

财富积分


5001500


53

主题

1715

帖子

154

最佳答案
  • 关注者: 45
发表于 2018-10-19 20:57:51 | 显示全部楼层 |此回复为最佳答案
w(i)=[6,18,12,8,8,17,18]这个肯定不符合语法的,这相当于一个数等于一个向量,建议好好看一下matlab语法

新手

12 麦片

财富积分


050


2

主题

5

帖子

0

最佳答案
 楼主| 发表于 2018-10-22 21:01:15 | 显示全部楼层
倔强的笨蛋 发表于 2018-10-19 20:57
w(i)=[6,18,12,8,8,17,18]这个肯定不符合语法的,这相当于一个数等于一个向量,建议好好看一下matlab语法 ...

再问下还是这个程序为什么到红笔那行报错 索引超出矩阵维度?
  elseif kind == 4 %考虑总滞后时间
              [~,k]=max(P);
              g=[];
                for i=2:length(P)
                    h(1)=P(1);
                    if i>1 && i<k
                        h(i)=h(i-1)+P(i);
                        x(i)=h(i)-D(i);
                    elseif i>k>1
                             h(i)=h(i-1)+P(i)-P(k);
                             r(i)=h(i-1)+P(i);
                             x(i)=h(i)-D(i);
                             g(i)=r(i)-D(i);
                    else break
                    end
                end
                if i<=(k-1)
                     for i=2:(k-1)
                         if x(i)>0
                             A(i)=g(i);
                         else
                             A(i)=0;
                         end
                     end
                elseif i>k
                     for i=(k+1):length(P)
                         if  x(i) > 0
                             A(i)=x(i);
                         else
                             A(i)=0;
                         end
                     end
                end
                for i=k:length(P)
                  B(i)=g(i);
                end
                if i <= length(P)
                  for i=(k+1):length(P)
                    C(i)=g(i)+P(i+1)-D(i+1);
                  end
                else
                    C(i)=0;
                end
                O(i)=A(t)+B(t)+C(t);
                Q=sort (O);
                disp(Q);

论坛优秀回答者

中级

856 麦片

财富积分


5001500


53

主题

1715

帖子

154

最佳答案
  • 关注者: 45
发表于 2018-10-22 22:00:16 | 显示全部楼层
PBg的长度是一样的吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表