Please help! Error using sym/subsindex

I'm working on a project but I keep on getting this error:
>> p
Error using sym/subsindex (line 825)
Invalid indexing or function definition. Indexing must follow MATLAB indexing. Function arguments must be symbolic variables, and
function body must be sym expression.
Error in sym/subsref (line 870)
R_tilde = builtin('subsref',L_tilde,Idx);
Error in p (line 26)
J = jacobian([p_2,p_3,p_4,p_5,q_2,q_3,q_5],[delta_2, delta_3, delta_4, delta_5, V_2, V_3, V_5]);
Whenever I run the following code:
syms delta_2 delta_3 delta_4 delta_5 V_2 V_3 V_5 p_2 p_3 p_4 p_5 q_2 q_3 q_5;
p_2 = 1.05*abs(V_2)*(-cos(delta_2)+ 2*sin(delta_2))+ 3*abs(V_2)^2 + abs(V_2)*abs(V_3)*5.5*sin(delta_2-delta_3) +(1.05*abs(V_2))*(-2*cos(delta_2-delta_4)+4*sin(delta_2-delta_4));
p_3 = abs(V_3)* abs(V_2)*(5.5* sin(delta_3-delta_2));
p_4 = (1.05)*abs(V_2)*(-2*cos(delta_4-delta_2)+ 4*sin(delta_4-delta_2))+3*(abs(1.05))^2 + abs(1.05)*abs(V_5)*(-cos(delta_4-delta_5) + 2*sin(delta_4-delta_5));
p_5 = 1.05*abs(V_5)*(-2*cos(delta_5)+4*sin(delta_5))+ (1.05*abs(V_5)*(-cos(delta_5)+2*sin(delta_5)))+ 3*abs(V_5)^2;
q_2 = (1.05)*abs(V_2)*(-sin(delta_2)-2*cos(delta_2)) + 12.05*abs(V_2)^2 - abs(V_3)*abs(V_2)*(5.5*cos(delta_2-delta_3)) + 1.05*abs(V_2)*(-2*sin(delta_2-delta_4)-4*cos(delta_2-delta_4));
q_3 = -abs(V_3)*abs(V_2)*(5.5*cos(delta_3-delta_2))+5*abs(V_3)^2;
q_5 = 1.05*abs(V_5)*(-2*sin(delta_5)-4*cos(delta_5))+ 1.05*abs(V_5)*(-sin(delta_5-delta_4)-2*cos(delta_5-delta_4))+ 6*abs(V_5)^2;
J = jacobian([p_2,p_3,p_4,p_5,q_2,q_3,q_5],[delta_2, delta_3, delta_4, delta_5, V_2, V_3, V_5]);
% J = jacobian([ (1.05*abs(V_2)*(-cos(delta_2)+ 2*sin(delta_2)))+ 3*abs(V_2)^2 + abs(V_2)*abs(V_3)*5.5*sin(delta_2-delta_3) +(1.05*abs(V_2))*(-2*cos(delta_2-delta_4)+4*sin(delta_2-delta_4)),
% abs(V_3)* abs(V_2)*(5.5* sin(delta_3-delta_2)),
% (1.05)*abs(V_2)*(-2*cos(delta_4-delta_2)+ 4*sin(delta_4-delta_2))+3*(abs(1.05))^2 + abs(1.05)*abs(V_5)*(-cos(delta_4-delta_5) + 2*sin(delta_4-delta_5)),
% 1.05*abs(V_5)*(-2*cos(delta_5)+4*sin(delta_5))+ (1.05*abs(V_5)*(-cos(delta_5)+2*sin(delta_5)))+ 3*abs(V_5)^2,
% (1.05)*abs(V_2)*(-sin(delta_2)-2*cos(delta_2)) + 12.05*abs(V_2)^2 - abs(V_3)*abs(V_2)*(5.5*cos(delta_2-delta_3)) + 1.05*abs(V_2)*(-2*sin(delta_2-delta_4)-4*cos(delta_2-delta_4)),
% -abs(V_3)*abs(V_2)*(5.5*cos(delta_3-delta_2))+5*abs(V_3)^2,
% 1.05*abs(V_5)*(-2*sin(delta_5)-4*cos(delta_5))+ 1.05*abs(V_5)*(-sin(delta_5-delta_4)-2*cos(delta_5-delta_4))+ 6*abs(V_5)^2], [delta_2,delta_3, delta_4, delta_5, V_2, V_3, V_5]);
I tried a lot of different things and I've looked at a lot of different online resources, but none of them seem to do the trick!
I've tried directly inputting the formulas into the jacobian (right now it is commented out) and I've tried having syms with just the deltas and V's.
If anyone could give me any input on how to debug this, I would be so thankful!! I just need a pointer as to where to start!! Thank you.

