⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test40-071013.m

📁 金融时间序列中
💻 M
字号:
%2007年4月14日 第四篇文章 最大命中子模式树算法 test100

clear
p=4;
q=6;
minconf=0.25;

%产生人工仿真数据,a**d,重复2500次
ds=2500;
for i=1:ds
   s((i-1)*p+1)='a';
   s((i-1)*p+4)='d';
   M=1;
   %randn('state',0);
   while M==1
      %v=normrnd(0,0.1);
      v=randn;
      if (v>=-3)&(v<=3)
         s((i-1)*p+2)=char(97+floor((v+3)*q/6));
         M=0;
      end
   end
   %randn('state',1);
   while M==0
      %v1=normrnd(-3,3);
      v1=randn;
      if (v1>=-3)&(v1<=3)
         s((i-1)*p+3)=char(97+floor((v1+3)*q/6));
         M=1;
      end
   end
end

%计算每个1-模式的计数
n=length(s)/p;
count(1:14)=0;
for i=1:n
   for j=1:p
      d(i,j)=s((i-1)*p+j);
   end
   if d(i,1)=='a'
      count(1)=count(1)+1;
   end
   if d(i,2)=='a'
      count(2)=count(2)+1;
   elseif d(i,2)=='b'
      count(3)=count(3)+1;
   elseif d(i,2)=='c'
      count(4)=count(4)+1;
   elseif d(i,2)=='d'
      count(5)=count(5)+1;
   elseif d(i,2)=='e'
      count(6)=count(6)+1;
   elseif d(i,2)=='f'
      count(7)=count(7)+1;
   end
   if d(i,3)=='a'
      count(8)=count(8)+1;
   elseif d(i,3)=='b'
      count(9)=count(9)+1;
   elseif d(i,3)=='c'
      count(10)=count(10)+1;
   elseif d(i,3)=='d'
      count(11)=count(11)+1;
   elseif d(i,3)=='e'
      count(12)=count(12)+1;
   elseif d(i,3)=='f'
      count(13)=count(13)+1;
   end
   if d(i,4)=='d'
      count(14)=count(14)+1;
   end
end

%选出频繁1-模式,构成F11
L1=0;
for i=1:14
   if count(i)>=minconf*n
      L1=L1+1;
      F1(L1)=i;
   end
end
F1
for i=1:L1
   if F1(i)==1
      F11(i,:)='a***';
   elseif F1(i)==2
      F11(i,:)='*a**';
   elseif F1(i)==3
      F11(i,:)='*b**';
   elseif F1(i)==4
      F11(i,:)='*c**';
   elseif F1(i)==5
      F11(i,:)='*d**';
   elseif F1(i)==6
      F11(i,:)='*e**';
   elseif F1(i)==7
      F11(i,:)='*f**';
   elseif F1(i)==8
      F11(i,:)='**a*';
   elseif F1(i)==9
      F11(i,:)='**b*';
   elseif F1(i)==10
      F11(i,:)='**c*';
   elseif F1(i)==11
      F11(i,:)='**d*';
   elseif F1(i)==12
      F11(i,:)='**e*';
   elseif F1(i)==13
      F11(i,:)='**f*';
   elseif F1(i)==14
      F11(i,:)='***d';
   end
end
F11=F11

%由频繁1-模式形成候选最大模式Cmax

k1=0;
for i=1:p
   D=F11(:,i);
   k=0;
   for j=1:L1
      if D(j)~='*'
         k1=k1+1;
         Cmax(k1)=D(j);
         k=1;
      end
      if (j==L1)&(k==0)
         k1=k1+1;
         Cmax(k1)='*';
      end
   end
   k1=k1+1;
   Cmax(k1)='0';
end
Cmax=Cmax

%判断Cmax的L-长度
len=0;
len1=0;
for i=1:length(Cmax)
   if (isletter(Cmax(i))==1)&(len==0)
      len=len+1;
      Lth(len)=Cmax(i);
      len1=len1+1;
   elseif (isletter(Cmax(i))==1)&(len~=0)
      M1=0;
      for j=1:len1
         if Cmax(i)~=Lth(j)
              M1=M1+1; 
         end
      end
      if M1==len1
         len=len+1;
         Lth(len)=Cmax(i);
         len1=len;
      end
   end
