【问题标题】:Incrementing array in for loop returning NaN [MATLAB]在 for 循环中递增数组返回 NaN [MATLAB]
【发布时间】:2018-05-09 14:10:15
【问题描述】:

我想创建一个嵌套的 for 循环,从 1x4 元胞数组 V 中提取 1x2 双精度元素并将它们相加。 1x2 双精度元素包含数字(例如[0.234 0.325])。我想将这四个 1x2 双元素加在一起并将值存储在递增计数器VSum 中。但是,MATLAB 正在返回 [NaN NaN]。我该如何解决?

附加信息:A 是一个 50x50 元胞数组

VSum = [0 0];

for i = 1:1:size(G,2)
    for j = 1:1:size(G,1)
        for p = 1:1:4
            V{p} = (A{i,j}{p}*Q)/(2*pi*norm(Z{i,j}{p}));
            VSum = V{p}+VSum;
        end 
    end
end

【问题讨论】:

  • 什么是Z?我猜Z 某处有一个0
  • 或至少 norm(Z{i,j}{p}) 在某处是 0
  • @TinyTheBrontosaurus 抱歉,我应该提到这一点。 Z 和 A 一样是一个 50x50 的单元阵列。Z 包含许多 1x4 的单元。我不确定这些单元格中是否存在 0。

标签: arrays matlab for-loop increment nan


【解决方案1】:

如果三维元胞数组Z 中只有一个值是0,那么这将返回[NaN NaN]Here's more details on where NaN vs Inf come from。只是分母中的0 将创建Inf(或-Inf),但添加Inf + -Inf 可能会创建NaN

【讨论】:

  • 你是对的。我想我现在知道我做错了什么,但我必须编写更多代码来确认。我稍后会提供更新。谢谢!
  • 更新:根据您的回答,我能够确定数组 A 中确实存在 0 和 NaN。通过编写 if-else 语句来排除受影响的单元格,循环运行没有问题并返回 Vsum 的数字。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2016-11-12
相关资源
最近更新 更多