Calculation between different columns

5 views (last 30 days)
Hello,
I am doing a MATLAB program that calculates the wind shear exponent of different heights. I have a matrix of size 2 by 12 that shows the dates and the wind speeds (WS) at a particular height. The titles of the different columns are shown below. In the second row (not shown) there is the date and the wind speed values.
Date WS@200m WS@150m WS@100m WS@80m WS@60m ...
WS@50m WS@40m WS@30m WS@38m WS@20m WS@10m
Now what I want to do is to find the wind shear exponent (alpha) using the following formula:
alpha=log(u1/u2)/log (h1/h2)
where the u stands for wind speed and h stands for height.
And I have to do this for all different combinations of heights, that is, the 200m with 150m, 200m with 100m, 200m with 80m .... and so on, the last one being 20m with 10m.
I am a beginner in MATLAB and am having trouble doing this. If someone could point me in the right direction by telling me which commands to use, it would be appreciated.

Accepted Answer

Star Strider
Star Strider on 6 Nov 2016
This is relatively straightforward with the bsxfun function. Here, there are two calls to it, one for the altitude and one for the wind velocities. Each creates a matrix of its arguments, so that the structure of ‘u_ratios’ for example is:
u(1)/u(1) u(2)/u(1) ...
u(1)/u(2) u(2)/u(2)
u(1)/u(3) u(2)/u(3)
: .
: .
with the corresponding structure for ‘h_ratios’. The ‘alpha’ calculation then dies element-wise division of these the log of each matrix, producing the output. Note: the diagonals of ‘alpha’ are NaN because they are the results of log(1)/log(1) = 0/0 = NaN. So you may want to eliminate the NaN values on the main diagonal of ‘alpha_mtx_nan’. I did this by creating ‘alpha_mtx’ with -1 on the main diagnonal instead. The NaN values will cause problems with the calculations, so use either matrix. I opted not to ‘collapse’ the matrix by eliminating the main diagonal.
The Code:
u = sort(randi(25, 1, 11), 'descend'); % Create Wind Velocities (m/s)
h = [200 150 100 80 60 50 40 30 38 20 10]; % Altitude (m)
u_ratios = bsxfun(@rdivide, u, u'); % Divide ‘Rows’ Of ‘u’ By Columns Of ‘u'’
h_ratios = bsxfun(@rdivide, h, h'); % Divide ‘Rows’ Of ‘h’ By Columns Of ‘h'’
alpha_mtx_nan = log(u_ratios) ./ log(h_ratios);
alpha_mtx = triu(alpha_mtx_nan,1) + tril(alpha_mtx_nan,-1) + diag(-ones(1,size(alpha_mtx_nan,1),1));
  4 Comments

Sign in to comment.

More Answers (0)

Categories

Find more on Operators and Elementary Operations in Help Center and File Exchange

Tags

No tags entered yet.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!