end
Lth=Lth
Lth_length=length(Lth)

%构造最大子模式图
Lnode=struct('x',0,'y',0);
for i=1:(len-1)
   Lnode(i).x=len+1-i;
   Lnode(i).y=1;
   %Lnode1(i,2)=Snode(1).cx(len+1-i);
end

D1=findstr(Cmax,'0');
H1=struct('x1',{},'x2',{},'x3',{},'x4',{},'x5',{},'x6',{},'x7',{});
H2=struct('x1',{},'x2',{},'x3',{},'x4',{});
H3=struct('x1',{},'x2',{},'x3',{},'x4',{});

for i=1:2500
   % Cmax与每个周期段作交运算,得到命中的最大子模式
    %判断命中的最大子模式是否为空
   for j=1:4
      D2(j)=s((i-1)*4+j);
      if j==1
         d3=findstr(Cmax(1:(D1(j)-1)),D2(j));
         if isempty(d3)==1
            H(j)='*';
         else
            H(j)=D2(j);
         end
      else
         d3=findstr(Cmax((D1(j-1)+1):(D1(j)-1)),D2(j));
         if isempty(d3)==1
            H(j)='*';
         else
            H(j)=D2(j);
         end
      end
   end
   if strcmp(H,'****')==0
      if isempty(H1)==1
         H1(1).x1=H(1);
         H1(1).x2=H(2);
         H1(1).x3=H(3);
         H1(1).x4=H(4);
         H1(1).x5=1;
         H1(1).x6=p-length(findstr(H,'*'));
      else
         k=0;
         for j1=1:length(H1)
            H2(1).x1=H1(j1).x1;
            H2(1).x2=H1(j1).x2;
            H2(1).x3=H1(j1).x3;
            H2(1).x4=H1(j1).x4;
            H3(1).x1=H(1);
            H3(1).x2=H(2);
            H3(1).x3=H(3);
            H3(1).x4=H(4);
            c1=struct2cell(H2);
            c2=struct2cell(H3);
            if strcmp(c1,c2)==1
               H1(j1).x5=H1(j1).x5+1;
            else
               k=k+1;
            end
         end
         if k==length(H1)
            H1(k+1).x1=H(1);
            H1(k+1).x2=H(2);
            H1(k+1).x3=H(3);
            H1(k+1).x4=H(4);
            H1(k+1).x5=1;
            H1(k+1).x6=p-length(findstr(H,'*'));
         end
      end
   end       
end

k2=0;
for j=1:length(H1)
   k2=k2+H1(j).x5;
end
k2=k2

%在命中模式集H1中,求每一个最大命中子模式的超模式;
for j=1:length(H1)
   k=0;
   for i=1:length(H1)
      if H1(j).x6<H1(i).x6
         H2(1).x1=H1(j).x1;
         H2(1).x2=H1(j).x2;
         H2(1).x3=H1(j).x3;
         H2(1).x4=H1(j).x4;
         %H1(j)与H1(i)作交运算
         if isempty(findstr(H1(j).x1,H1(i).x1))==1
            H3(1).x1='*';
         else
            H3(1).x1=H1(j).x1;
         end
         if isempty(findstr(H1(j).x2,H1(i).x2))==1
            H3(1).x2='*';
         else
            H3(1).x2=H1(j).x2;
         end
         if isempty(findstr(H1(j).x3,H1(i).x3))==1
            H3(1).x3='*';
         else
            H3(1).x3=H1(j).x3;
         end         
         if isempty(findstr(H1(j).x4,H1(i).x4))==1
            H3(1).x4='*';
         else
            H3(1).x4=H1(j).x4;
         end
         %H1(j)与H1(i)作交运算的结果H3与H1(j)--H2比较,如果H3==H2,则H1(i)是H1(j)的超模式
         c1=struct2cell(H2);
         c2=struct2cell(H3);
         if strcmp(c1,c2)==1
            k=k+H1(i).x5;
         end
      end
   end
   H1(j).x7=k+H1(j).x5;
end

         



         
   


            
         
      
      

   
      





      
      
   
   







      

      
      

   


   


   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -