Subscript indices must either be real positive integers or logicals.
    2 views (last 30 days)
  
       Show older comments
    
    Anastasios Verikios
 on 28 Jul 2017
  
    
    
    
    
    Answered: Walter Roberson
      
      
 on 29 Jul 2017
            I am trying to solve a system of nonlinear simultaneous equations using the fsolve function. I keep getting the "Subscript indices must either be real positive integers or logicals" error message and have no idea why, and nothing I have found online has helped. The equations in question are as follows:
function [ F ] = func_tj( tj )
   rhoi = [.02;.2;2;20;200;2000;20000;200000;2000000;20000000;200000000];
Ei =[1.94E09;2.83E09;5.54E09;6.02E09;3.88E09;1.56E09;4.10E08;1.38E08;3.68E07;7.90E06;9.60E06];
  Ee = 2.24E7;
F(1) = -tj(1)+ rhoi(1) +rhoi(1)*Ei(1)/Ee + (rhoi(2)*Ei(2))/(Ee(rhoi(2)-tj(2))) + (rhoi(3)*Ei(3))/(Ee(rhoi(3)-tj(3))) + (rhoi(4)*Ei(4))/(Ee(rhoi(4)-tj(4))) + (rhoi(5)*Ei(5))/(Ee(rhoi(5)-tj(5))) + (rhoi(6*Ei(6))/(Ee(rhoi(6)-tj(6))) + (rhoi(7)*Ei(7))/(Ee(rhoi(7)-tj(7))) + (rhoi(8)*Ei(8))/(Ee(rhoi(8)-tj(8))) + (rhoi(9)*Ei(9))/(Ee(rhoi(9)-tj(9))) + (rhoi(10)*Ei(10))/(Ee(rhoi(10)-tj(10))) + (rhoi(11)*Ei(11))/(Ee(rhoi(11)-tj(11))));
F(2) = -tj(2)+ rhoi(2) +rhoi(2)*Ei(2)/Ee + (rhoi(1)*Ei(1))/(Ee(rhoi(1)-tj(1))) + (rhoi(3)*Ei(3))/(Ee(rhoi(3)-tj(3))) + (rhoi(4)*Ei(4))/(Ee(rhoi(4)-tj(4))) + (rhoi(5)*Ei(5))/(Ee(rhoi(5)-tj(5))) + (rhoi(6*Ei(6))/(Ee(rhoi(6)-tj(6))) + (rhoi(7)*Ei(7))/(Ee(rhoi(7)-tj(7))) + (rhoi(8)*Ei(8))/(Ee(rhoi(8)-tj(8))) + (rhoi(9)*Ei(9))/(Ee(rhoi(9)-tj(9))) + (rhoi(10)*Ei(10))/(Ee(rhoi(10)-tj(10))) + (rhoi(11)*Ei(11))/(Ee(rhoi(11)-tj(11))));
F(3) = -tj(3)+ rhoi(3) +rhoi(3)*Ei(3)/Ee + (rhoi(1)*Ei(1))/(Ee(rhoi(1)-tj(1))) + (rhoi(2)*Ei(2))/(Ee(rhoi(2)-tj(2))) + (rhoi(4)*Ei(4))/(Ee(rhoi(4)-tj(4))) + (rhoi(5)*Ei(5))/(Ee(rhoi(5)-tj(5))) + (rhoi(6*Ei(6))/(Ee(rhoi(6)-tj(6))) + (rhoi(7)*Ei(7))/(Ee(rhoi(7)-tj(7))) + (rhoi(8)*Ei(8))/(Ee(rhoi(8)-tj(8))) + (rhoi(9)*Ei(9))/(Ee(rhoi(9)-tj(9))) + (rhoi(10)*Ei(10))/(Ee(rhoi(10)-tj(10))) + (rhoi(11)*Ei(11))/(Ee(rhoi(11)-tj(11))));
F(4) = -tj(4)+ rhoi(4) +rhoi(4)*Ei(4)/Ee + (rhoi(1)*Ei(1))/(Ee(rhoi(1)-tj(1))) + (rhoi(2)*Ei(2))/(Ee(rhoi(2)-tj(2))) + (rhoi(3)*Ei(3))/(Ee(rhoi(3)-tj(3))) + (rhoi(5)*Ei(5))/(Ee(rhoi(5)-tj(5))) + (rhoi(6*Ei(6))/(Ee(rhoi(6)-tj(6))) + (rhoi(7)*Ei(7))/(Ee(rhoi(7)-tj(7))) + (rhoi(8)*Ei(8))/(Ee(rhoi(8)-tj(8))) + (rhoi(9)*Ei(9))/(Ee(rhoi(9)-tj(9))) + (rhoi(10)*Ei(10))/(Ee(rhoi(10)-tj(10))) + (rhoi(11)*Ei(11))/(Ee(rhoi(11)-tj(11))));
F(5) = -tj(5)+ rhoi(5) +rhoi(5)*Ei(5)/Ee + (rhoi(1)*Ei(1))/(Ee(rhoi(1)-tj(1))) + (rhoi(2)*Ei(2))/(Ee(rhoi(2)-tj(2))) + (rhoi(3)*Ei(3))/(Ee(rhoi(3)-tj(3))) + (rhoi(4)*Ei(4))/(Ee(rhoi(4)-tj(4))) + (rhoi(6*Ei(6))/(Ee(rhoi(6)-tj(6))) + (rhoi(7)*Ei(7))/(Ee(rhoi(7)-tj(7))) + (rhoi(8)*Ei(8))/(Ee(rhoi(8)-tj(8))) + (rhoi(9)*Ei(9))/(Ee(rhoi(9)-tj(9))) + (rhoi(10)*Ei(10))/(Ee(rhoi(10)-tj(10))) + (rhoi(11)*Ei(11))/(Ee(rhoi(11)-tj(11))));
F(6) = -tj(6)+ rhoi(6) +rhoi(6)*Ei(6)/Ee + (rhoi(1)*Ei(1))/(Ee(rhoi(1)-tj(1))) + (rhoi(2)*Ei(2))/(Ee(rhoi(2)-tj(2))) + (rhoi(3)*Ei(3))/(Ee(rhoi(3)-tj(3))) + (rhoi(4)*Ei(4))/(Ee(rhoi(4)-tj(4))) + (rhoi(5*Ei(5))/(Ee(rhoi(5)-tj(5))) + (rhoi(7)*Ei(7))/(Ee(rhoi(7)-tj(7))) + (rhoi(8)*Ei(8))/(Ee(rhoi(8)-tj(8))) + (rhoi(9)*Ei(9))/(Ee(rhoi(9)-tj(9))) + (rhoi(10)*Ei(10))/(Ee(rhoi(10)-tj(10))) + (rhoi(11)*Ei(11))/(Ee(rhoi(11)-tj(11))));
F(7) = -tj(7)+ rhoi(7) +rhoi(7)*Ei(7)/Ee + (rhoi(1)*Ei(1))/(Ee(rhoi(1)-tj(1))) + (rhoi(2)*Ei(2))/(Ee(rhoi(2)-tj(2))) + (rhoi(3)*Ei(3))/(Ee(rhoi(3)-tj(3))) + (rhoi(4)*Ei(4))/(Ee(rhoi(4)-tj(4))) + (rhoi(5*Ei(5))/(Ee(rhoi(5)-tj(5))) + (rhoi(6)*Ei(6))/(Ee(rhoi(6)-tj(6))) + (rhoi(8)*Ei(8))/(Ee(rhoi(8)-tj(8))) + (rhoi(9)*Ei(9))/(Ee(rhoi(9)-tj(9))) + (rhoi(10)*Ei(10))/(Ee(rhoi(10)-tj(10))) + (rhoi(11)*Ei(11))/(Ee(rhoi(11)-tj(11))));
F(8) = -tj(8)+ rhoi(8) +rhoi(8)*Ei(8)/Ee + (rhoi(1)*Ei(1))/(Ee(rhoi(1)-tj(1))) + (rhoi(2)*Ei(2))/(Ee(rhoi(2)-tj(2))) + (rhoi(3)*Ei(3))/(Ee(rhoi(3)-tj(3))) + (rhoi(4)*Ei(4))/(Ee(rhoi(4)-tj(4))) + (rhoi(5*Ei(5))/(Ee(rhoi(5)-tj(5))) + (rhoi(6)*Ei(6))/(Ee(rhoi(6)-tj(6))) + (rhoi(7)*Ei(7))/(Ee(rhoi(7)-tj(7))) + (rhoi(9)*Ei(9))/(Ee(rhoi(9)-tj(9))) + (rhoi(10)*Ei(10))/(Ee(rhoi(10)-tj(10))) + (rhoi(11)*Ei(11))/(Ee(rhoi(11)-tj(11))));
F(9) = -tj(9)+ rhoi(9) +rhoi(9)*Ei(9)/Ee + (rhoi(1)*Ei(1))/(Ee(rhoi(1)-tj(1))) + (rhoi(2)*Ei(2))/(Ee(rhoi(2)-tj(2))) + (rhoi(3)*Ei(3))/(Ee(rhoi(3)-tj(3))) + (rhoi(4)*Ei(4))/(Ee(rhoi(4)-tj(4))) + (rhoi(5*Ei(5))/(Ee(rhoi(5)-tj(5))) + (rhoi(6)*Ei(6))/(Ee(rhoi(6)-tj(6))) + (rhoi(7)*Ei(7))/(Ee(rhoi(7)-tj(7))) + (rhoi(8)*Ei(8))/(Ee(rhoi(8)-tj(8))) + (rhoi(10)*Ei(10))/(Ee(rhoi(10)-tj(10))) + (rhoi(11)*Ei(11))/(Ee(rhoi(11)-tj(11))));
F(10) = -tj(10)+ rhoi(10) +rhoi(10)*Ei(10)/Ee + (rhoi(1)*Ei(1))/(Ee(rhoi(1)-tj(1))) + (rhoi(2)*Ei(2))/(Ee(rhoi(2)-tj(2))) + (rhoi(3)*Ei(3))/(Ee(rhoi(3)-tj(3))) + (rhoi(4)*Ei(4))/(Ee(rhoi(4)-tj(4))) + (rhoi(5*Ei(5))/(Ee(rhoi(5)-tj(5))) + (rhoi(6)*Ei(6))/(Ee(rhoi(6)-tj(6))) + (rhoi(7)*Ei(7))/(Ee(rhoi(7)-tj(7))) + (rhoi(8)*Ei(8))/(Ee(rhoi(8)-tj(8))) + (rhoi(9)*Ei(9))/(Ee(rhoi(9)-tj(9))) + (rhoi(11)*Ei(11))/(Ee(rhoi(11)-tj(11))));
F(11) = -tj(11)+ rhoi(11) +rhoi(11)*Ei(11)/Ee + (rhoi(1)*Ei(1))/(Ee(rhoi(1)-tj(1))) + (rhoi(2)*Ei(2))/(Ee(rhoi(2)-tj(2))) + (rhoi(3)*Ei(3))/(Ee(rhoi(3)-tj(3))) + (rhoi(4)*Ei(4))/(Ee(rhoi(4)-tj(4))) + (rhoi(5*Ei(5))/(Ee(rhoi(5)-tj(5))) + (rhoi(6)*Ei(6))/(Ee(rhoi(6)-tj(6))) + (rhoi(7)*Ei(7))/(Ee(rhoi(7)-tj(7))) + (rhoi(8)*Ei(8))/(Ee(rhoi(8)-tj(8))) + (rhoi(9)*Ei(9))/(Ee(rhoi(9)-tj(9))) + (rhoi(10)*Ei(10))/(Ee(rhoi(10)-tj(10))));
 end
