Note that there are some explanatory texts on larger screens.

plurals
  1. POOptimizing a Vectorized Matlab Function
    primarykey
    data
    text
    <p>When i run profiler it tell me that the most time consuming code is the function <code>vdist</code>. Its a program that measures distance between two points on earth considering earth as an ellipsoid. The code looks standard and i don't know where and how it can be improved upon. The initial comments say, it has already been vectorized. Is there a counterpart to it in some other language which can be used as a MEX file. All i want is improvement in terms of time efficiency. Here is a link to the code from Matlab FEX. </p> <p><a href="http://www.mathworks.com/matlabcentral/fileexchange/8607-vectorized-geodetic-distance-and-azimuth-on-the-wgs84-earth-ellipsoid/content/vdist.m" rel="nofollow">http://www.mathworks.com/matlabcentral/fileexchange/8607-vectorized-geodetic-distance-and-azimuth-on-the-wgs84-earth-ellipsoid/content/vdist.m</a> </p> <p>The function is called from within a loop as- (You can find the function as its the most time consuming line here)</p> <pre><code> 109 for i=1:polySize 110 % find the two vectors needed 11755 111 if i~=1 0.02 11503 112 if i&lt;polySize 0.02 11251 113 p0=Polygon(i,:); p1=Polygon(i-1,:); p2=Polygon(i+1,:); 252 114 else 252 115 p0=Polygon(i,:); p1=Polygon(i-1,:); p2=Polygon(1,:); %special case for i=polySize 252 116 end 252 117 else 252 118 p0=Polygon(i,:); p1=Polygon(polySize,:); p2=Polygon(i+1,:); %special case for i=1 252 119 end 0.02 11755 120 Vector1=(p0-p1); Vector2=(p0-p2); 0.06 11755 121 if ~(isequal(Vector1,Vector2) || isequal(Vector1,ZeroVec) || isequal(Vector2,ZeroVec)); 122 %determine normals and normalise and 0.17 11755 123 NV1=rotateVector(Vector1, pi./2); NV2=rotateVector(Vector2, -pi./2); 0.21 11755 124 NormV1=normaliseVector(NV1); NormV2=normaliseVector(NV2); 125 %determine rotation by means of the atan2 (because sign matters!) 11755 126 totalRotation = vectorAngle(NormV2, NormV1); % Bestimme den Winkel totalRotation zwischen den normierten Vektoren 11755 127 if totalRotation&lt;10 11755 128 totalRotation=totalRotation*50; 11755 129 end 0.01 11755 130 for res=1:6 0.07 70530 131 U_neu=p0+NV1; 17.01 70530 132 [pos,a12] = vdist(p0(:,2),p0(:,1),U_neu(:,2),U_neu(:,1)); 0.02 70530 133 a12=a12+1/6.*res*totalRotation; 70530 134 ddist=1852*safety_distance; 4.88 70530 135 [lat2,lon2] = vreckon(p0(:,2),p0(:,1),ddist, a12); 0.15 70530 136 extendedPoly(f,:)=[lon2,lat2];f=f+1; &lt; 0.01 70530 137 end 11755 138 end 11755 139 end </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload