【发布时间】:2012-06-15 22:11:42
【问题描述】:
我有一个函数可以计算一个数字数组(randparam),我想将它逐个元素地输入到另一个进行模拟的函数中。
例如
function [randparam] = arraycode
code
randparam = results of code
% randparam is now a 1x1001 vector.
end
接下来我想将 randparam 1 by 1 输入到我的模拟函数中
function simulation
x = constant + constant * randparam + constant
return
end
让我觉得困难的是因为模拟函数中的return命令,它只计算上面方程x的一步,将结果返回到另一个函数,调用它积分器,然后积分器函数会调用模拟再次使用函数来计算 x。
所以积分函数可能看起来像
function integrator (x)
y = simulation(x) * 5
u = y+10
yy = simulation(x) * 10 + u
end
如您所见,积分函数调用模拟函数两次。这给我带来了两个问题:
-
如果我在模拟函数中创建一个 for 循环,在该循环中我使用类似的方式逐个元素地输入:
对于 i = 1:100
x = 常数 + 常数 * randparam(i) + 常数
返回
结束
然后每次我的积分器函数再次调用我的模拟函数时,我的 for 循环都会从 1 重新开始。
2.如果我以某种方式将 i 保留在我的基础工作区中,以便我的模拟函数中的 for 循环知道从 1 开始,那么我的 y 和 yy 函数将具有不同的 x 输入,因为只要它会第二次为 yy 打电话,那么由于 y 的电话,我现在是 i+1。
在这种情况下有没有办法避免 for 循环?第二个问题的一个潜在解决方案是复制脚本但使用不同的名称,并让我的 for 循环使用不同的变量,但这似乎效率很低。
希望我说清楚了。
谢谢。
【问题讨论】:
标签: function matlab for-loop scope