请问一下这种应该怎么进行matlab编程?

有四个状态:S0={(1,1,1,) } S1={(1,1,2);(1,2,1);(2,1,1)} S2={(2,2,1);(2,1,2);(1,2,2)} S3={(2,2,2)}
定义一个S为N*N的数组,用来存放各个状态之间转变的次数
程序运行后出现的Data数组中的内容如下:
2,1,1
2,2,1
1,1,2
1,1,1
2,1,1
1,1,1
1,1,2
1,2,1
2,1,1
1,1,1
1,1,2
1,2,2
相邻两状态的变化为:S1→S2有2次 S2→S1有1次 S1→S1有3次 S1→S0有3次 S0→S1有3次
最后输出的矩阵S=0 3 0 0
3 3 2 0
0 1 0 0
0 0 0 0

请观察:
1,凡是为状态0 ,三个数相加为3.
2,凡是为状态1,三个数相加为4.
3,凡是为状态2,三个数相加为5.
4,凡是为状态3,三个数相加为6.
而下面的状态变化,行表示原状态,列表示现状态. 例如,第三行第二列的1表示由S2变为S1.
所以具体思路如下.
1,创建N*N的数组S用来存储转变的次数.创建N*N的数组U用来存读取到的输入量。

2,将输入量读取到U.
3,计算U第一列各数之和.判断行数,记录在x内。计算第二列各数之和,计算列数,记录在y内。
4,判断行列.
5,累加到S内。
6,把y的值输入到x里,计算第三列各数之和,记录到y内后不断重复4,5,6。直到计算到最后一行数。

6,输出.
具体来说读取文件不知道你习惯用什么,我知道一个textread
可以用来读取。追问

可否详细解释一下第三步?不是太懂,谢谢

追答

第一步。让S=zeros(4),得到4*4的全0矩阵。

第二步,把数据读取到了U。根据具体情况用textread或load。
U=[2 1 1;2 2 1;1 1 2;1 1 1;2 1 1;1 1 1;1 1 2;1 2 1;2 1 1;1 1 1;1 1 2;1 2 2]
第三步,之前我的的思路是用for循环逐行计算。不过我现在想起来一个好办法,第三步你可以用sum来做。
x=sum(U,2).计算出的x=[4;5;4;3;4;3;4;4;4;3;4;5]
y=2*ones(12,1).得到y=[2;2;2;2;2;2;2;2;2;2;2;2]
令z=x-y.得到的z=[2;3;2;1;2;1;2;2;2;1;2;3]
这样,z就是纪录了每步所处的行列了。
接下来就是纪录到S里了。这里我打算用for循环做。

i=1;o=0;p=0;
while i<12
o=z(i,1);p=z(i+1,1);S(o,p)=S(o,p)+1;i=i+1;
end

温馨提示:答案为网友推荐,仅供参考
相似回答