FOR循环/向量化数列

FOR loop / vectorize number sequence

我正在尝试创建一个脚本,通过遍历每个脉冲频率 0-50Hz 及其占空比 0-100%[ 来填充数组=36=]

序列应如下所示:

Freq  Duty Cycle
1.00     0
1.01     0
1.02     0
...
1.00     1
1.01     1
1.02     1
...
1.00     2
1.01     2
1.02     2

我有第一部分的 for 循环:

T = [];
num_of_values=0
for freq = 1:.01:2
    num_of_values = num_of_values + 1;
    T = [T; num_of_values freq]; %append to table
    end

这给了我:

1 1.00
2 1.01
3 2.02
...

注意:我在开头加了一个增量,看看创建了多少个数字。

我无法在循环中附加占空比 for 循环。

是否还有办法将其矢量化以不使用显式循环?

我尝试在此处添加占空比 for 循环,但我没有得到我想要得到的输出:

T = [];
num_of_values = 0
for freq = 1:.01:2
    num_of_values = num_of_values + 1;
    for duty_cycle = 0:1:2
    end
    T = [T; num_of_values freq duty_cycle]; %append to table
end

占空比循环应该在外面,然后你通过里面的频率循环。您应该能够在不反转循环顺序的情况下反转矩阵中的列顺序。
像这样:

T=[];
duty_cycle=0
num_of_values=0
for duty_cycle = 0:1:100
    for freq = 1:.01:2
        num_of_values=num_of_values+1;
        T=[T;num_of_values duty_cycle freq]; %append to table
    end
end

T(1:5, :)
T(100:105, :)
T(200:205, :)

结果:

ans =
1.0000   1.0000        0
2.0000   1.0100        0
3.0000   1.0200        0
4.0000   1.0300        0
5.0000   1.0400        0

ans =
100.0000     1.9900          0
101.0000     2.0000          0
102.0000     1.0000     1.0000
103.0000     1.0100     1.0000
104.0000     1.0200     1.0000
105.0000     1.0300     1.0000

ans =
200.0000     1.9800     1.0000
201.0000     1.9900     1.0000
202.0000     2.0000     1.0000
203.0000     1.0000     2.0000
204.0000     1.0100     2.0000
205.0000     1.0200     2.0000

您真的不应该养成在循环中重新分配已知大小的数组的习惯。

第一列就是重复N次的频率。对于每个占空比,假设 N 为 100。您可以使用 repmat or kron 来计算它。第二列是 N 个占空比,每个占空比都针对频率重复,您可以使用 kron.

计算
f = [0:0.01:50]';
ds = [0:100]';

m = numel(f);
n = numel(ds);

result = [repmat(f, n, 1) kron(ds, ones(m, 1))]