Scilab - 查找具有不同索引的随机生成数字的平均值
Scilab - Finding the average of randomly generated numbers with different indices
假设我有一个函数可以生成介于 (1,10) 之间的随机整数。
然后,我定义一个(for 循环)有 5 次迭代。
这个(for循环)调用上面定义的函数,然后检查函数生成的整数的值。根据整数的值,决定变量"cost"。
function integer = UniformInt(a, b)
integer = min( floor( rand()*(b-a) ) + a , b);
endfunction
for i=1:5
x(i) = UniformInt(1,10);
if (x(i)<4) then
cost(i) = 15;
elseif (4<=x(i) && x(i)<=8) then
cost(i) = 27;
else
cost(i) = 35;
end
end
现在,当我 运行 并找到 x
时,假设生成的值是:
5.
9.
5.
2.
2.
因此,不同的 cost
值将是:
27.
35.
27.
15.
15.
到目前为止一切都很好。现在,我想对这些结果做的是:
检查x
的每个值出现了多少次。我可以通过 Scilab 的 tabul
函数来做到这一点:
9. 1.
5. 2.
2. 2.
现在,我真正想要编码的是:
x=9
只出现了一次,所以,cost
的平均值是35/1 = 35
.
x=5
出现了两次,所以cost
的平均值是(27+27)/2 = 27
.
x=2
出现了两次,所以cost
的平均值是(15+15)/2 = 15
.
我该怎么做?
为了后代,用户@Stéphane Mottelet 提供的答案在其中很有用(因为我上面的代码很简单)的代码如下:
function integer = UniformInt(a, b)
integer = min( floor( rand()*(b-a) ) + a , b);
endfunction
for i=1:5
x(i) = UniformInt(1,10);
if (x(i)<4) then
cost(i) = 15*rand();
elseif (4<=x(i) && x(i)<=8) then
cost(i) = 27*rand();
else
cost(i) = 35*rand();
end
end
现在成本值乘以一个随机数,所以,
如果说 x=10
的值出现了 2 次,那么 x=10
时的平均成本就不会简单地是 (35+35)/2
.
我会这样做,但答案很简单,因为现在成本值对于给定的 x 值是相同的(我想你的实际应用程序会抽取随机的成本值)
t = tabul(x);
for k = 1:size(t,1)
avg(k) = mean(cost(x == t(k)));
end
假设我有一个函数可以生成介于 (1,10) 之间的随机整数。
然后,我定义一个(for 循环)有 5 次迭代。
这个(for循环)调用上面定义的函数,然后检查函数生成的整数的值。根据整数的值,决定变量"cost"。
function integer = UniformInt(a, b)
integer = min( floor( rand()*(b-a) ) + a , b);
endfunction
for i=1:5
x(i) = UniformInt(1,10);
if (x(i)<4) then
cost(i) = 15;
elseif (4<=x(i) && x(i)<=8) then
cost(i) = 27;
else
cost(i) = 35;
end
end
现在,当我 运行 并找到 x
时,假设生成的值是:
5.
9.
5.
2.
2.
因此,不同的 cost
值将是:
27.
35.
27.
15.
15.
到目前为止一切都很好。现在,我想对这些结果做的是:
检查x
的每个值出现了多少次。我可以通过 Scilab 的 tabul
函数来做到这一点:
9. 1.
5. 2.
2. 2.
现在,我真正想要编码的是:
x=9
只出现了一次,所以,cost
的平均值是35/1 = 35
.
x=5
出现了两次,所以cost
的平均值是(27+27)/2 = 27
.
x=2
出现了两次,所以cost
的平均值是(15+15)/2 = 15
.
我该怎么做?
为了后代,用户@Stéphane Mottelet 提供的答案在其中很有用(因为我上面的代码很简单)的代码如下:
function integer = UniformInt(a, b)
integer = min( floor( rand()*(b-a) ) + a , b);
endfunction
for i=1:5
x(i) = UniformInt(1,10);
if (x(i)<4) then
cost(i) = 15*rand();
elseif (4<=x(i) && x(i)<=8) then
cost(i) = 27*rand();
else
cost(i) = 35*rand();
end
end
现在成本值乘以一个随机数,所以,
如果说 x=10
的值出现了 2 次,那么 x=10
时的平均成本就不会简单地是 (35+35)/2
.
我会这样做,但答案很简单,因为现在成本值对于给定的 x 值是相同的(我想你的实际应用程序会抽取随机的成本值)
t = tabul(x);
for k = 1:size(t,1)
avg(k) = mean(cost(x == t(k)));
end