我希望fsolve每次计算不同uc的输出(每次增加uc 0.001)。来自fsolve的每个输出应该分别发送到simulink模型。所以我设置一个循环这样做,但我相信在当前的星座(如果它会工作)将只计算1000个不同的值?有没有办法单独发送价值?
如果没有,我该如何创建参数uc。从0到1000说?我试过uc = 0:0.001:1000,但是再一次,这种维度似乎并不合适。
如何创建一个函数,每次调用函数时都会获取向量/矩阵的下一个元素?
最好的问候
答案 0 :(得分:0)
迭代一组值并将它们逐个地输入到函数的一系列评估中的一般方法遵循以下形式:
for ix = 0:0.1:10
func(arg1, arg2, ix)
end
查看对func
的每次通话如何包含ix
的当前值?在第一次迭代ix==0
上,在下一个ix==0.1
上等等。您应该能够根据您的需求进行调整;在你的代码中,循环索引(你称之为i
)不在循环中使用。
现在有些未经要求批评你的代码了。行
x0=[1,1,1];
y=x0(1);
u=x0(2);
yc=x0(3);
options=optimset('Display','off');
不要随着循环迭代的推进而改变;无论循环迭代器(代码中为i
)的值是什么,它们总是返回相同的值。在循环中包含它们毫无意义。
如果Matlab决定在每次迭代时计算它们,那么将它们留在循环中甚至可能浪费很多时间。我不确定Matlab在这种情况下做了什么,它可能足够聪明,可以确定这些值在每次迭代时都不会改变,但即使这样做也是不好的编程习惯以这种方式编写代码;提升常量表达式,例如这些循环。
从您发布的片段中不清楚为什么您完全定义了y
,u
和yc
,它们并未在任何地方使用;也许它们会用在你程序的其他部分。