我正在编写一个需要重复生成随机数的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次,该函数也只能评估一次。为什么这个函数只评估一次,尽管反复调用它,更重要的是,如何在每次循环迭代时调用它?
答案 0 :(得分:4)
通过
调用该函数x = problemtester(randgen)
MATLAB将首先评估randgen
,因为这是一个函数(并且可以在没有任何参数的情况下调用)。那时,打印HELLO WORLD
。然后将该函数调用的返回值传递给problemtester
,将{em>一个值保存1000次到arr
并返回。
要让problemtester
调用函数 randgen
,您必须提供function handle,这是MATLAB等效的函数指针。
x = problemtester(@randgen)
这会打印HELLO WORLD
一千次,并返回一个漂亮的随机向量。