# How do I speed up this function evaluation in matlab?

Half the run time of my code right now is evaluating a big function over many, many points, it takes maybe about 20 seconds per evaluation

The function consists of a bunch of simple operations that look like

Ux = ((1./72).*(x.^2+y.^2+z.^2).^(-5./2).*((-5).*x.*(4.*x.^4+3.*y.^2.*( ...
y.^2+z.^2)+x.^2.*(7.*y.^2+z.^2)).*gx^2+(-10).*y.*(3.*x.^4+5.* ...
x.^2.*y.^2+2.*y.^2.*(y.^2+z.^2)).*gx.*gy+5.*x.*(x.^4+3.*y.^2.* ...
z.^2+x.^2.*(y.^2+z.^2)).*gy^2));


is there any way to speed this up? Additionally it spends like 10% of this function evaluation concatenating these large matrices as

U =[Ux;Uy;Uz];


Are there any tricks to speeding up these sorts of evaluations?

I see that you are doing some redundant computation, for example y.^2+z.^2 is computed 4 times, with y.^2 and z.^2 are computed 9-10 times. You can define a set of variables y2=y.^2, z2=y.^2, y2pz2=y2+z2; and push some of the computation cost to memory -given that you have enough memory. That would save you a good amount of time.
MATLAB is a column-major language. Looking at your code, Ux, Uy and Uz seem to be row vectors and you are putting them on top of each other U =[Ux;Uy;Uz];. That will be slow. If possible, defining U =[Ux',Uy',Uz']; should reduce the time spent concatenating.