【发布时间】:2018-02-17 23:11:39
【问题描述】:
我的问题是:我必须编写一个代码,该代码采用 0 和 1 的 6x6 矩阵,并检查矩阵每个位置的某些条件以迭代它,并根据条件创建一个具有新值的矩阵,基于中心值的相邻元素。条件如下:
如果中心值为 1,它有 3 个选项:
-如果在相邻单元格中只有一个单元格包含数字 1,或者 cero 单元格包含数字 1,则中心值从 1 转换为 0。
-如果中心值的相邻单元格总共包含4个或更多的1,则从1转换为0。
-如果相邻单元格总共包含 2 或 3 个数字 1,则保持为 1。
现在,如果中心值为 0,则它有 1 个选项:
-如果相邻单元格总共包含 3 个 1(顶部),它将从 0 转换为 1。
-否则一直为0
矩阵如下:
A = [0 1 0 1 1 0; 1 0 1 0 0 1; 1 1 0 1 1 1; 0 0 1 0 0 0; 0 1 0 0 0 1; 1 1 1 0 0 1]
比如,A(5,2)位置的数字1应该变成0,因为它周围有4个1,再比如A(4,6)的0 ) 应该变成 1,因为它周围有 3 个 1。
我创建了 2 个循环,其中 1 个用于行,另一个用于列,以遍历矩阵的每个值,但在有条件的情况下,我不知道如何检查周围单元格或相邻单元格的值
我是 Matlab 新手,如果你能帮助我,那就太好了!谢谢。
编辑:添加了我到目前为止所做的代码。
[f,c]=size(A)
for i=1:f
for j=1:c
if A(i,:)==1
if A(i+1,j+1)==1 && A(i+1,j-1)==1 && A(i-1,j-1)==1
A(i,:)=1;
end
elseif A(i,:)==0
if A(i+1,j+1)==1 && A(i+1,j-1)==1 && A(i-1,j-1)==1
A(i,:)=1;
end
end
end
end
我尝试将条件设置为 (i-1,j-1),(i+1,j+1),(i+1,j),(i,j+1),(i- 1,j),(i,j-1) 但我认为这行不通,因为我正在检查 coditions 作为一个组,而不是计算邻居中 1 的总数
编辑 2:一直在考虑如何解决它,我认为我可以创建一个变量来计算中心值周围 1 的数量,但它给了我一个错误,它超出了矩阵的维度第 50 行,即使在我考虑了第一列、行和最后一列、行之后。
这是完整的代码:
[f,c] = size(gen0);
nrogen = input('Introduzca el número de generaciones de bacterias que quiera crecer: ');
if isempty(nrogen) || ~isnumeric(nrogen) || ~isscalar(nrogen) || round(nrogen)~=nrogen || nrogen < 0
disp('Número no pertinente, intente de nuevo');
return
end
nac = 0;
mue = 0;
neigh = 0;
for k=1:nrogen
for i=1:f
for j=1:c
if i>1 && i<6
if gen0(i+1,j+1)==1
neigh=neigh+1;
end
if gen0(i,j+1)==1
neigh=neigh+1;
end
if gen0(i+1,j)==1
neigh=neigh+1;
end
if gen0(i-1,j-1)==1
neigh=neigh+1;
end
if gen0(i,j-1)==1
neigh=neigh+1;
end
if gen0(i-1,j)==1
neigh=neigh+1;
end
elseif i==1
if gen0(i+1,j+1)==1
neigh=neigh+1;
end
if gen0(i,j+1)==1
neigh=neigh+1;
end
if gen0(i+1,j)==1
neigh=neigh+1;
end
elseif i==6
if gen0(i-1,j-1)==1
neigh=neigh+1;
end
if gen0(i,j-1)==1
neigh=neigh+1;
end
if gen0(i-1,j)==1
neigh=neigh+1;
end
if gen0(i,:)==1
if neigh==2 || neigh==3
gen0(i,:)=1;
elseif neigh==1 || neigh==0
gen0(i,:)=0;
end
end
end
end
disp(gen0);
end
if gen0(i,:)==1
if neigh==2 || neigh==3
gen0(i,:)=1;
elseif neigh==1 || neigh==0 || neigh>3
gen0(i,:)=0;
end
end
end
【问题讨论】:
-
你能告诉我们循环(你拥有的所有代码)吗?最好从错误中吸取教训,而不是仅仅复制正确的答案。
-
@ViG 添加了代码。这就是我所拥有的,我是一般编程的新手,所以我对这个问题有点沮丧。感谢您的回答!
-
@ViG 一直在思考如何自己制作!查看帖子,谢谢