求解这个索引不能超过1的怎么改



如上,然后data2是一个150行1列的数组,大小差不多都在130-145之间
首先抱歉,因为可能并不能帮到您。
其次,报错的原因在于对fmincon的错误使用,代码
S(j+1,1) = fmincon(@(S) MPC(S, j), S(j+1,1), [], [], [], [], 96, 300, nonlinconstr, options);
中,S(j+1,1)是一个需要带入到函数MPC(S,j)中作为S的初始值的值。
将初始值S(j+1,1)带入函数MPC后,MPC的输入变量S为一个1x1的标量,因此,在第50行中,S(i+1,-14)为S(2,-14)超出索引。同时,serendipity★ 也指出了此处应该是S(i+1,1)。
以上,是对报错的原因分析。
除了这个问题,您的代码还有一些问题。由于基本工作区的中变量一般不会带入到函数工作区中,函数MPC中没有定义变量 r和eta,直接调用同样会报错。
此外,您应当注意到,fmincon只能优化返回标量的函数。您的函数MPC返回向量,不能使用fmincon进行优化。
最后,不建议您使用matlab自带的优化函数进行模型预测控制。
关于MPC,状态变量和控制变量最好还是区分开来。
以上,希望对您有所帮助。