在 Octave 中运行包含本地函数的简单脚本时出错

2024-03-11

我的文件 testtest.m 如下所示:

pluse(1, 2)
function retval = pluse(input1, input2)
retval = input1 + input2;
endfunction

然后我得到:

error: 'pluse' undefined near line 1 column 1
error: called from
    testtest at line 1 column 1

为什么我会收到此错误?


为了正确回答你的问题,我需要指出两点:

  1. 在 Octave 和 Matlab 中创建函数的规范方法是将其放置在同名的专用文件中,并以函数声明。其推论是,路径中以函数声明开头的任何文件都会在启动时被检测到,并作为可调用函数提供给用户。

  2. Octave 多年来一直支持“on-the-go”函数定义(实际上还支持随后将此类“on-the-go”函数“导出”到文件); matlab 最近才包含“on-the-go”功能(我相信是 2016b?),并且选择以与 Octave 略有不同的方式实现此功能(大概是为了保持 Octave 的警惕?:p)

Octave 的实现实际上直接遵循该语言的规则。任何以以下语句开头的文件isn't“函数声明”被视为脚本,即一系列独立语句。因此无害的1在脚本的开头,它是一个简单的“非函数声明”语句,但实际上它可以是任何东西。然后,脚本可以根据需要拥有任意数量的“即时”函数定义。对于在“on-the-go”上下文中使用函数的语句,显然需要首先定义该函数。这遵循以下基本原则:与函数相比,脚本有效地表示一组简单的语句,这些语句按顺序运行,无需任何预处理,并且人们可以简单地将这些命令复制/粘贴到它们的脚本中或从它们的脚本中复制/粘贴。终端并期望它们运行。

Matlab 最近的实现有效地打破了这种功能/范式。要明白我的意思,请将上面的代码复制粘贴到新的终端中(或突出显示然后按 F9)并观察它的崩溃。脚本不再可复制/粘贴,但假设 matlab 将预读并加载任何函数定义first, and then返回并尝试运行剩余的命令;换句话说,Matlab 现在对待脚本就像对待它的函数一样。请注意,matlab 仍然需要一个以非函数声明语句开头的脚本,因此实际上该位与需要以“1”开头的八度音程相同。唯一改变的是这种预先加载“on-the-go”函数的前瞻行为,我认为这在脚本上下文中不一定是一件好事。

