MATLAB中的匿名函数损坏。 '@ sf%'是什么意思?

时间:2014-02-21 21:11:05

标签: matlab anonymous-function

我被MATLAB中的分段错误所困扰。 它似乎是由一个从mat文件加载的匿名函数引起的。 原始的匿名函数句柄是:

@(x)scaledNlfun(x,@logexp1,1e3) 

但是当它被加载时,它变为:

@sf%1@(x)scaledNlfun(x,@logexp1,1e3)

似乎没问题,当我在命令行中调用它时,它会在函数中创建分段错误(或分段违例)。不是函数调用本身,而是之后的几行。在调试模式下,如果我单步执行该语句,也可以。

堆栈跟踪显示了一堆

[  0] 0x00002b20b97baba4 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04127652

它出现在Linux 2.6.18-371.3.1.el5 SMP上的MATLAB 2012a和2013a上。

此函数句柄使用' - v7.3'选项保存在parfor循环中,因为包含句柄的结构太大了。如果我在加载mat文件后替换匿名函数,一切正常,所以我认为matlab load函数有错误。

不幸的是,我无法创建一个重现错误的最小示例。我尝试使用'-v7.3'保存parfor中的匿名函数句柄,但没有其他复杂的数据结构,它似乎工作正常。但我有80个mat文件可以可靠地崩溃matlab(其中许多超过1GB)。

无论如何,有人知道“@ sf%”是什么意思吗? (这不是州流工具箱)

1 个答案:

答案 0 :(得分:0)

问题的核心似乎是@sf%1@您希望@看到sf%1@,我可以想到一些可能性:

  1. 在原始@
  2. 之后插入 {}
  3. 以某种方式@sf%1@替换代替原始@
  4. 以某种方式@sf%1附加之前原始@
  5. 我实际上打赌第三个,但这是我能想到的最合理的情况,可能会导致这个问题:

    1. 也许有一个看不见的炭?
    2. 也许是某种奇怪的角色转换?
    3. 可能是两个东西存储在变量而不是一个变量中的情况。也许类似于@s@sf以及一些分隔字符。
    4. 总而言之,这并不能解释为什么如果你在控制台中运行整个程序它会顺利,但也许你只是运行它的一部分。在这种情况下,这些可能是需要注意的事情。