Index exceeds matrix dimensions. in for loop !

1 view (last 30 days)
john white
john white on 16 Jan 2021
Commented: john white on 17 Jan 2021
hi
I'm using this code to caculate the cost function but I got this error! could you help me please
function J = Cost (xi , U , Yref , Np , Ts)
%%% U = [u(i) u(i+1) u(i+Nc-1)]
A = @(x) [0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
0 0 0 (1.0e5*(cos(x(2))*(cos(x(3))*(5.6e-4*x(6)*(x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 1.0*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + (x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 1.0*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(6.3e-3*x(5) + 6.3e-3*x(6)) - 1.0*(6.8e-3*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 6.8e-3*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(x(5) + x(6)) + (0.13*x(5) + 0.13*x(6))*(0.084*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 0.084*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + 0.025*x(4)*sin(conj(x(2)))*conj(x(5)) - 0.025*x(4)*x(5)*sin(conj(x(2))) - 0.011*x(4)*cos(conj(x(2)))*sin(conj(x(3)))*conj(x(5)) + 0.011*x(4)*cos(conj(x(3)))*sin(conj(x(2)))*conj(x(5)) + 0.011*x(4)*cos(conj(x(2)))*sin(conj(x(3)))*conj(x(6)) - 0.011*x(4)*cos(conj(x(3)))*sin(conj(x(2)))*conj(x(6)) + 5.6e-4*x(4)*x(5)*cos(conj(x(2)))*sin(conj(x(3))) - 5.6e-4*x(4)*x(5)*cos(conj(x(3)))*sin(conj(x(2)))) - 1.0*sin(x(3))*(6.8e-3*x(6)*(x(4)*cos(conj(x(2)))*cos(conj(x(3))) + x(4)*sin(conj(x(2)))*sin(conj(x(3)))) + (x(4)*cos(conj(x(2)))*cos(conj(x(3))) + x(4)*sin(conj(x(2)))*sin(conj(x(3))))*(6.3e-3*x(5) + 6.3e-3*x(6)) - 1.0*(x(5) + x(6))*(5.6e-4*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 5.6e-4*x(4)*sin(conj(x(2)))*sin(conj(x(3)))) + 6.8e-3*x(4)*x(5)*cos(conj(x(2)))*cos(conj(x(3))) + 6.8e-3*x(4)*x(5)*sin(conj(x(2)))*sin(conj(x(3)))) + (0.13*x(5) + 0.13*x(6))*(0.19*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 0.19*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + 0.075*x(4)*sin(conj(x(2)))*conj(x(5)) - 0.075*x(4)*x(5)*sin(conj(x(2))) - 0.025*x(4)*cos(conj(x(2)))*sin(conj(x(3)))*conj(x(5)) + 0.025*x(4)*cos(conj(x(3)))*sin(conj(x(2)))*conj(x(5)) + 0.025*x(4)*cos(conj(x(2)))*sin(conj(x(3)))*conj(x(6)) - 0.025*x(4)*cos(conj(x(3)))*sin(conj(x(2)))*conj(x(6))) + sin(x(2))*(cos(x(3))*(6.8e-3*x(6)*(x(4)*cos(conj(x(2)))*cos(conj(x(3))) + x(4)*sin(conj(x(2)))*sin(conj(x(3)))) + (x(4)*cos(conj(x(2)))*cos(conj(x(3))) + x(4)*sin(conj(x(2)))*sin(conj(x(3))))*(6.3e-3*x(5) + 6.3e-3*x(6)) - 1.0*(x(5) + x(6))*(5.6e-4*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 5.6e-4*x(4)*sin(conj(x(2)))*sin(conj(x(3)))) + 6.8e-3*x(4)*x(5)*cos(conj(x(2)))*cos(conj(x(3))) + 6.8e-3*x(4)*x(5)*sin(conj(x(2)))*sin(conj(x(3)))) + sin(x(3))*(5.6e-4*x(6)*(x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 1.0*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + (x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 1.0*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(6.3e-3*x(5) + 6.3e-3*x(6)) - 1.0*(6.8e-3*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 6.8e-3*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(x(5) + x(6)) + (0.13*x(5) + 0.13*x(6))*(0.084*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 0.084*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + 0.025*x(4)*sin(conj(x(2)))*conj(x(5)) - 0.025*x(4)*x(5)*sin(conj(x(2))) - 0.011*x(4)*cos(conj(x(2)))*sin(conj(x(3)))*conj(x(5)) + 0.011*x(4)*cos(conj(x(3)))*sin(conj(x(2)))*conj(x(5)) + 0.011*x(4)*cos(conj(x(2)))*sin(conj(x(3)))*conj(x(6)) - 0.011*x(4)*cos(conj(x(3)))*sin(conj(x(2)))*conj(x(6)) + 5.6e-4*x(4)*x(5)*cos(conj(x(2)))*sin(conj(x(3))) - 5.6e-4*x(4)*x(5)*cos(conj(x(3)))*sin(conj(x(2)))) + 0.017*x(4)*x(5)*cos(conj(x(2))))))/(x(4)*(7.5e3*cos(conj(x(2)))*cos(x(2)) + 922.0*sin(conj(x(2)))*sin(x(2)) + 2.5e3*cos(conj(x(2)))*cos(x(2))*cos(x(3)) + 2.5e3*cos(conj(x(2)))*sin(x(2))*sin(x(3)) + 2.5e3*cos(conj(x(2)))*cos(conj(x(3)))*cos(x(2)) + 2.5e3*sin(conj(x(2)))*sin(conj(x(3)))*cos(x(2)) + 1.2e3*cos(conj(x(2)))*cos(conj(x(3)))*cos(x(2))*cos(x(3)) + 1.2e3*cos(conj(x(2)))*cos(conj(x(3)))*sin(x(2))*sin(x(3)) + 688.0*cos(conj(x(2)))*sin(conj(x(3)))*cos(x(2))*sin(x(3)) - 688.0*cos(conj(x(2)))*sin(conj(x(3)))*cos(x(3))*sin(x(2)) - 688.0*cos(conj(x(3)))*sin(conj(x(2)))*cos(x(2))*sin(x(3)) + 688.0*cos(conj(x(3)))*sin(conj(x(2)))*cos(x(3))*sin(x(2)) + 1.2e3*sin(conj(x(2)))*sin(conj(x(3)))*cos(x(2))*cos(x(3)) + 1.2e3*sin(conj(x(2)))*sin(conj(x(3)))*sin(x(2))*sin(x(3)) + 33.0)) 0 0
0 0 0 0 ((8.5e4*(1.1*cos(conj(x(2))) + 0.3*sin(x(3))*(0.65*cos(conj(x(3)))*(0.3*x(4)^2*cos(conj(x(2)))^2 + 0.3*x(5)^2) + (0.13*x(5) + 0.13*x(6))*(0.65*x(5) + 0.65*x(6)) + (0.13*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 0.13*x(4)*sin(conj(x(2)))*sin(conj(x(3))))*(0.65*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 0.65*x(4)*sin(conj(x(2)))*sin(conj(x(3)))) + 6.4*cos(conj(x(2)))*sin(conj(x(3))) - 6.4*cos(conj(x(3)))*sin(conj(x(2))) + 0.19*x(4)^2*cos(conj(x(2)))*sin(conj(x(2)))*sin(conj(x(3)))) - 1.0*(x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 1.0*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(5.6e-4*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 5.6e-4*x(4)*sin(conj(x(2)))*sin(conj(x(3)))) + (6.8e-3*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 6.8e-3*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(x(4)*cos(conj(x(2)))*cos(conj(x(3))) + x(4)*sin(conj(x(2)))*sin(conj(x(3)))) - 0.084*sin(conj(x(3)))*(0.3*x(4)^2*cos(conj(x(2)))^2 + 0.3*x(5)^2) + 0.3*cos(x(3))*(6.4*cos(conj(x(2)))*cos(conj(x(3))) - 0.65*sin(conj(x(3)))*(0.3*x(4)^2*cos(conj(x(2)))^2 + 0.3*x(5)^2) - 1.0*(0.13*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 0.13*x(4)*sin(conj(x(2)))*sin(conj(x(3))))*(0.65*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 0.65*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + 6.4*sin(conj(x(2)))*sin(conj(x(3))) + 0.19*x(4)^2*cos(conj(x(2)))*cos(conj(x(3)))*sin(conj(x(2)))) + 0.83*cos(conj(x(2)))*cos(conj(x(3))) - 1.0*(0.13*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 0.13*x(4)*sin(conj(x(2)))*sin(conj(x(3))))*(0.084*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 0.084*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + 0.83*sin(conj(x(2)))*sin(conj(x(3))) + 7.6e-3*x(4)^2*cos(conj(x(2)))*sin(conj(x(2))) + 0.025*x(4)^2*cos(conj(x(2)))*cos(conj(x(3)))*sin(conj(x(2)))))/(17.0*cos(x(3)) + 1.7e3*cos(conj(x(3)))*cos(x(3)) + 4.9e3*sin(conj(x(3)))*sin(x(3)) + 2.1e3) - (5.0e3*(25.0*cos(x(3)) + 17.0)*((6.8e-3*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 6.8e-3*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(x(4)*cos(conj(x(2)))*cos(conj(x(3))) + x(4)*sin(conj(x(2)))*sin(conj(x(3)))) - 1.0*(x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 1.0*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(5.6e-4*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 5.6e-4*x(4)*sin(conj(x(2)))*sin(conj(x(3)))) - 0.084*sin(conj(x(3)))*(0.3*x(4)^2*cos(conj(x(2)))^2 + 0.3*x(5)^2) + 0.83*cos(conj(x(2)))*cos(conj(x(3))) - 1.0*(0.13*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 0.13*x(4)*sin(conj(x(2)))*sin(conj(x(3))))*(0.084*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 0.084*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + 0.83*sin(conj(x(2)))*sin(conj(x(3))) + 0.025*x(4)^2*cos(conj(x(2)))*cos(conj(x(3)))*sin(conj(x(2)))))/(17.0*cos(x(3)) + 1.7e3*cos(conj(x(3)))*cos(x(3)) + 4.9e3*sin(conj(x(3)))*sin(x(3)) + 2.1e3))/x(5) 0
0 0 0 0 0 -((5.0e3*(25.0*cos(conj(x(3))) + 17.0)*(1.1*cos(conj(x(2))) + 0.3*sin(x(3))*(0.65*cos(conj(x(3)))*(0.3*x(4)^2*cos(conj(x(2)))^2 + 0.3*x(5)^2) + (0.13*x(5) + 0.13*x(6))*(0.65*x(5) + 0.65*x(6)) + (0.13*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 0.13*x(4)*sin(conj(x(2)))*sin(conj(x(3))))*(0.65*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 0.65*x(4)*sin(conj(x(2)))*sin(conj(x(3)))) + 6.4*cos(conj(x(2)))*sin(conj(x(3))) - 6.4*cos(conj(x(3)))*sin(conj(x(2))) + 0.19*x(4)^2*cos(conj(x(2)))*sin(conj(x(2)))*sin(conj(x(3)))) - 1.0*(x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 1.0*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(5.6e-4*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 5.6e-4*x(4)*sin(conj(x(2)))*sin(conj(x(3)))) + (6.8e-3*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 6.8e-3*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(x(4)*cos(conj(x(2)))*cos(conj(x(3))) + x(4)*sin(conj(x(2)))*sin(conj(x(3)))) - 0.084*sin(conj(x(3)))*(0.3*x(4)^2*cos(conj(x(2)))^2 + 0.3*x(5)^2) + 0.3*cos(x(3))*(6.4*cos(conj(x(2)))*cos(conj(x(3))) - 0.65*sin(conj(x(3)))*(0.3*x(4)^2*cos(conj(x(2)))^2 + 0.3*x(5)^2) - 1.0*(0.13*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 0.13*x(4)*sin(conj(x(2)))*sin(conj(x(3))))*(0.65*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 0.65*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + 6.4*sin(conj(x(2)))*sin(conj(x(3))) + 0.19*x(4)^2*cos(conj(x(2)))*cos(conj(x(3)))*sin(conj(x(2)))) + 0.83*cos(conj(x(2)))*cos(conj(x(3))) - 1.0*(0.13*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 0.13*x(4)*sin(conj(x(2)))*sin(conj(x(3))))*(0.084*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 0.084*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + 0.83*sin(conj(x(2)))*sin(conj(x(3))) + 7.6e-3*x(4)^2*cos(conj(x(2)))*sin(conj(x(2))) + 0.025*x(4)^2*cos(conj(x(2)))*cos(conj(x(3)))*sin(conj(x(2)))))/(17.0*cos(x(3)) + 1.7e3*cos(conj(x(3)))*cos(x(3)) + 4.9e3*sin(conj(x(3)))*sin(x(3)) + 2.1e3) - (1.0e3*(122.0*cos(conj(x(3))) + 133.0*cos(x(3)) + 288.0*cos(conj(x(3)))*cos(x(3)) + 299.0*sin(conj(x(3)))*sin(x(3)) + 211.0)*((6.8e-3*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 6.8e-3*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(x(4)*cos(conj(x(2)))*cos(conj(x(3))) + x(4)*sin(conj(x(2)))*sin(conj(x(3)))) - 1.0*(x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 1.0*x(4)*cos(conj(x(3)))*sin(conj(x(2))))*(5.6e-4*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 5.6e-4*x(4)*sin(conj(x(2)))*sin(conj(x(3)))) - 0.084*sin(conj(x(3)))*(0.3*x(4)^2*cos(conj(x(2)))^2 + 0.3*x(5)^2) + 0.83*cos(conj(x(2)))*cos(conj(x(3))) - 1.0*(0.13*x(4)*cos(conj(x(2)))*cos(conj(x(3))) + 0.13*x(4)*sin(conj(x(2)))*sin(conj(x(3))))*(0.084*x(4)*cos(conj(x(2)))*sin(conj(x(3))) - 0.084*x(4)*cos(conj(x(3)))*sin(conj(x(2)))) + 0.83*sin(conj(x(2)))*sin(conj(x(3))) + 0.025*x(4)^2*cos(conj(x(2)))*cos(conj(x(3)))*sin(conj(x(2)))))/(17.0*cos(x(3)) + 1.7e3*cos(conj(x(3)))*cos(x(3)) + 4.9e3*sin(conj(x(3)))*sin(x(3)) + 2.1e3))/x(6)];
B = @(x) [0 0 0
0 0 0
0 0 0
1.0e5/(7.5e3*cos(conj(x(2)))*cos(x(2)) + 922.0*sin(conj(x(2)))*sin(x(2)) + 2.5e3*cos(conj(x(2)))*cos(x(2))*cos(x(3)) + 2.5e3*cos(conj(x(2)))*sin(x(2))*sin(x(3)) + 2.5e3*cos(conj(x(2)))*cos(conj(x(3)))*cos(x(2)) + 2.5e3*sin(conj(x(2)))*sin(conj(x(3)))*cos(x(2)) + 1.2e3*cos(conj(x(2)))*cos(conj(x(3)))*cos(x(2))*cos(x(3)) + 1.2e3*cos(conj(x(2)))*cos(conj(x(3)))*sin(x(2))*sin(x(3)) + 688.0*cos(conj(x(2)))*sin(conj(x(3)))*cos(x(2))*sin(x(3)) - 688.0*cos(conj(x(2)))*sin(conj(x(3)))*cos(x(3))*sin(x(2)) - 688.0*cos(conj(x(3)))*sin(conj(x(2)))*cos(x(2))*sin(x(3)) + 688.0*cos(conj(x(3)))*sin(conj(x(2)))*cos(x(3))*sin(x(2)) + 1.2e3*sin(conj(x(2)))*sin(conj(x(3)))*cos(x(2))*cos(x(3)) + 1.2e3*sin(conj(x(2)))*sin(conj(x(3)))*sin(x(2))*sin(x(3)) + 33.0) 0 0
0 8.5e4/(17.0*cos(x(3)) + 1.7e3*cos(conj(x(3)))*cos(x(3)) + 4.9e3*sin(conj(x(3)))*sin(x(3)) + 2.1e3) -(5.0e3*(25.0*cos(x(3)) + 17.0))/(17.0*cos(x(3)) + 1.7e3*cos(conj(x(3)))*cos(x(3)) + 4.9e3*sin(conj(x(3)))*sin(x(3)) + 2.1e3)
0 -(5.0e3*(25.0*cos(conj(x(3))) + 17.0))/(17.0*cos(x(3)) + 1.7e3*cos(conj(x(3)))*cos(x(3)) + 4.9e3*sin(conj(x(3)))*sin(x(3)) + 2.1e3) (1.0e3*(122.0*cos(conj(x(3))) + 133.0*cos(x(3)) + 288.0*cos(conj(x(3)))*cos(x(3)) + 299.0*sin(conj(x(3)))*sin(x(3)) + 211.0))/(17.0*cos(x(3)) + 1.7e3*cos(conj(x(3)))*cos(x(3)) + 4.9e3*sin(conj(x(3)))*sin(x(3)) + 2.1e3)];
fc = @(x,u) A(x)*x+B(x)*u;
f = @(x,u) x + Ts*fc(x,u);
x = zeros(6 ,Np);
x = [xi x];
y = zeros(3 , Np);
for i=1:Np
x(: , i+1) = f(x(: , i) , U(:,i));
y(:,i) = h(x(: , i+1));
end
R = 1;
J = sum ((Yref-y).^2) + R*sum (U.^2);
end
and h function is:
function y=h(x)
y=[x(1);x(2);x(3)];
end
when I try cost function in command window code run and show this:
>> Cost ([1;1;1;1;1;1] , randn(3,1) , [1;1;1] , 2 , 0.01)
Index exceeds matrix dimensions.
Error in Cost (line 23)
x(: , i+1) = f(x(: , i) , U(:,i));

Accepted Answer

Walter Roberson
Walter Roberson on 16 Jan 2021
for i=1:Np
x(: , i+1) = f(x(: , i) , U(:,i));
That needs to access up to the Np'th column of U
Cost ([1;1;1;1;1;1] , randn(3,1) , [1;1;1] , 2 , 0.01)
but U only has one column.
The Np that you pass in (2) should not exceed the number of columns of your second parameter.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!