作为参数传递的函数不会多次评估matlab

时间:2016-07-13 15:05:52

标签: matlab function loops random

我正在编写一个需要重复生成随机数的Matlab脚本。我遇到了一个问题,如果我将随机生成函数作为参数传递给另一个函数,那么在它传递给它的函数中,它只会计算一次。

以下是一些示例代码:

这是我的档案randgen.m

function number = randgen()
    'HELLO WORLD'
    number = rand(1);
end

这是我的档案problemtester.m

function arr = problemtester(rgen)
firstrand = rgen();
for i = 1:1000
    arr(i) = rgen();
end

当我运行命令

x = problemtester(randgen);

HELLO WORLD打印一次,x填充1000份相同的随机数,因此即使循环运行1000次,该函数也只能评估一次。为什么这个函数只评估一次,尽管反复调用它,更重要的是,如何在每次循环迭代时调用它?

1 个答案:

答案 0 :(得分:4)

通过

调用该函数
x = problemtester(randgen)

MATLAB将首先评估randgen,因为这是一个函数(并且可以在没有任何参数的情况下调用)。那时,打印HELLO WORLD。然后将该函数调用的返回值传递给problemtester,将{em>一个值保存1000次到arr并返回。

要让problemtester调用函数 randgen,您必须提供function handle,这是MATLAB等效的函数指针。

x = problemtester(@randgen)

这会打印HELLO WORLD一千次,并返回一个漂亮的随机向量。

相关问题