Algorithm 加速一种Mealy机器输出算法-MATLAB

Algorithm 加速一种Mealy机器输出算法-MATLAB,algorithm,matlab,Algorithm,Matlab,让X成为一台粉状机器。更具体地说,我将它表示为一个3×3×2×N的数组,其中N是状态数。将其视为一行n3×3矩阵和后面的另一个类似层。后面的层提供状态转换,前面的层提供输出值。假设我从状态N和输入(x,y)开始,得到输出x(x,y,1,N),然后移动到状态x(x,y,2,N)。对于输入序列(x,y)…(x',y'),我想知道输出序列,目前正在使用以下代码。任何加速建议都是非常受欢迎的。一个相关的问题是,当比较矩阵行时,“isequal”是否比比较单元格条目时工作得更快(与另一个“检查”代码相关,

让X成为一台粉状机器。更具体地说,我将它表示为一个3×3×2×N的数组,其中N是状态数。将其视为一行n3×3矩阵和后面的另一个类似层。后面的层提供状态转换,前面的层提供输出值。假设我从状态N和输入(x,y)开始,得到输出x(x,y,1,N),然后移动到状态x(x,y,2,N)。对于输入序列(x,y)…(x',y'),我想知道输出序列,目前正在使用以下代码。任何加速建议都是非常受欢迎的。一个相关的问题是,当比较矩阵行时,“isequal”是否比比较单元格条目时工作得更快(与另一个“检查”代码相关,而不是下面的代码)

函数[T,O]=mealy(X,w,k) %给定一台Mealy机器X,输入单词w和起始状态k,T==1意味着 %这台米利机器没有足够的信息输出 %对于输入字w。否则T==0,O是w的输出序列。 L=长度(w); S=零(1,L);%状态序列 O=单元(1,L);%字母和输出序列 T=0; S(1)=k;%从k州开始 %从输入字w构建输出序列O 对于i=2:L e=w{i-1}; S(i)=X(e(1),e(2),2,S(i-1)); 如果S(i)<0,T=1;返回,结束 t=X(e(1),e(2),1,S(i-1)); 如果t<-1.5,t=1;返回,结束 O{i-1}=[e(1),e(2),t]; 结束 e=w{L}; t=X(e(1),e(2),1,S(L)); 如果t<-1.5,t=1;返回,结束 O{L}=[e(1),e(2),t]; 结束
function [ T, O ] = mealy( X ,w ,k )
%Given a Mealy machine X, input word w and starting state k, T == 1 means
%this mealy machine does not have sufficient information to give an output
%for input word w. Else T == 0 and O is the output sequence for w. 

L = length(w);
S = zeros(1,L); %state sequence
O = cell(1,L); %letter and output sequence
T = 0;
S(1) = k; %start from state k 

% build output sequence O from input word w
for i = 2:L   
e = w{i-1};
S(i) = X(e(1),e(2),2,S(i-1));
    if S(i) < 0, T = 1; return, end    
t = X(e(1),e(2),1,S(i-1));
    if t < -1.5, T = 1; return, end    
O{i-1} = [e(1),e(2),t];
end

e = w{L};
t = X(e(1),e(2),1,S(L));
if t < -1.5, T = 1;return, end
O{L}= [e(1),e(2),t];
end