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

📄 dnareset.m

📁 DNA限制性图谱的绘制方案程序 %采用改进的穷举法搜索DNA片段排序
💻 M
字号:
%DNA限制性图谱的绘制方案程序
%采用改进的穷举法搜索DNA片段排序,data1,data2是传进来的两组数据,由SPDP法中测得
%例如data1=[1 14 12 3 7 8 9 6 11 4 12 3 13 2 5 10];data2=[1 1 2 1 2 2 1 2 3];
function DNAreset(data1,data2)  
matrix=[];
DNA_sequence=[];
sequence=1;
%预处理data1,将其中相同的行(即数对)调整为不同
for i=1:length(data1)
    for j=i:length(data1)-1
        if  judge(data1(i,:),data1(j+1,:))
            temp=data1(i,1);
            data1(i,1)=data1(i,2);
            data1(i,2)=temp;
        end
    end
end
%采用四层循环历遍搜索DNA片段排序
for i=1:length(data1)
   matrix=data1;
   matrix(i,:)=exchange(matrix(i,:));
     for j=1:length(data1)
        matrix(j,:)=exchange(matrix(j,:));
           for h=1:length(data1)
               matrix(h,:)=exchange(matrix(h,:));
                for g=1:length(data1)
                    matrix(g,:)=exchange(matrix(g,:));
                    temp=search(matrix,data1,data2);
                    if length(temp)~=0
                        %将满足要求的DNA片段排序存入DNA_sequence矩阵中
                        DNA_sequence(sequence,:)=temp;
                        sequence=sequence+1;
                     end
                 end
            end
       end
 end

%删除已求得的所有DNA排序中重复的行
len=length(DNA_sequence);
del_number=0;
 for i=1:len-del_number
     j=i+1;
     while j<len-del_number+1
        if  judge(DNA_sequence(j,:),DNA_sequence(i,:)) %找出相同的行
            DNA_sequence(j,:)=[];%删除该行                             
            j=j-1;
            del_number=del_number+1;
        end
        j=j+1;
     end
end

%输出求得的DNA排序  
for i=1:size(DNA_sequence,1)
         format compact;
         str=sprintf('第%d种DNA片段的排列顺序为:',i);
         disp(str);
         disp(DNA_sequence(i,:));
end

%由data1和data2搜索满足要求的DNA片段长度
 function reset_sequ=search(matrix,data1,data2)
     %初始化各数组和数据
     check=zeros(1,length(data2));
     result=[];
     New_matrix=[];
     k=1;
    [Ascend_array,Index]=sort(matrix(:,1));
    for i=1:length(Index)
        New_matrix(i,:)=matrix(Index(i),:);
    end
    for j=1:length(data2)
          if j==1
             check(j)=New_matrix(j,1);
          elseif j==length(data2)
             check(j)=New_matrix(j-1,2);
          elseif j>1&j<length(data2)
             check(j)=New_matrix(j,1)-New_matrix(j-1,1);
          end
     end
     if  judge(sort(check),sort(data2))
         result(k,:)=check;        
         k=k+1;
     end
     reset_sequ=result;
     
 %判断两个数组是否相等,相等则返回1,否则返回0。
 function f=judge(array1,array2)
 if length(find(array1-array2)~=0)==0
     f=1;
 else
     f=0;
 end

%交换数组的第一项和第二项  
function exchange_array=exchange(array)
    temp=array(1);
    array(1)=array(2);
    array(2)=temp;
    exchange_array=array;
    

⌨️ 快捷键说明

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