回答(1 个)

I didn't get any error while running your code.
The error arises when you index a variable using symbolic variable.
>> syms delta_2 delta_3 delta_4 delta_5 V_2 V_3 V_5 p_2 p_3 p_4 p_5 q_2 q_3 q_5;
p_2 = 1.05*abs(V_2)*(-cos(delta_2)+ 2*sin(delta_2))+ 3*abs(V_2)^2 + abs(V_2)*abs(V_3)*5.5*sin(delta_2-delta_3) +(1.05*abs(V_2))*(-2*cos(delta_2-delta_4)+4*sin(delta_2-delta_4));
p_3 = abs(V_3)* abs(V_2)*(5.5* sin(delta_3-delta_2));
p_4 = (1.05)*abs(V_2)*(-2*cos(delta_4-delta_2)+ 4*sin(delta_4-delta_2))+3*(abs(1.05))^2 + abs(1.05)*abs(V_5)*(-cos(delta_4-delta_5) + 2*sin(delta_4-delta_5));
p_5 = 1.05*abs(V_5)*(-2*cos(delta_5)+4*sin(delta_5))+ (1.05*abs(V_5)*(-cos(delta_5)+2*sin(delta_5)))+ 3*abs(V_5)^2;
q_2 = (1.05)*abs(V_2)*(-sin(delta_2)-2*cos(delta_2)) + 12.05*abs(V_2)^2 - abs(V_3)*abs(V_2)*(5.5*cos(delta_2-delta_3)) + 1.05*abs(V_2)*(-2*sin(delta_2-delta_4)-4*cos(delta_2-delta_4));
q_3 = -abs(V_3)*abs(V_2)*(5.5*cos(delta_3-delta_2))+5*abs(V_3)^2;
q_5 = 1.05*abs(V_5)*(-2*sin(delta_5)-4*cos(delta_5))+ 1.05*abs(V_5)*(-sin(delta_5-delta_4)-2*cos(delta_5-delta_4))+ 6*abs(V_5)^2;
J = jacobian([p_2,p_3,p_4,p_5,q_2,q_3,q_5],[delta_2, delta_3, delta_4, delta_5, V_2, V_3, V_5]);
>> J
J =
[ (21*abs(V_2)*(4*cos(delta_2 - delta_4) + 2*sin(delta_2 - delta_4)))/20 + (21*abs(V_2)*(2*cos(delta_2) + sin(delta_2)))/20 + (11*abs(V_2)*abs(V_3)*cos(delta_2 - delta_3))/2, -(11*abs(V_2)*abs(V_3)*cos(delta_2 - delta_3))/2, -(21*abs(V_2)*(4*cos(delta_2 - delta_4) + 2*sin(delta_2 - delta_4)))/20, 0, 6*abs(V_2)*sign(V_2) - (21*sign(V_2)*(cos(delta_2) - 2*sin(delta_2)))/20 - (21*sign(V_2)*(2*cos(delta_2 - delta_4) - 4*sin(delta_2 - delta_4)))/20 + (11*abs(V_3)*sign(V_2)*sin(delta_2 - delta_3))/2, (11*abs(V_2)*sign(V_3)*sin(delta_2 - delta_3))/2, 0]
[ -(11*abs(V_2)*abs(V_3)*cos(delta_2 - delta_3))/2, (11*abs(V_2)*abs(V_3)*cos(delta_2 - delta_3))/2, 0, 0, -(11*abs(V_3)*sign(V_2)*sin(delta_2 - delta_3))/2, -(11*abs(V_2)*sign(V_3)*sin(delta_2 - delta_3))/2, 0]
[ -(21*abs(V_2)*(4*cos(delta_2 - delta_4) - 2*sin(delta_2 - delta_4)))/20, 0, (21*abs(V_2)*(4*cos(delta_2 - delta_4) - 2*sin(delta_2 - delta_4)))/20 + (21*abs(V_5)*(2*cos(delta_4 - delta_5) + sin(delta_4 - delta_5)))/20, -(21*abs(V_5)*(2*cos(delta_4 - delta_5) + sin(delta_4 - delta_5)))/20, -(21*sign(V_2)*(2*cos(delta_2 - delta_4) + 4*sin(delta_2 - delta_4)))/20, 0, -(21*sign(V_5)*(cos(delta_4 - delta_5) - 2*sin(delta_4 - delta_5)))/20]
[ 0, 0, 0, (21*abs(V_5)*(2*cos(delta_5) + sin(delta_5)))/20 + (21*abs(V_5)*(4*cos(delta_5) + 2*sin(delta_5)))/20, 0, 0, 6*abs(V_5)*sign(V_5) - (21*sign(V_5)*(cos(delta_5) - 2*sin(delta_5)))/20 - (21*sign(V_5)*(2*cos(delta_5) - 4*sin(delta_5)))/20]
[ (11*abs(V_2)*abs(V_3)*sin(delta_2 - delta_3))/2 - (21*abs(V_2)*(cos(delta_2) - 2*sin(delta_2)))/20 - (21*abs(V_2)*(2*cos(delta_2 - delta_4) - 4*sin(delta_2 - delta_4)))/20, -(11*abs(V_2)*abs(V_3)*sin(delta_2 - delta_3))/2, (21*abs(V_2)*(2*cos(delta_2 - delta_4) - 4*sin(delta_2 - delta_4)))/20, 0, (241*abs(V_2)*sign(V_2))/10 - (21*sign(V_2)*(2*cos(delta_2) + sin(delta_2)))/20 - (21*sign(V_2)*(4*cos(delta_2 - delta_4) + 2*sin(delta_2 - delta_4)))/20 - (11*abs(V_3)*sign(V_2)*cos(delta_2 - delta_3))/2, -(11*abs(V_2)*sign(V_3)*cos(delta_2 - delta_3))/2, 0]
[ (11*abs(V_2)*abs(V_3)*sin(delta_2 - delta_3))/2, -(11*abs(V_2)*abs(V_3)*sin(delta_2 - delta_3))/2, 0, 0, -(11*abs(V_3)*sign(V_2)*cos(delta_2 - delta_3))/2, 10*abs(V_3)*sign(V_3) - (11*abs(V_2)*sign(V_3)*cos(delta_2 - delta_3))/2, 0]
[ 0, 0, (21*abs(V_5)*(cos(delta_4 - delta_5) + 2*sin(delta_4 - delta_5)))/20, - (21*abs(V_5)*(cos(delta_4 - delta_5) + 2*sin(delta_4 - delta_5)))/20 - (21*abs(V_5)*(2*cos(delta_5) - 4*sin(delta_5)))/20, 0, 0, 12*abs(V_5)*sign(V_5) - (21*sign(V_5)*(2*cos(delta_4 - delta_5) - sin(delta_4 - delta_5)))/20 - (21*sign(V_5)*(4*cos(delta_5) + 2*sin(delta_5)))/20]
>>

