脚本和命令行中的函数调用获得不同的结果

时间:2015-10-08 18:34:49

标签: matlab function structure

我有一个matlab函数tutorial_main(xalpha),它返回一个带有2个条目的struc元素(由于版权问题,我无法为您提供函数:()

每当我从命令行调用该函数时 fit_t = []; alpha = 0.01; fit_t = [fit_t tutorial_main(alpha)];

它运作得很好。

每当我在循环内的脚本中执行相同操作时,我都会收到错误:

fit_t = []
for alpha = 0.01:0.01:1
  tic;
  fit_t =  [fit_t tutorial_main(alpha)];
  time = toc;
end

错误是:

Improper assignment with rectangular empty matrix.

Error in tutorial_main (line 286)
    ML(1) = myvect(p{1}(max(marglik{1})==marglik{1}));

Error in ass5 (line 14)
    fit_t =  [fit_t tutorial_main(alpha)];

有时会运行几次迭代但是在第三次给我之后

In an assignment  A(I) = B, the number of elements in B and I must be the 

Error in tutorial_main (line 286)
    ML(1) = myvect(p{1}(max(marglik{1})==marglik{1}));

Error in ass5 (line 14)
    fit_t =  [fit_t tutorial_main(alpha)];same.

我真的不明白为什么会收到此错误消息。在两种情况下,该函数都应以相同的方式调用。之前运行clear all不会改变任何内容。

现在最奇怪的部分: 当我在time = toc设置断点,并在每次循环后手动继续时,我不会收到错误。删除tic/toc无济于事。 编辑:好的,有时我也会收到断点错误。

1 个答案:

答案 0 :(得分:2)

你是否肯定你的函数返回一个标量或至少一个行向量?

不同之处在于fit_t = [fit_t retval];如果最初fit_t=[]总是正常,但如果它已经有标量/行向量值,那么除非retval(返回值),否则会遇到问题是标量/行向量。

您的错误In an assignment A(I) = B, the...也表明了这一点:您的右侧可能是ML(1) = myvect()...中的向量,很可能marglik{1}没有唯一的最大值,因此{ {1}}返回一个包含多个非零的逻辑向量,因此max(marglik{1})==marglik{1}是一个向量,它与左侧的p{1}(max...)发生碰撞。您需要从ML(1)中选择一个值,以防有多个值。

(这个,或者魔法仙女在你的秘密功能上使用了错误的二进制尘埃。如果我们甚至不知道它输出什么,真的很难调试黑盒子。)