将MATLAB文件转换为Octave

4

我有一系列在MATLAB上编写的实验,但最近我们尝试使用Octave运行它们。我知道它们大部分兼容,但我遇到了一些问题,而所有我找到的在线FAQ或说明都没有解决这些问题。问题有点复杂,因为有多个相互作用的.m文件;然而,现在我只关注主程序。无论如何,当我尝试通过Octave运行该文件(MLP.m)时,在终端窗口中出现以下错误:

error: dir: expecting directory or filename to be a char array
error: called from:
error: /Applications/Octave.app/Contents/Resources/share/octave/3.2.3/m/miscellaneous/dir.m at line 128, column 5
error: /Applications/MATLAB_R2008a/toolbox/psychoacoustics/MLParameters.m at line 86, column 7
error: /Applications/MATLAB_R2008a/toolbox/psychoacoustics/MLP.m at line 9, column 3

它所引用的行如下:
1)
d = dir([cd myslash 'Experiments_MLP'  myslash '*.m']);

2)

s = MLParameters; 

这些代码行与Octave不兼容吗?我在网上找不到任何表明这些代码无法运行的信息。
然后,终端窗口会给我一堆无用的输出:
dyld: Library not loaded: /usr/X11/lib/libfreetype.6.dylib
  Referenced from: /usr/X11R6/lib/libfontconfig.1.dylib
  Reason: Incompatible library version: libfontconfig.1.dylib requires version 13.0.0 or later, but libfreetype.6.dylib provides version 10.0.0
dyld: Library not loaded: /usr/X11/lib/libfreetype.6.dylib
  Referenced from: /usr/X11R6/lib/libfontconfig.1.dylib
  Reason: Incompatible library version: libfontconfig.1.dylib requires version 13.0.0 or later, but libfreetype.6.dylib provides version 10.0.0
/Applications/Gnuplot.app/Contents/Resources/bin/gnuplot: line 71:  1077 Trace/BPT trap          GNUTERM="${GNUTERM}" GNUPLOT_HOME="${GNUPLOT_HOME}" PATH="${PATH}"     DYLD_LIBRARY_PATH="${DYLD_LIBRARY_PATH}" HOME="${HOME}" GNUHELP="${GNUHELP}" DYLD_FRAMEWORK_PATH="${DYLD_FRAMEWORK_PATH}" GNUPLOT_PS_DIR="${GNUPLOT_PS_DIR}" DISPLAY="${DISPLAY}" GNUPLOT_DRIVER_DIR="${GNUPLOT_DRIVER_DIR}" "${ROOT}/bin/gnuplot-4.2.6" "$@"
/Applications/Gnuplot.app/Contents/Resources/bin/gnuplot: line 71:  1083 Trace/BPT trap          GNUTERM="${GNUTERM}" GNUPLOT_HOME="${GNUPLOT_HOME}" PATH="${PATH}" DYLD_LIBRARY_PATH="${DYLD_LIBRARY_PATH}" HOME="${HOME}" GNUHELP="${GNUHELP}" DYLD_FRAMEWORK_PATH="${DYLD_FRAMEWORK_PATH}" GNUPLOT_PS_DIR="${GNUPLOT_PS_DIR}" DISPLAY="${DISPLAY}" GNUPLOT_DRIVER_DIR="${GNUPLOT_DRIVER_DIR}" "${ROOT}/bin/gnuplot-4.2.6" "$@"
error: you must have gnuplot installed to display graphics; if you have gnuplot installed in a non-standard location, see the 'gnuplot_binary' function

我已经安装了GNUPlot,并检查了gnuplot_binary函数,但没有得到任何答案。GNUPlot与Octave本身一起安装在我的/Applications目录中。为什么这不能工作?随GNUPlot一起提供的README文件没有指示特殊的安装目录。那么关于dyld库未加载错误呢?那是否与GNUPlot问题有关,还是其他原因?
无论如何,感谢您的帮助。

1
这些变量 cdmyslash 的内容是什么?还是像 MATLAB 中的 filesep 一样是一个函数调用吗? - Amro
cd 只是调用目录的命令。Myslash 只是一个变量,确保程序在 PC 和 Mac 上都能正常工作。它被设置为在 PC 上使用 '',在 Mac 上使用 '/' 的目录路径。 - Billy
cd实际上是一个内置函数(存在于MATLAB和Octave中),用于更改当前目录,并且不返回任何内容。DIR期望其参数为字符串。 - Amro
那么是'myslash'引起了问题吗?我需要将这个:'[cd myslash 'Experiments_MLP' myslash '*.m']'更改为普通的目录路径,以便它被视为字符串吗? - Billy
2个回答

3

1

针对您的第一个错误,通过示例更容易解释:

dirName = '/some/path';                       %# base directory
filesPath = fullfile(dirName, 'MLP', '*.m');  %# full path string

d = dir(filesPath);                           %# expand/enumerate files
for i=1:numel(d)
    disp( d(i).name )
end

你也可以使用字符串拼接自己构建路径:

%# '/some/path/MLP/*.m'
filesPath = [dirName filesep 'MLP' filesep '*.m'];

以上代码适用于 MATLAB 和 Octave。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接