我正在编写一个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 次,该函数也只能计算一次次。为什么这个函数只计算一次,尽管重复调用它,更重要的是,如何让它在每次循环迭代时调用?
最佳答案
通过调用函数
x = problemtester(randgen)
MATLAB 将首先计算 randgen
,因为这是一个函数(并且可以在没有任何参数的情况下调用)。此时,会打印 HELLO WORLD
。然后,该函数调用的返回值被传递给 problemtester
,后者将这个 one 值保存到 arr
中 1000 次并返回。
要使problemtester
调用函数randgen
,您必须提供function handle ,这相当于 MATLAB 中的函数指针。
x = problemtester(@randgen)
这会打印 HELLO WORLD
一千次,并返回一个很好的随机向量。
关于matlab - 作为参数传递的函数不会计算多次 matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38355424/