Subscript indices must either be real positive integers or logicals.
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Anastasios Verikios
il 28 Lug 2017
Risposto: Walter Roberson
il 29 Lug 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 Commenti
Risposta accettata
Walter Roberson
il 29 Lug 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 Commenti
Più risposte (1)
Adam
il 28 Lug 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 Commenti
Walter Roberson
il 29 Lug 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)
Vedere anche
Categorie
Scopri di più su Statics and Dynamics in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!