我无法理解书中用于描述prng测试算法的符号。以下是一些有问题的片段:
我的困惑是:j
的意义是什么?它根本没有明确定义。它应该是向量的索引吗?它怎么不从0开始呢?
继续:
我知道左箭头是分配。但同样,该算法指的是j
,仅指j0
和j1
。再次,它似乎是j的指数。但后来我特别对这条线感到困惑,&#34;然后对于j <- j, j1 - 1 ..., j0
&#34;因为它似乎指的是递减j
的索引,但它从j
本身而不是下标中减去。
非常感谢任何帮助,谢谢。
答案 0 :(得分:3)
在我看来,j
在这里有多个独立用途。这是典型的数学家编写的CS文本,他们 - 你可能会惊讶地发现 - 对于他们的符号往往非常草率,期望读者从含意和背景中剔除所有种的东西
在第一段中,作者使用V[j]
来引用数组的20个元素向量的任意元素(并且j 做从零)。他们正在定义如何从一维随机数流中填充这个固定宽度向量数组(您可能会觉得将其视为一个二维数组更为舒适)。如果我明确地写出数组的前两行可能会有帮助吗?
V0 = (Y0, Y1, Y2, ... Y19)
V1 = (Y20, Y21, Y22, ... Y39)
⋮
Vj = (Y[j*20], Y[j*20+1], ... Y[j*20+19])
在第二段中,A[j]
也是数组的任意元素,但它是一个不同的,不相关的浮点数数组。
在第三和第四段中,j
,j0
和j1
似乎是三个独立的索引变量,通过将算法塞进散文中,情况变得更加混乱。作者应该使用伪代码并选择更好的变量名。这是尝试生成一个伪代码版本 - 我故意保留了坏的变量名称,所以你可以看到它的对应关系。
Algorithm_S (m, n):
# S1: Initialize.
var A: float[n+1]
var j, j0, j1: int
for j in 0, 1, ..., n:
A[j] ← 0
A[1] ← 1
# S2: Update probabilities.
j0 ← 1
j1 ← 1
repeat n-1 times:
j1 ← j1 + 1
for j in j1, j1 - 1, ..., j0:
A[j] ← (j/m)*A[j] + (1 + 1/m - j/m)*A[j-1]
if A[j] < 1e-20:
A[j] ← 0
if j = j1: j1 ← j1 - 1
if j = j0: j0 ← j0 + 1
# S3: ...
我不确定这是否正确,因为即使在打开它之后它对我来说也没有多大意义。问题可能是你只引用了算法的前两个步骤,所以我不知道这个&#34;辅助数组的概率&#34;将用于,我无法判断代码应该做它正在做的事情。别担心。
总结:你很困惑因为这本书令人困惑。不是你的错。我建议你找一本不那么令人困惑的书,如果你有更多的练习阅读数学期刊文章,也许可以回到这本书。
答案 1 :(得分:0)
fig = figure;
plot(x1/length(y1)*end_of_data, y1, 'LineWidth',2, 'Color',Farbe1, 'DisplayName','First plot')
hold on
plot(x2/length(y2)*end_of_data, y2, 'LineWidth',2, 'Color',Farbe2, 'DisplayName','Second plot')
plot(x3/length(y3)*end_of_data, y3, 'LineWidth',2, 'Color',Farbe3, 'DisplayName','Third plot')
legend
是一个虚拟变量。当您为fig = plt.figure()
ax = fig.add_subplot(111)
# Plot some random data
values = np.random.rand(4,1);
graph_1, = ax.plot(values, label='original curve')
# Keep track of x/y coordinates
lines = []
xcoords = []
ycoords = []
def onclick(event):
xcoords.append(event.xdata)
ycoords.append(event.ydata)
if len(xcoords)==2:
lines.append(ax.plot(xcoords,ycoords,'.-'))
xcoords[:] = []
ycoords[:] = []
# Refresh the plot
fig.canvas.draw()
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()
撰写j
时,它会在A[j]
和j0 <= j <= j1
之间的索引处用作占位符来表示A
的所有元素。
当您对算法进行编程时,您可能会声明一个或多个循环变量来反映这一点。