【问题标题】:MATLAB - why does this index exceed the matrix dimensions?MATLAB - 为什么这个索引超过矩阵维度?
【发布时间】:2012-07-26 16:51:24
【问题描述】:

您好,我有这段代码,它不断给我一个“索引超出矩阵尺寸”错误。我试图用“battery_capacity”矩阵=2的值来启动h=1、d=1的循环,24个“h”和3个“d”,但这似乎与矩阵大小相矛盾。 任何帮助表示赞赏! “h-1”是否会导致问题。错误出现在第二次写入“battery_capacity” 我的代码是 for idx_number_panels = 1:length(number_panels) % 检查的光伏面板单元范围

for number_turbines = 0:2 % range of wind turbine units examined
  for number_batteries = 1:50 % range of battery units examined
    for h=2:25 %# hours
      for d = 1:number_of_days %# which day
        battery_capacity(idx_number_panels, number_turbines+1, ...
                         number_batteries, 1, 1) =  2*number_batteries;
        %% Charging
        battery_charging(idx_number_panels, number_turbines+1, ...
                         number_batteries, h, d) ...
          = hourly_surplus(idx_number_panels, number_turbines+1, ...
                          number_batteries, h, d) ...
            + battery_capacity(idx_number_panels, number_turbines+1, ...
                               number_batteries, h-1,d);
    end
  end
end

调试器

error line 134 

battery_charging(idx_number_panels, number_turbines+1 ,number_batteries, h,d) =        hourly_surplus(idx_number_panels, number_turbines+1 ,number_batteries, h,d)...
    K>> sz = size(battery_charging)

sz =

 1     1     1     2

K>> index = [idx_number_panels, number_turbines+1 ,number_batteries, h-1,d]

index =

 1     1     1     1     2

K>> ndims(battery_charging)

ans =

  4

在命令行中运行“battery_charging”

>> battery_charging

battery_charging(:,:,1,1) =

 0


battery_charging(:,:,1,2) =

  0

【问题讨论】:

    标签: matlab for-loop multidimensional-array matrix


    【解决方案1】:

    比试图从代码中找出问题所在更容易的是如下调试。首先,设置调试器在出错时中断:

    >> dbstop if error
    

    现在,再次运行您的代码。当您遇到错误时,您应该会看到调试提示:

    K>>
    

    您现在可以在出错时检查不同索引的值和矩阵的形状,并找出问题出在哪里。

    【讨论】:

    • 感谢艾萨克。我已经完成了您的建议,并复制了我在上面原始帖子的命令提示符中看到的内容。我真的不明白如何将其解释为“battery_charging”似乎有 4 个维度和“battery_capacity 5 个维度。以下是否意味着问题出在“h”维度上??
    • 您显然缺少一个维度,是的。你不自己初始化这个矩阵吗?
    • 我相信我在一开始就使用了 for 循环。但是,我正在尝试使用前一个“h”中的“battery_capacity”值,如上面代码中的“h-1”格式所示。这可能与问题有关吗?
    • 我还添加了我在命令行中运行“battery_charging”时得到的内容。它似乎从 d = 1 运行到 2 然后崩溃
    • 尝试将变量初始化为您想要的大小。 (即battery_charging = zeros(n1,n2,n3,n4,n5);
    猜你喜欢
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多