Storing vectors of different lengths

46 ビュー (過去 30 日間)
Scott Banks
Scott Banks 2025 年 10 月 6 日 19:00
移動済み: dpb 2025 年 10 月 8 日 16:16
Dear Everyone,
Just a quick question:
I have 4 vectors, each of different lengths, and I want to store them for some calculations later on in my script.
So I tried:
Hx = [36 72 108 144] % Height of building
v = Hx./3*15 % Maximum shear force acting on the building
V = flip((15:15:v)) % 4 vectors containing the cumulative shear forces at each storey
But colon operators must be real scalars. So, this won't work.
My question is: what is the simplest way to obtain and store the 4 vectors I want of varying lengths?
Many thanks to you all.
Scott
  1 件のコメント
Scott Banks
Scott Banks 2025 年 10 月 8 日 15:50
移動済み: dpb 2025 年 10 月 8 日 16:16
Thank you, guys, that's great!

サインインしてコメントする。

採用された回答

dpb
dpb 2025 年 10 月 6 日 19:24
移動済み: dpb 2025 年 10 月 6 日 19:25
Hx = [36 72 108 144] % Height of building
Hx = 1×4
36 72 108 144
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
v = Hx./3*15 % Maximum shear force acting on the building
v = 1×4
180 360 540 720
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
V = arrayfun(@(h)[15:15:h].',v,'uni',0);
maybe is what you had in mind?
The above will be the same for each up to the preceding length since set a fixed lower limit and step size for each; maybe you intended to use a zero for the first and then the height of the previous story for the base of the next?
That would be something like
V = arrayfun(@(f,c)[f:15:c].',[0 v(1:end-1)],v,'uni',0)
V = 1×4 cell array
{13×1 double} {13×1 double} {13×1 double} {13×1 double}
  3 件のコメント
Torsten
Torsten 2025 年 10 月 6 日 21:25
編集済み: Torsten 2025 年 10 月 6 日 21:28
V = arrayfun(@(h)flipud([15:15:h].'),v,'uni',0)
or
V = arrayfun(@(f,c)flipud([f:15:c].'),[0 v(1:end-1)],v,'uni',0)
Stephen23
Stephen23 2025 年 10 月 7 日 4:58
編集済み: Stephen23 2025 年 10 月 7 日 5:04
Without the misleading square brackets:
Hx = [36,72,108,144];
v = Hx./3*15;
V = arrayfun(@(h)flip(15:15:h),v, 'uni',0);
Checking:
V{:}
ans = 1×12
180 165 150 135 120 105 90 75 60 45 30 15
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
ans = 1×24
360 345 330 315 300 285 270 255 240 225 210 195 180 165 150 135 120 105 90 75 60 45 30 15
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
ans = 1×36
540 525 510 495 480 465 450 435 420 405 390 375 360 345 330 315 300 285 270 255 240 225 210 195 180 165 150 135 120 105
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
ans = 1×48
720 705 690 675 660 645 630 615 600 585 570 555 540 525 510 495 480 465 450 435 420 405 390 375 360 345 330 315 300 285
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

サインインしてコメントする。

その他の回答 (1 件)

Umar
Umar 2025 年 10 月 7 日 5:26

Hi @Scott Banks,

I saw your question about generating four vectors of varying lengths for building shear forces. I put together a clean MATLAB approach that does exactly what you need.

%% Building heights and max shear
Hx = [36, 72, 108, 144];
v  = Hx/3*15;
step = 15;
%% Generate all descending vectors in a single, compact line
V = arrayfun(@(x) linspace(x, step, ceil(x/step)), v, 'UniformOutput', false);
%% Display each vector
cellfun(@(vec,i) fprintf('Building %d | H = %d m | Shear: %s\n', i, Hx(i),   strjoin(string(vec), ' ')), V, num2cell(1:numel(V)));

Results: please see attached.

How it works:

  • Each element of `V` is a descending vector from the maximum shear down to 15 kN.
  • The vectors automatically have the correct length for each building.
  • All vectors are stored in a cell array, making them easy to access later (`V{1}`, `V{2}`, etc.).
  • No loops are needed — the code is concise, readable, and scalable.

This approach directly gives you the four vectors you wanted, in a neat, structured way. It’s also easy to extend if you add more buildings or change the step size.

Hope this helps!

カテゴリ

Help Center および File ExchangeShifting and Sorting Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by