我一直在嘗試撰寫一個執行以下操作的 MATLAB 函式:
接受輸入“upper”和“number”,它們都是正整數。程式應采用區間 [0,"upper"] 并將其切割成具有整數端點且長度相同的“數字”子區間,除了最后一個區間(如果區間不能被數字整除,則最后一個間隔可以包含更少的整數條目)。
然后程式應該創建一個向量 x ,其中的條目是這些子間隔的開始/結束。
例如,如果我有upper = 11and number = 3,那么程式應該采用向量
R = [0 1 2 3 4 5 6 7 8 9 10 11]
并生成
x = [0 4 8 11].
它應該首先創建子區間向量
r1 = [0 1 2 3 4]
r2 = [4 5 6 7 8]
r3 = [8 9 10 11]
然后回圈遍歷并將 s的第一個條目和端點x分配給s 的其他條目,但我不知道如何告訴 MATLAB 執行此操作。0rx
我的另一個問題是我不知道如何告訴 MATLAB 如何確定區間 [0, "upper"] 是否可以被 "number" 整除,如果不是,如何使最后一個子區間短于其他。
我已經坐了幾天了,但我沒有得到任何地方。
任何正確方向的想法或指示將不勝感激,謝謝。
我已經弄清楚了如何處理 when 的情況mod(upper, number) = 0,即當 upper 可以被數字完全整除時。對于這些情況,我只是讓
delta = upper/number;
接著
for i=1:(number 1)
x(i) = (i-1)*delta;
end
出現困難的地方是上限和數字不能完全整除。
uj5u.com熱心網友回復:
給定
upper = 12;
number = 3;
您可以R使用生成
R = 0:upper; % [0, 1, 2, ..., upper]
如果number是 的除數,upper則輸出區間為upper/number。如果不是,那么這個商應該被四舍五入,所以在最后的間隔中剩下一個更小的“塊”。所以
interval = ceil(upper/number);
現在我們只需要構建輸出陣列x。如果number是除數,upper那么冒號表示法會給出你想要的
x = 0:interval:upper; % only useful if number is a divisor of upper
否則,這實際上不會包括upper; 我們可以處理以下兩種可能的情況if:
if mod(upper,number) == 0
x = 0:interval:upper; % When number divides upper, this includes upper
else
x = [0:interval:upper, upper]; % Otherwise we need to append upper
end
upper您可以通過在創建程序中減去 0.5(或任何正值 <1)來處理此問題,x這將確保不包含它,然后始終附加它。基本上強迫上述else情況。
然后整體代碼變成了這樣,注意我們甚至不需要生成R,除非你想要它作為輸出:
upper = 11; % Upper limit
number = 3; % Number of intervals
interval = ceil(upper/number); % Interval size
x = [0:interval:(upper-0.5), upper]; % Create output
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/531271.html
標籤:matlab向量间隔
