Any ideas how i can reduce the execution time?

newdes=[0.6250 0.8750; 0.2500 0.7500; 0.3750 0.1250;
0.8750 0.3750; 0.1250 0.6250; 0 0; 0.5000 0.5000; 0.7500 0.2500;
0.6875 0.0625; 0.0625 0.8125; 0.1875 0.6875; 0.3125 0.3125;
0.4375 0.9375; 0.5625 0.5625; 0.9375 0.1875; 0.8125 0.4375;] ;
dis=zeros(v,1);
v=16;
m=2;
sum=0
s=2;
for j=1:v
for k=1:m
ddii=(newdes(s,k)-newdes(j,k))^2;%Distance calculation of point s at its new location with all the other points.
sum=sum+ddii;
end
dis(j,1)=sum; %Store all the distances.
sum=0;
end
I am trying to use bxsfun, but i cannot solve it. I want reduce the time effort. Thank you in advance.

 Accepted Answer

xx=bsxfun(@minus,newdes(s,:),newdes(1:v,:));
sbs=xx.^2;
dis(:,1)=sum(sbs,2);
That is what i was looking for.

More Answers (1)

newdes=[0.6250 0.8750; 0.2500 0.7500; 0.3750 0.1250;
0.8750 0.3750; 0.1250 0.6250; 0 0; 0.5000 0.5000; 0.7500 0.2500;
0.6875 0.0625; 0.0625 0.8125; 0.1875 0.6875; 0.3125 0.3125;
0.4375 0.9375; 0.5625 0.5625; 0.9375 0.1875; 0.8125 0.4375;] ;
[nn,mm]=size(newdes)
v=16;
m=2;
s=2;
ay=repmat(1:m,1,v)
ax=s*ones(1,numel(ay))
idx1=sub2ind([nn mm],ax',ay')
[xx,yy]=meshgrid(1:v,1:m)
idx2=sub2ind([nn mm],xx(:),yy(:))
ww=(newdes(idx1)-newdes(idx2)).^2 %Distance calculation of point s at its new location with all the other points.
dis1=sum(reshape(ww,2,[]))'

5 Comments

I just ran your code and i got the following 'Subscript indices must either be real positive integers or logicals'.
type clear before running my code, then copy and paste my code. I tested it, there are no errors
It works, but the code that i have posted does it in 0.005318 seconds and your code does it in 0.007857 seconds. I want to reduce the execution time too.
I made some improvement, but it's less faster. Sometimes for loop is more efficient!
[nn,mm]=size(newdes);
s=2;
ay=repmat(1:mm,nn,1);
ax=s*ones(size(ay));
idx1=reshape(sub2ind([nn mm],ax',ay'),mm,[]);
[xx,yy]=meshgrid(1:v,1:m);
idx2=sub2ind([nn mm],xx,yy);
ww=(newdes(idx1)-newdes(idx2)).^2 ; %Distance calculation of point s at its new location with all the other points.
dis1=sum(ww)';
Thank you for your effort. I will try to find a way to improve the time efficiency. Thanks again

Sign in to comment.

Categories

Find more on Mathematics 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!