- What line throws the error?
- What sizes are sph1 and sph2 when it occurs?
Why do I get Error: Subscript indices real positive integers/logicals?
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
mosch
el 11 de Mayo de 2014
Comentada: mosch
el 11 de Mayo de 2014
I have a function that calculates the gap/overlap between two spheres. The spheres can have either the format [x,y,z,r] or [x;y;z;r], so I included some code at the beginning to bring them both to the same format. The rest is a rather simple distance calculation.
This worked fine up to now, no matter which of the two input formats I used for input. However, for some reason this has stopped working (at all, no matter which format i use) and I keep getting the message "Subscript indices must either be real positive integers or logicals."
Here is my code:
function [ distance ] = distcheck( sph1, sph2 )
%DISTCHECK calculates ->real<- distance between spheres (gap+ or overlap-)
[size11, size12] = size(sph1);
if size11 == 4;
sph1 = sph1.';
end
[size21, size22] = size(sph2);
if size21 == 4;
sph2 = sph2.';
end
distsq = sum( (sph2(1:3)-sph1(1:3)).^2) - (sph1(4) + sph2(4))^2;
if distsq < 0;
distdir = -1;
else
distdir = 1;
end
distance = distdir*sqrt(abs(distsq));
end
example spheres (so you can run it easily):
% example 1:
sph1 = [-0.2357;0.3639;0.3399;0.250];
sph2 = [-0.1611,0.1500,0.0420,0.01500];
% example 2:
sph1 = [-0.2357;0.3639;0.3399;0.250];
sph2 = [-0.1611;0.1500;0.0420;0.01500];
% example 3:
sph1 = [-0.2357,0.3639,0.3399,0.250];
sph2 = [-0.1611;0.1500;0.0420;0.01500];
% example 4:
sph1 = [1,1,1,1]; sph2 = [1,1,2.5,1];
% example 5:
sph1 = [1;1;1;1]; sph2 = [1;1;2.5;1];
% example 6:
sph1 = [1,1,1,1]; sph2 = [1;1;2.5;1];
No matter which of them I use, I get the error. If I copy-paste each step from the function and run it manually, I get a valid result. What am I missing?
Edit: Whole error message and iputs causing them:
>> sph1 = [-0.2357;0.3639;0.3399;0.250];
sph2 = [-0.1611,0.1500,0.0420,0.01500];
>> distcheck(sph1,sph2)
Subscript indices must
either be real positive
integers or logicals.
Edit2: It seems to work when I clean up my workspace but my main script keeps triggering the error message.
Subscript indices must either be real
positive integers or logicals.
Error in testscript (line
116)
distn2 =
distcheck(sphn,cont2);
with
sphn = [-3.065361088086432e-06;5.050735062465379e-05;1.250955109092040e-05;2.500000000000000e-05];
cont2 = [-1.081620971550675e-06 1.500000000000000e-05 1.797244470458586e-05 1.500000000000000e-05];
Edit3: Found the problem, I somehow created a variable called "distcheck" (same as the function name).
2 comentarios
Star Strider
el 11 de Mayo de 2014
BTW, you can do away with your first two if blocks. If you want sph1 and sph2 to be row vectors, simply state them as:
sph1 = sph1(:)';
sph2 = sph2(:)';
Respuesta aceptada
Image Analyst
el 11 de Mayo de 2014
Post your exact error message - you forgot to do so, you just snipped out a small chunk of it. I ran your code in the attached file, and it ran fine with no errors whatsoever . Moreover, I don't see anything that should cause such an error.
2 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Whos en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!