问题描述:
在任意拿出黑白两种颜色的棋子共 n 个,随机排成一个圆圈。然后根据以下规则放置棋子:
- 在两颗颜色相同的棋子中间放一颗黑色棋子
- 在两颗颜色不同的棋子中间放一颗白色棋子
放完后撤掉原来所放的棋子,重复以上过程,询问经过多次重复后各棋子的颜色会如何变化。
模型建立:
符号表示:
- 黑色棋子用 1表示(因为 1×1=1)
- 白色棋子用 −1表示(因为 −1×1=−1)
过程描述:
- 根据棋子的初始状态,依次更新每个棋子的颜色。
- 重复该过程多次,观察棋子颜色的变化。
结论:
- 当棋子数为 时,至多经过 次操作,就可以全部变为黑子。
- 当棋子数不为 时则一般不能全部变为黑子
Matlab程序:
文件中包含了一个Matlab程序用于模拟该问题,核心代码如下:
Matlab
n=4; % 定义棋子数
times=6; % 定义迭代次数
x0=zeros(1,n);
x1=zeros(1,n); % 定义数组
for i=1:n
k=rand(1,1);
if(k>0.5)
x0(i)=1;
else
x0(i)=-1;
end
end; % 赋初值
x0
for i=1:times
i
for k=1:n-1
x1(k)=x0(k)*x0(k+1);
end
x1(n)=x0(n)*x0(1);
x1 % 显示各次结果
x0=x1;
end