我有一个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
无济于事。
编辑:好的,有时我也会收到断点错误。
答案 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)
中选择一个值,以防有多个值。
(这个,或者魔法仙女在你的秘密功能上使用了错误的二进制尘埃。如果我们甚至不知道它输出什么,真的很难调试黑盒子。)