function - 如何在 Octave 中定义一个带有参数的函数?
问题描述
我正在尝试使用预定义的变量定义一个函数,而 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 中的“命令行函数”具有词法范围,但事实并非如此。
如果所有这些都在一个函数中,并且您定义了一个嵌套函数,那么它将按您的预期工作。但是像这样的“命令行函数”被视为在自己的文件中,并且不知道定义它们的工作空间。
在这种特殊情况下,由于您的函数实际上是单行的,因此您可以通过将其设置为函数句柄来获得所需的效果,这“确实”捕获了本地工作空间。即这将工作
q = 5;
tointegrate = @(x) 2 * q * sin(x);
[ans, ier, nfun, err] = quad("tointegrate",-10 *q ,10*q);
但是请注意,“q”将具有捕获时的值。即如果你动态更新q,它的值不会在函数句柄中更新。
否则,对于更复杂的功能,解决方案实际上是将其作为参数传递(或将其作为全局访问等)。
推荐阅读
- python - 向熊猫数据框添加和增加分钟数
- mysql - Is SQL Inner Join the correct approach?
- r - ANOVA 表,每个处理 R 的观察次数不同
- xml-parsing - 如何更新文件中的 XML 字符串?
- python-3.x - 如何使用一键python打开或关闭所有复选按钮
- php - 使用带有 wordpress 的查询“jeditable”来更新表
- bison - `ss` 在哪里设置 flex 输入以来自命令行参数?
- android - 如何进一步测试我的 Gdx-pay 实施?
- javascript - 从 php jquery Ajax 获取 Json
- xaml - Xamarin 表单 ScrollView 在下方留下一大片空白区域