【问题标题】:Undefined function or variable vector未定义的函数或变量向量
【发布时间】:2017-04-14 13:20:42
【问题描述】:

我正在使用 matlab,并且我已经加载了一个包含变量 date、pH 和 pressure_dbar(所有向量)的文件。我正在尝试编写一个函数来接收这些变量,以及最大和最小 pressure_dbar 变量并返回两个新向量:newDate 和 newpH。如果日期和 pH >= 最小值且

minimum = min(pressure_dbar);
maximum = max(pressure_dbar);

function [newDate, newpH] = oceanpHdepth(date, pH, pressure_dbar, minimum, maximum)

for i = 1:length(date)
    for j = 1:length(pH)
        if (ge(pressure_dbar, minimum) && lt(pressure_dbar, maximum))
                newDate = date(i);
                newpH = pH(j);     
        end
    end
end

end

【问题讨论】:

  • 条件(ge(pressure_dbar, minimum) && lt(pressure_dbar, maximum)) 绝不能为真
  • @Suever 我最初将其设置为 (pressure_dbar >= minimum) && (pressure_dbar

标签: matlab variables for-loop if-statement vector


【解决方案1】:

该错误可能是由于从未到达循环内部,因此从未在函数内部实际定义newDatenewpH。发生这种情况是因为您实际上并没有使用 ij 索引来访问 pressure_dbar单个元素,而是每次都在比较整个数组一些false 值和if 语句将始终评估为假。

应该是这样的

if (ge(pressure_dbar(i), minimum) && lt(pressure_dbar(i), maximum))

此外,您根本不会将内部循环的结果存储到数组中,因为您每次都会覆盖 newpHnewDate 的值。其次,你最好只使用逻辑索引来生成newDatenewPH

function [newDate, newpH] = oceanpHdepth(date, pH, pressure_dbar, minimum, maximum)
    mask = pressure_dbar >= minimum & pressure_dbar < maximum;
    newDate = date(mask);
    newpH = pH(mask);
end

【讨论】:

  • 这真的很棒,我以前从未使用过面具。但我实际上想这样做,以便日期和相应的 pH 值都在最小值和最大值范围内。目前,这只是打印出与我的初始向量相同数量的值。有没有办法同时做?
  • @btoohey 在您的初始代码中,您出于某种原因比较了pressure_dbar。我会用你提到的代码更新它
  • 嗯,我确实想比较一下。抱歉,我没有很好地解释这一点。你的代码对我来说似乎应该适用于我想要的,但它实际上并没有从初始向量中删除任何值。当相应的 pressure_dbar 值在最小值和最大值之间时,我只想将向量中的日期和 pH 数据转移到一个新向量中,这就是您的代码所做的。所以我不确定这个问题。非常感谢您的回复,但是。
  • 好吧,那么我会恢复它,问题是所有pressure_dbar必须在范围内。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2013-09-27
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多