我认为 Octave 的方法更有意义,尽管您在(无意中)将脚本视为有效而不是脚本时指出了 matlab 的便利性。哪一个一开始就不应该做。如果您需要前瞻功能和嵌套,您确实应该编写一个适当的函数并首先提供相关的作用域上下文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Octave 中运行包含本地函数的简单脚本时出错 的相关文章

  • 在 Octave 中导入 Java 类

    我一直很难弄清楚如何做到这一点 从八度网站 似乎java类是通过类路径找到的 这个堆栈溢出答案表示 静态java路径 是 动态java路径 但我不确定如何设置静态 java 路径 在我感兴趣的特定情况下 我尝试将 javaplex 包与 O
  • 在 C 中调用 GNU Octave 函数?

    我想使用矩阵代数和优化 我已经测试了不同的矩阵代数 C 和 C 库 但这些库的问题是它们不能像 GNU Octave 那样处理垃圾数据 C 和 C 中的垃圾数据会降低到 e 8 但在 GNU Octave 中 它将降低到 e 17 如果您计
  • Octave信号包安装

    我使用的是 Ubuntu 16 04 目前使用 Octave 作为 Matlab 的倒数进行信号处理 一切都很好 直到我需要使用medfilt1函数来获取中位数 Octave 生成 了一个错误报告 指出我的系统上未安装信号包 浏览了一下后我
  • Octave 在 mac osx 上安装包失败(分段错误)

    我正在尝试将通用包 general 1 3 4 tar gz 安装到octave 3 8 0 我使用的是 mac osx Yosemite 我遇到分段错误 无论我尝试安装哪个包 例如singal 都会发生这种情况 我安装了 xcode 和命
  • 在 Octave 中将矩阵写入文本文件的最快方法是什么?

    我有一个大矩阵 2e6 x 3 我必须将其写入文本文件 dlmwrite大约需要230s才能完成此任务 根据您的经验 将大型矩阵写入文本文件的最快方法是什么 以下内容适用于 MATLAB 但我建议您在 Octave 中尝试 首先 如果可以的
  • Octave 中的折叠功能

    Octave 中的一维向量是否有折叠 减少 聚合等 的标准实现 如果没有 有没有办法在不使用循环语句的情况下表达折叠 The miscellaneous http octave sourceforge net miscellaneous i
  • 如何让 Octave 默认使用“gnuplot”而不是“fltk”?

    我在 Ubuntu 13 10 上使用 Octave 3 8 而图形的 fltk 效果不佳 所以我总是通过命令切换到 gnuplot graphics toolkit gnuplot 如何配置 Octave 默认使用 gnuplot 您将命
  • eig(X, 'nobalance') 的八度等效值是多少

    我试图找到马尔可夫链的平衡分布 这意味着找到代表它的转移矩阵的特征值 但是 eig函数自动标准化它返回的特征向量 在MatLab中有一个标志你可以传递给函数停止这种行为 eig X 不平衡 其中 X 是矩阵 看http www mathwo
  • 使用 Octave 绘图时出现问题

    我刚刚开始使用 Octave 当我启动八度并尝试绘制某些内容时 绘图有效 但我多次重复收到以下警告 warning ft render unable to load appropriate font warning ft render in
  • 在 FastCGI 和 Octave 中重新定义标准输出

    我正在努力在 Ubuntu Linux 中使用 C C 在 FastCGI 会话中实现 Octave 解释器 我遇到的问题是 FCGI 重定向stdout to FCGI 标准输出 但预编译的 Octave 头文件仍然使用正常的stdout
  • Octave 字体配置错误

    我按照给出的说明通过 Homebrew 安装了 Octavehere http jatinganhotra com blog 2014 01 21 installing octave on os x 10 dot 9 mavericks 当
  • 如何访问矩阵的对角线并更改值?

    我有 8x8 矩阵 其中有 15 条对角线 左上角 对角线 1 和下角 右角 对角线 15 我想将特定的对角线集清零 例如 9 10 11 12 13 14 15 或 5 6 7 8 9 10 11 12 13 14 15 有人请给我解决方
  • 如何检查变量是否在 Octave 中定义?

    当编写加载数据的脚本时 每次等待它加载都是浪费时间 如何检查变量是否已定义 您可以使用existOctave 中的函数来完成这项工作 它可用于检查给定名称作为变量 内置函数 文件或目录是否存在 在您的情况下 要检查变量是否存在 您可以使用如
  • 如何以八度增加命令窗口的字体大小

    我试图弄清楚如何增加命令窗口文本 我想通了legend legend fontsize 10 Low fontsize 10 Medium fontsize 10 High 我尝试做同样的事情 但是command command windo
  • Octave无法安装图像采集包

    根据相关的维基页面 http wiki octave org Image acquisition package http wiki octave org Image acquisition package 安装您输入的图像采集包 pkg
  • 无法在 Octave 3.8 Ubuntu 中安装 Octave-forge 其他包

    我是 Octave 的新手 尝试安装 杂项 包以使用 GNU 单元 安装失败 我试过 apt get 安装八度杂项 deb 软件包已安装 但未在 Octave 3 8 中列出 通过 gt gt pkg list 然后我尝试 gt pkg i
  • 修复了 Octave urlread 导致无法使用给定 CA 证书对对等证书进行身份验证的问题

    Question 如何修复 不是解决方法 Octave 假设 libcurl 与 Octave 捆绑 urlread 导致无法使用给定的 CA 证书对对等证书进行身份验证 读过pkg 在 Windows 中从 forge 安装 http o
  • 为什么 Octave、R、Numpy 和 LAPACK 在同一矩阵上产生不同的 SVD 结果?

    我使用 Octave 和 R 通过一个简单的矩阵来计算 SVD 并得到两个不同的答案 代码如下 R gt a lt matrix c 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0
  • 从 Octave 导出的图中具有透明背景

    我在 Win 10 下使用便携式 Octave 5 1 0 我的意思是写一个具有透明背景的 png 绘图 免责声明 这个问题与下面链接的两个问题类似 我选择了提出当前不同的问题 https meta stackoverflow com qu
  • 作为动画的八度情节点

    我有以下八度脚本 TOTAL POINTS 100 figure 1 for i 1 TOTAL POINTS randX rand 1 randY rand 1 scatter randX randY hold on endfor 当我运

随机推荐