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))]
我正在尝试创建一个脚本,通过遍历每个脉冲频率 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))]