Subscript indices must either be real positive integers or logicals.
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Anastasios Verikios
am 28 Jul. 2017
Beantwortet: Walter Roberson
am 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 Kommentare
Akzeptierte Antwort
Walter Roberson
am 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 Kommentare
Weitere Antworten (1)
Adam
am 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 Kommentare
Walter Roberson
am 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)
Siehe auch
Kategorien
Mehr zu Statics and Dynamics finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!