难以找到错误:矩阵维度必须一致

时间:2017-08-29 09:51:52

标签: matlab error-handling coding-style logic

我的目标是将此函数调用到pso代码中以实现最小化。 实际上我将此代码调用到另一个程序(mfile),这里

 v=0.1*x0; % initial velocity
 for i=1:n
 f0(i,1)=ofun(x0(i,:)); 
end

所以我应该怎么做,任何人都可以给我写一个代码,所以我可以删除这个问题。我的目标是使用ITEA代码最小化错误,我试图做,我试图找到每次代码运行时,e_t有最后更新的值,而不是e_t = 0.001。 我没有e_t。如果我要初始化它,它将保持不变,但我需要在代码中更改其值。

其次,我收到此错误

  

使用时出错。*矩阵尺寸必须一致。

     

ofun(第10行)出错,f = sum(t'。* abs(e_t)* dt);

function f=ofun(x)
    Kp= x(1);
    Ki= x(2);
    e_t;
    d=0.001;
    I_ref=-1.1:d:1;
    dt = 0.01;
    t = 0:dt:1;
    e_t= I_ref - (Kp.*e_t +Ki.*sum(t'.*abs(e_t)*dt));
    f = sum(t'.*abs(e_t)*dt); % line 10

我想为以下方程编写代码

error= I_ref - (kp * error + ki*(integration of error));

我想设置I-ref=-1.1-1.1;

2 个答案:

答案 0 :(得分:1)

此处e_t的大小与I_ref

相同
e_t= I_ref - (Kp.*e_t +Ki.*sum(t'.*abs(e_t)*dt));

然后你想把它乘以t

f = sum(t'.*abs(e_t)*dt);

tI_ref的大小不同。 t的长度为101,I_ref的长度为2101。

答案 1 :(得分:1)

"矩阵尺寸必须同意"是第10行中出现的错误消息,因为矩阵t不能与e_t元素相乘。无论哪个矩阵较小,我都可以在其余部分添加一个矩阵,以便结果矩阵仍能够填充。你为什么要转置矩阵?祝你的项目好运!

    if(gestureRecognize.state == UIGestureRecognizerState.Ended) {
       let currentPivot = geometryNode.pivot
       let currentPosition = geometryNode.position
       let changePivot = SCNMatrix4Invert(SCNMatrix4MakeRotation(geometryNode.rotation.w, geometryNode.rotation.x, geometryNode.rotation.y, geometryNode.rotation.z))

       geometryNode.pivot = SCNMatrix4Mult(changePivot, currentPivot)
       geometryNode.transform = SCNMatrix4Identity
       geometryNode.position = currentPosition
    }