this program taking a long time to run and i did't get the answer also due to this problem. how can i reduce this time
4 views (last 30 days)
Show older comments
my data contain 1182614X3 datas, s=[]; x=data(1:end,1); y=data(1:end,2); z=data(1:end,3); x1=5; x2=9; y1=10; y2=14; z1=25; data2=[x1 y1 z1]; mainslope=(y2-y1)/(x2-x1); count=length(x); for i=1:count x3=x(i); y3=y(i); slope=(y3-y1)/(x3-x1); s=[s;x3 y3 slope]; if slope==mainslope z3=z(i); data2=[data2; x3 y3 z3]; end end
0 Comments
Answers (1)
Jos (10584)
on 17 Feb 2014
The slowness is caused by the fact to you expand the matrix s and sometimes the matrix data2 in each iteration. You should preallocated these. I also removed the if-end construction as you can easily weed out the unwanted values of data2 afterwards.
x=data(1:end,1); y=data(1:end,2); z=data(1:end,3);
x1=5; x2=9; y1=10; y2=14; z1=25;
mainslope=(y2-y1)/(x2-x1);
count=length(x);
% pre-allocation
s = nan(count,3) ;
data2 = nan(count+1,3) ; % apparently, data2 can become 1 longer than s ...
data2(1,:) = [x1 y1 z1];
for i=1:count
x3=x(i); y3=y(i);
slope=(y3-y1)/(x3-x1);
s(i,:) = [x3 y3 slope] ;
data2(i+1,:) = [x3 y3 z(i)] ;
end
TF = s(:,3) == mainslope ; % OR abs(s(:,3)-mainslope) < 0.001 ???
data2 = data2([true ; TF],:) ; % only retain when slope equals mainslope (plus the first row)
0 Comments
See Also
Categories
Find more on Assembly 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!