如何在Octave中定义带有参数的函数?

问题描述 投票:1回答:2

我正在尝试使用预定义变量定义函数,Octave说未定义该变量。我正在尝试在Octave中运行以下代码,

q = 5;
function w = tointegrate(x)
  w = 2 * q * sin(x);
endfunction
[ans, ier, nfun, err] = quad("tointegrate", -10*q, 10*q);
ans

八度给出错误

error: 'q' undefined near line 3 column 10
error: quad: evaluation of user-supplied function failed

如何解决此错误?

octave
2个回答
4
投票

您期望八度中的“命令行功能”具有词法范围,但事实并非如此。

如果所有这些都在一个函数内部,并且您定义了一个嵌套函数,它将按预期工作。但是像这样的“命令行功能”被当作它们在自己的文件中一样,并且不知道在其中定义它们的工作空间。

在这种情况下,由于您的函数实际上是单行的,因此您可以通过将其变为函数句柄来获得所需的效果,它“捕获”了本地工作空间。即这将工作

q = 5;
tointegrate = @(x) 2 * q * sin(x);
[ans, ier, nfun, err] = quad("tointegrate",-10 *q ,10*q);

但是,请注意,'q'将具有捕获时的值。即如果动态更新q,则其值将不会在函数句柄中更新。

否则,对于更复杂的功能,解决方案实际上是将其作为参数传递(或以全局方式访问它,等等)。>>


0
投票

您可以通过将q作为函数的参数来解决此问题,然后创建一个匿名函数来调用quad,如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.