This is my code to solve the equations:
tj(0) = [0.0200000000000000;0.200000000000000;2;20;200;2000;20000;200000;2000000;20000000;200000000];
tj = fsolve(func_tj(tj),tj(0));
tj
I have tried using multiple different tj(0) however I consistently get the same error. I have arranged everything based on what I have found in the Matlab help files, with several of the different variations and tried using other nonlinear simultaneous equation functions, however it still does not change the outcome.
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 29 Jul 2017
        You cannot define
tj(0) = [0.0200000000000000;0.200000000000000;2;20;200;2000;20000;200000;2000000;20000000;200000000];
tj = fsolve(func_tj(tj),tj(0));
You cannot index tj at 0.
tj0 = [0.0200000000000000;0.200000000000000;2;20;200;2000;20000;200000;2000000;20000000;200000000];
tj = fsolve(func_tj, tj0);
There is a solution with all tj being 0 except tj(2) = 2, tj(7) = 20000
0 Comments
More Answers (1)
  Adam
      
      
 on 28 Jul 2017
        Ee is just defined as a numeric scalar so I have no idea what these evaluate to, but unless it is 1 (in which case they are all pointless) then this will lead to an error, and I assume they don't evaluate to a positive integer either otherwise the error would be different:
Ee(rhoi(3)-tj(3))
Maybe you are just missing a * and meant to put:
Ee*(rhoi(3)-tj(3))
5 Comments
  Walter Roberson
      
      
 on 29 Jul 2017
				In each of F(1) to F(5) you have a sub-expression rhoi(6*Ei(6)) . In the remainder you have a sub-expression rhoi(5*Ei(5)) . Looking at the other expressions you probably want rhoi(6)*Ei(6) and rhoi(5)*Ei(5)
See Also
Categories
				Find more on Statics and Dynamics in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

