📄 dnareset.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 + -