- 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 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
mosch
am 11 Mai 2014
Kommentiert: mosch
am 11 Mai 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 Kommentare
Star Strider
am 11 Mai 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(:)';
Akzeptierte Antwort
Image Analyst
am 11 Mai 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 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Whos 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!