4 个评论

Hm, thank you! So I reopened matlab and ran the same code and it causes no error, but when I uncomment my next lines, the error seems to occur. Furthermore, when I subsequently comment out those lines again and run, the error still occurs:
delta_matrix = [p_2 + 0.7, p_3 + 0.4, p_4 - 1, p_5 + 0.6, q_2 + 0.2, q_3 + 0.1, q_5 + 0.3];
x_new = [0,0,0,0,1,1,1];
x = [0,0,0,0,1,1,1];
iteration = 0;
% delta_2 delta_3 delta_4 delta_5 V_2 V_3 V_5
while (iteration < 5)
% substitute the values in the Jacobian
temporary_matrix = subs(J,delta_2, x(1));
temporary_matrix = subs(temporary_matrix,delta_3, x(2));
temporary_matrix = subs(temporary_matrix,delta_4, x(3));
temporary_matrix = subs(temporary_matrix,delta_5, x(4));
temporary_matrix = subs(temporary_matrix, V_2, x(5));
temporary_matrix = subs(temporary_matrix, V_3, x(6));
temporary_matrix = subs(temporary_matrix, V_5, x(7));
% now that we have our new jacobian
jacobian = temporary_matrix;
% use it to calculate the new values of x
% x_new = x + inv(temporary_matrix)* delta_matrix;
% next iteration!
iteration = iteration + 1;
end
The code that creates the error is the x_new = x + inv(temportary_matrix...
hey when you ask a question post the full code these are the ones you added up now , attach your script file
Sorry about that! Let me try that now:
Remove loop and don’t name a variable jacobian , I didn‘t get any error

请先登录,再进行评论。

提问:

2018-12-11

评论:

2018-12-11

Community Treasure Hunt

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

Start Hunting!

Translated by