【问题标题】:Accept an array with n elements and return them as an array - Matlab接受具有 n 个元素的数组并将它们作为数组返回 - Matlab
【发布时间】:2016-11-05 11:22:55
【问题描述】:

我想编写一个函数,它接受一个包含任意数量值的数组,并在一个新数组中返回它们更改后的值。

function zArray = y(xArray)
    zArray = [];
    for x = 1:size(xArray,2)
        if x >= -2 && x < -1
            z = ln(x + 2);
        elseif x >= -1 && x < 0
            z = (x + 1).^2;
        elseif x >= 0 && x <= 2
            z = (x + 1)/(x.^2 + 1);
        else 
            z = -10
        end
        zArray(end + 1) = z;
    end
end

然后我调用函数:

[z1, z2, z3] = y([0, 1, -1])

这给了我以下输出和消息:

z1 =

    1.00000    0.60000  -10.00000

error: element number 2 undefined in return list

我是 Matlab 新手,不确定循环和数组的 Matlab 是如何工作的。如果我理解正确,我没有将更改的值正确添加到应该保存输出值的数组中,因此无法以这种方式读取它们,但如果我没记错的话,array(end + 1) = z 正在附加元素 z到数组的末尾。

我是否犯了不止一个错误?请指出其中任何一个,因为我无法理解 Matlab 语法,即使我确实知道如何用其他一些语言编程。

【问题讨论】:

  • 您想从 z 数组的后面添加更改的值吗?
  • 您的第一个和第二个 ifelseif 语句在这里是多余的。如果您解释该怎么做,我可以帮助您
  • 我想在最后添加它们,所以它们的顺序与更改它们之前的顺序相同。我想从[x1, x2, ..., xn]实现输出[f(x1), f(x2), ..., f(xn)],其中f是区间函数。
  • 那你就不用从头添加了...

标签: arrays matlab


【解决方案1】:

我认为您想要以下内容,但您对语法感到困惑:

function zArray = y(xArray)
zArray = zeros(size(xArray));

for x = 1:size(xArray,2)
    xVal = xArray(x);
    if xVal >= -2 && xVal < -1
        zArray(x) = log(xVal + 2);
    elseif xVal >= -1 && xVal < 0
        zArray(x) = (xVal + 1).^2;
    elseif xVal >= 0 && xVal <= 2
        zArray(x) = (xVal + 1)/(xVal.^2 + 1);
    else
        zArray(x) = -10;
    end
end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    相关资源
    最近更新 更多