Hi everyone. I'm working on a piece of code and I'm having a bit of trouble with array pre-allocation. Here it is:(adsbygoogle = window.adsbygoogle || []).push({});

function [react_in1 react_in2 react_out1 react_out2]=oneVtwoXone(masses,prec);

prec = 1e-4;

N=length(masses);

masses=[0;masses]; % adding dummy metabolite with zero mass

masses=masses(:);

%mass2=masses*ones(size(masses))'+ones(size(masses))*masses';

%mass2=mass2(:);

mass2=zeros(N*(N+1)/2,1); % list of mass pairs

met1=mass2; % list of the first metabolite in a pair

met2=mass2; % same for the second metabolite

k=0;

for i=1:N

for j=i:N

k=k+1;

met1(k)=i;

met2(k)=j;

mass2(k)=masses(i)+masses(j);

end

end

disp(['Number of distinct pairs is' length(mass2) ])

[mass2, ord]=sort(mass2); % sorted mass pairs

met1=met1(ord); % metabolites in the same order as sorted mass pairs

met2=met2(ord);

dm=diff(mass2);

while(length(find(dm <= mass2(1:length(dm))*prec)) > 0) % while have metabolite pairs that have about the same mass

ind=find(dm<mass2(length(mass2)-length(dm)+1:end)*prec);

react_in1=[react_in1 met1(ind)];

react_in2=[react_in2 met2(ind)];

react_out1=[react_out1 met1(ind+1)];

react_out2=[react_out2 met2(ind+1)];

dm = dm(1:end-1) + dm(2:end);

end

disp(['Number of conforming reactions is' length(react_in1) ])

The source of my trouble is in the second while loop. The react_in1 etc. takes up too much memory and I need to figure out how to preallocate a matrix to hold values approximately 10000, and how to delete the excess zeros if there is any unused space.

Can anyone help?

**Physics Forums | Science Articles, Homework Help, Discussion**

Join Physics Forums Today!

The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

# MATLAB Array Pre-allocation help!

**Physics Forums | Science Articles, Homework Help, Discussion**