Vestasive 2023-05-04 14:21 采纳率: 33.3%
浏览 44

matlab fmincon MPC

代码思路是用MPC函数将P和S关联起来,P=etaS,MPC函数里eta可用S求解出 然后abs(P-98)最小为优化目标,优化对象仅为S(j+1,1)这一个矩阵元素的值 然后将这个优化后的值赋值给原矩阵中S(j+1,)这个位置 重复优化n次就得到一个优化过的n1的S的矩阵,所以我一开始思路里fmincon输出的也确实是一个标量 想的是将n次优化的输出标量填入这个S矩阵中得到最后的矩阵 不是直接输出给我这个矩阵 可似乎代码实现的是fmincon输出的S(j+1,1)直接整个取代了S,造成输入MPC后计算中数组索引超出边界,求问各位这种情况该怎么做啊

img

img

img

  • 写回答

2条回答 默认 最新

  • 风雨同流 2023-05-04 16:18
    关注

    根据您的描述,似乎是在将fmincon输出的优化结果直接赋值给了S矩阵(例如 S(j+1,1) = fmincon(…) ),导致索引超出边界。建议在赋值给S矩阵之前,先将fmincon输出的优化结果保存到一个临时变量中,然后再使用该变量来赋值给S矩阵的相应位置。例如:

    temp = fmincon(…);
    S(j+1,1) = temp;

    这样可以确保不会因为直接将fmincon输出结果赋值给S矩阵而导致索引超出边界的问题。另外,如果需要将n次优化的结果填入S矩阵中,可以使用一个循环来实现,例如:

    for i = 1:n
    temp = fmincon(…);
    S(j+i,1) = temp;
    end

    这样可以将n次优化的结果依次填入S矩阵中,而不会出现索引超出边界的问题。希望对您有帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 5月4日