我正在尝试使用预定义变量定义函数,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
如何解决此错误?
您期望八度中的“命令行功能”具有词法范围,但事实并非如此。
如果所有这些都在一个函数内部,并且您定义了一个嵌套函数,它将按预期工作。但是像这样的“命令行功能”被当作它们在自己的文件中一样,并且不知道在其中定义它们的工作空间。
在这种情况下,由于您的函数实际上是单行的,因此您可以通过将其变为函数句柄来获得所需的效果,它“捕获”了本地工作空间。即这将工作
q = 5;
tointegrate = @(x) 2 * q * sin(x);
[ans, ier, nfun, err] = quad("tointegrate",-10 *q ,10*q);
但是,请注意,'q'将具有捕获时的值。即如果动态更新q,则其值将不会在函数句柄中更新。
否则,对于更复杂的功能,解决方案实际上是将其作为参数传递(或以全局方式访问它,等等)。>>
您可以通过将q
作为函数的参数来解决此问题,然后创建一个匿名函数来调用quad
,如下所示: