Octave的ezmesh函数中的求幂问题

时间:2014-10-16 01:10:49

标签: matlab operators octave

我做了以下函数处理程序:

fhapprox1 = @(x, y) sum ([1:x] .^ y)

使用fhapprox1(3,5)等参数调用时,此方法正常。但是,将此函数传递给ezmesh(使用ezmesh(fhapprox1))时,我收到以下错误:

error: operator .^: nonconformant arguments (op1 is 1x0, op2 is 60x60)

这里发生了什么?我怎样才能重写这个以获得我期待的3d图形?

1 个答案:

答案 0 :(得分:2)

这是因为您的功能仅用于处理xy的单个值。 ezmesh使用坐标网格,xy实际上是使用ezmesh时的二维矩阵。尝试以这种方式调用ezmesh时会出现未定义的行为。此外,ezmesh默认情况下会在-2*pi <= (x,y) <= 2*pi之间绘制。

由于x可以是< 0,当1:x为否定时执行x将为您提供一个空数组,这就是您收到该错误的原因。您需要重新思考如何定义函数,以便它采用坐标网格并输出您想要的值。我无法提供任何进一步的信息,因为我不知道如何为x的负值定义函数。获得此信息后,我会更新我的回答。


修改

我们可以修改您的fhapprox1函数,以便它可以接收值网格。除了执行嵌套的for循环之外,我现在无法想出一种方法来渲染此代码,但让我们先尝试一些工作。基本上,制作一个名为fhapprox1.m的单独M文件。之后,将其放入文件中:

function [Z] = fhapprox1(X, Y)

Z = zeros(size(X));

for x = 1 : size(X,1)
    for y = 1 : size(X,2)
        Z(x,y) = sum((1:X(x,y)) .^ Y(x,y));
    end
end

上面的代码将执行您对(x,y)的单个值所做的操作,但现在它可以采用(x,y)坐标的网格。通过这样做,然后按照您在评论中指定的方式调用ezmesh,这就是我们得到的:

ezmesh(@fhapprox1, [1,1000,1,3])

enter image description here