我做了以下函数处理程序:
fhapprox1 = @(x, y) sum ([1:x] .^ y)
使用fhapprox1(3,5)
等参数调用时,此方法正常。但是,将此函数传递给ezmesh
(使用ezmesh(fhapprox1)
)时,我收到以下错误:
error: operator .^: nonconformant arguments (op1 is 1x0, op2 is 60x60)
这里发生了什么?我怎样才能重写这个以获得我期待的3d图形?
答案 0 :(得分:2)
这是因为您的功能仅用于处理x
和y
的单个值。 ezmesh
使用坐标网格,x
和y
实际上是使用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])