On 2/14/2013 11:49 AM, Jeff wrote: > Is there a better, more MATLAB-y way, to write this code (that is, > using vectors)? Eventually, this will be used for large amounts of > data (from a program running on a cluster), so I need it as efficient > as possible. > > U and W are T rows x N columns matrices. Variable evals is a 1 by N > matrix of the eigenvalues (of some other matrix which doesn't matter > for this post). For now, the largest value of T is about 1000, but > eventually it will be many thousands (maybe even millions). > > So the first thing I need to do (variable P_p) is subtract the each > entry on the row from the one to its right (for now, I only have > periodic conditions coded). I think I have that variable coded fairly > efficiently (yes? no?). > > if strcmp(boundary,'periodic') > nMinusOne=[N 1:N-1]; > nPlusOne=[2:N 1]; > elseif strcmp(boundary,'fixed') > nMinusOne=[1:N-1]; > nPlusOne=[2:N]; > end
First, a couple of questions...
a) The periodic solution as written will be N columns whereas the fixed will be N-1. Is this intended/desired?
b) As written the difference between n+ - n- of the array for periodic will be that of column n minus n-2 rather than the "one on its right" which implies a first difference. To illustrate if N were 5, say, the two column vectors you generate are
[5 1 2 3 4] [2 3 4 5 1]
which results in deltas of 2-5, 3-1, 4-2, etc., ... Is this intended or did you intend
[5 1 2 3 4] [1 2 3 4 5]
W/ those answers, then can progress to next step (altho I'll note you may find