额。。。我们老师说做下比赛抵消一次作业。。。。就只好做做了。。。虽然做的很烂,有点还是当做笔记用一下吧。。。,主要是保存下怎么读取txt文档提取有用信息和做二重积分的写法,感觉这个写法还OK,能跑就是了
read.m
clear;
clc;
fid=fopen('NC_012920_1_cds.txt');
[yi,count]=fread(fid,Inf,'char'),
y=char(yi');
fclose(fid);
%判断第一个基因序列在哪,count总数
%变量解释
end_number=0; %中间变量,结束的元素号,每一段进行的标识
start_number=0; %中间变量,开始的元素号,每一段进行的标识
text_number=1; %文本号,中间变量,用来控制循环
text_count=1; %记录一共可能有几组数据的中间量
textstartField=0; %记录开始的元素号,行矩阵
textendField=0; %记录结束的元素号,行矩阵
while(count-end_number>1)
for m=text_number:1:count
if strcmp(y(m),'A')||strcmp(y(m),'T')||strcmp(y(m),'C')||strcmp(y(m),'G')
if strcmp(y(m+1),'A')||strcmp(y(m+1),'T')||strcmp(y(m+1),'C')||strcmp(y(m+1),'G')
if strcmp(y(m+2),'A')||strcmp(y(m+2),'T')||strcmp(y(m+2),'C')||strcmp(y(m+2),'G')
if strcmp(y(m+3),'A')||strcmp(y(m+3),'T')||strcmp(y(m+3),'C')||strcmp(y(m+3),'G')
start_number=m;
break;
end;
end;
end;
end;
end;
%判断结尾序列
for m=start_number:1:count
if (count-m<4)
if (~strcmp(y(m),'A'))&&(~strcmp(y(m),'T'))&&(~strcmp(y(m),'C'))&&(~strcmp(y(m),'G'))
end_number=m;
break;
end
end
if (~strcmp(y(m),'A'))&&(~strcmp(y(m),'T'))&&(~strcmp(y(m),'C'))&&(~strcmp(y(m),'G'))
if (~strcmp(y(m+1),'A'))&&(~strcmp(y(m+1),'T'))&&(~strcmp(y(m+1),'C'))&&(~strcmp(y(m+1),'G'))
if (~strcmp(y(m+2),'A'))&&(~strcmp(y(m+2),'T'))&&(~strcmp(y(m+2),'C'))&&(~strcmp(y(m+2),'G'))
end_number=m;
break;
end
end
end
end;
textstartField(text_count)=start_number;
textendField(text_count)=end_number;
text_count=text_count+1;
text_number=end_number+1;
end
%end
%clc
%textstartField
%textendField
%测试打印数据
%for x=1:1:text_count-1
%y(textstartField(x):textendField(x))
%end
%改这个选择哪一个txt文档中的哪一组数据
xx=1; %从第一组开始DNA,又是复用的x,不习惯可以换别的字母,最大为text_count-1
n=1; %转换数据列第一个为1
for k=textstartField(xx):1:textendField(xx)
if (~strcmp(y(k),'A'))&&(~strcmp(y(k),'T'))&&(~strcmp(y(k),'C'))&&(~strcmp(y(k),'G'))
n=n;
continue;
end;
if (strcmp(y(k),'A')==1)
DATA_A(n)=1;
else DATA_A(n)=0;
end
if (strcmp(y(k),'G')==1)
DATA_G(n)=1;
else DATA_G(n)=0;
end
if (strcmp(y(k),'C')==1)
DATA_C(n)=1;
else DATA_C(n)=0 ;
end
if (strcmp(y(k),'T')==1)
DATA_T(n)=1;
else DATA_T(n)=0;
end
n=n+1;
end
%计算功率谱和信噪比
pi=3.14;
N=length(DATA_A);
for k=1:1:N
n=N;
X1=0;X2=0;X3=0;X4=0;
while n>0
w=exp(-j*2*pi*n*k/N);
X1=w*DATA_A(n)+X1;
X2=w*DATA_T(n)+X2;
X3=w*DATA_C(n)+X3;
X4=w*DATA_G(n)+X4;
n=n-1;
end
p(k)=(abs(X1)^2+abs(X2)^2+abs(X3)^2+abs(X4)^2)
end
%绘图,这里复用了下X,影响不大,不习惯可以用别的符号做标识
xxx=1:1:length(DATA_A)/2;
plot(xxx,p(1:1:length(DATA_A)/2));
%figure;
%x2=1:1:length(DATA_A);
%plot(x2,p);
%AVG_E平均功率,R信噪比
max_number=fix(N/3);
if p(max_number)<p(max_number+1)
max_number=max_number+1;
end
if p(max_number)<p(max_number-1)
max_number=max_number-1;
end
%max_number
AVG_E=sum(p)/N;
R=p(max_number)/AVG_E
read2.m
clear;
clc;
fid=fopen('AB304259.1_n.txt');
[yi,count]=fread(fid,Inf,'char'),
y=char(yi');
fclose(fid);
%判断第一个基因序列在哪,count总数
%变量解释
end_number=0; %中间变量,结束的元素号,每一段进行的标识
start_number=0; %中间变量,开始的元素号,每一段进行的标识
text_number=1; %文本号,中间变量,用来控制循环
text_count=1; %记录一共可能有几组数据的中间量
textstartField=0; %记录开始的元素号,行矩阵
textendField=0; %记录结束的元素号,行矩阵
while(count-end_number>1)
for m=text_number:1:count
if strcmp(y(m),'A')||strcmp(y(m),'T')||strcmp(y(m),'C')||strcmp(y(m),'G')
if strcmp(y(m+1),'A')||strcmp(y(m+1),'T')||strcmp(y(m+1),'C')||strcmp(y(m+1),'G')
if strcmp(y(m+2),'A')||strcmp(y(m+2),'T')||strcmp(y(m+2),'C')||strcmp(y(m+2),'G')
if strcmp(y(m+3),'A')||strcmp(y(m+3),'T')||strcmp(y(m+3),'C')||strcmp(y(m+3),'G')
start_number=m;
break;
end;
end;
end;
end;
end;
%判断结尾序列
for m=start_number:1:count
if (count-m<4)
if (~strcmp(y(m),'A'))&&(~strcmp(y(m),'T'))&&(~strcmp(y(m),'C'))&&(~strcmp(y(m),'G'))
end_number=m;
break;
end
end
if (~strcmp(y(m),'A'))&&(~strcmp(y(m),'T'))&&(~strcmp(y(m),'C'))&&(~strcmp(y(m),'G'))
if (~strcmp(y(m+1),'A'))&&(~strcmp(y(m+1),'T'))&&(~strcmp(y(m+1),'C'))&&(~strcmp(y(m+1),'G'))
if (~strcmp(y(m+2),'A'))&&(~strcmp(y(m+2),'T'))&&(~strcmp(y(m+2),'C'))&&(~strcmp(y(m+2),'G'))
end_number=m;
break;
end
end
end
end;
textstartField(text_count)=start_number;
textendField(text_count)=end_number;
text_count=text_count+1;
text_number=end_number+1;
end
%end
%clc
%textstartField
%textendField
%测试打印数据
%for x=1:1:text_count-1
%y(textstartField(x):textendField(x))
%end
%改这个选择哪一个txt文档中的哪一组数据
xx=3; %从第一组开始DNA,又是复用的x,不习惯可以换别的字母,最大为text_count-1
n=1; %转换数据列第一个为1
for k=textstartField(xx):1:textendField(xx)
if (~strcmp(y(k),'A'))&&(~strcmp(y(k),'T'))&&(~strcmp(y(k),'C'))&&(~strcmp(y(k),'G'))
n=n;
continue;
end;
if (strcmp(y(k),'A')==1)
DATA(n)=0;
end
if (strcmp(y(k),'G')==1)
DATA(n)=1;
end
if (strcmp(y(k),'C')==1)
DATA(n)=2;
end
if (strcmp(y(k),'T')==1)
DATA(n)=3;
end
n=n+1;
end
%计算功率谱和信噪比
pi=3.14;
N=length(DATA);
for k=1:1:N
n=N;
X1=0;X2=0;X3=0;X4=0;
while n>0
w=exp(-j*2*pi*n*k/N);
X1=w*DATA(n)+X1;
%X2=w*DATA(n)+X2;
%X3=w*DATA(n)+X3;
%X4=w*DATA(n)+X4;
n=n-1;
end
%p(k)=(abs(X1)^2+abs(X2)^2+abs(X3)^2+abs(X4)^2)
p(k)=(abs(X1)^2)
end
%绘图,这里复用了下X,影响不大,不习惯可以用别的符号做标识
xxx=1:1:length(DATA)/2;
plot(xxx,p(1:1:length(DATA)/2));
%figure;
%x2=1:1:length(DATA_A);
%plot(x2,p);
%AVG_E平均功率,R信噪比
max_number=fix(N/3);
if p(max_number)<p(max_number+1)
max_number=max_number+1;
end
if p(max_number)<p(max_number-1)
max_number=max_number-1;
end
%max_number
AVG_E=sum(p)/N;
R=p(max_number)/AVG_E
read3.m
clear;
clc;
fid=fopen('abc.txt');
[yi,count]=fread(fid,Inf,'char'),
y=char(yi');
fclose(fid);
%判断第一个基因序列在哪,count总数
%变量解释
end_number=0; %中间变量,结束的元素号,每一段进行的标识
start_number=0; %中间变量,开始的元素号,每一段进行的标识
text_number=1; %文本号,中间变量,用来控制循环
text_count=1; %记录一共可能有几组数据的中间量
textstartField=0; %记录开始的元素号,行矩阵
textendField=0; %记录结束的元素号,行矩阵
while(count-end_number>1)
for m=text_number:1:count
if strcmp(y(m),'A')||strcmp(y(m),'T')||strcmp(y(m),'C')||strcmp(y(m),'G')
if strcmp(y(m+1),'A')||strcmp(y(m+1),'T')||strcmp(y(m+1),'C')||strcmp(y(m+1),'G')
if strcmp(y(m+2),'A')||strcmp(y(m+2),'T')||strcmp(y(m+2),'C')||strcmp(y(m+2),'G')
if strcmp(y(m+3),'A')||strcmp(y(m+3),'T')||strcmp(y(m+3),'C')||strcmp(y(m+3),'G')
start_number=m;
break;
end;
end;
end;
end;
end;
%判断结尾序列
for m=start_number:1:count
if (count-m<4)
if (~strcmp(y(m),'A'))&&(~strcmp(y(m),'T'))&&(~strcmp(y(m),'C'))&&(~strcmp(y(m),'G'))
end_number=m;
break;
end
end
if (~strcmp(y(m),'A'))&&(~strcmp(y(m),'T'))&&(~strcmp(y(m),'C'))&&(~strcmp(y(m),'G'))
if (~strcmp(y(m+1),'A'))&&(~strcmp(y(m+1),'T'))&&(~strcmp(y(m+1),'C'))&&(~strcmp(y(m+1),'G'))
if (~strcmp(y(m+2),'A'))&&(~strcmp(y(m+2),'T'))&&(~strcmp(y(m+2),'C'))&&(~strcmp(y(m+2),'G'))
end_number=m;
break;
end
end
end
end;
textstartField(text_count)=start_number;
textendField(text_count)=end_number;
text_count=text_count+1;
text_number=end_number+1;
end
%end
%clc
%textstartField
%textendField
%测试打印数据
%for x=1:1:text_count-1
%y(textstartField(x):textendField(x))
%end
%改这个选择哪一个txt文档中的哪一组数据
xx=1; %从第一组开始DNA,又是复用的x,不习惯可以换别的字母,最大为text_count-1
n=1; %转换数据列第一个为1
for k=textstartField(xx):1:textendField(xx)
if (~strcmp(y(k),'A'))&&(~strcmp(y(k),'T'))&&(~strcmp(y(k),'C'))&&(~strcmp(y(k),'G'))
n=n;
continue;
end;
if (strcmp(y(k),'A')==1)
DATA_A(n)=1;
else DATA_A(n)=0;
end
if (strcmp(y(k),'G')==1)
DATA_G(n)=1;
else DATA_G(n)=0;
end
if (strcmp(y(k),'C')==1)
DATA_C(n)=1;
else DATA_C(n)=0 ;
end
if (strcmp(y(k),'T')==1)
DATA_T(n)=1;
else DATA_T(n)=0;
end
n=n+1;
end
pi=3.14;
N=length(DATA_A); %总长度
M=24; %窗口大小
loopCount=1; %窗的记数位
while M*loopCount < N
for k=1:1:M
n=M;
X1=0;X2=0;X3=0;X4=0;
while n>0
w=exp(-j*2*pi*n*k/M);
X1=w*DATA_A(n+(loopCount-1)*M+1)+X1;
X2=w*DATA_T(n+(loopCount-1)*M+1)+X2;
X3=w*DATA_C(n+(loopCount-1)*M+1)+X3;
X4=w*DATA_G(n+(loopCount-1)*M+1)+X4;
n=n-1;
end
%p(k)=abs(X1); %test use
p(k)=(abs(X1)^2+abs(X2)^2+abs(X3)^2+abs(X4)^2)
end
%AVG_E平均功率,R信噪比
max_number=fix(M/3);
if p(max_number)<p(max_number+1)
max_number=max_number+1;
end
if p(max_number)<p(max_number-1)
max_number=max_number-1;
end
%max_number
AVG_E=sum(p)/M;
R(loopCount)=p(max_number)/AVG_E;
numberLoop=M*(loopCount-1); %中间一个窗口的偏移量
loopCount=loopCount +1;
end
N=length(DATA_A); %总长度
m=N-(loopCount-1)*M-1; %窗口大小
for k=1:1:m
n=m;
X1=0;X2=0;X3=0;X4=0;
while n>0
w=exp(-j*2*pi*n*k/m);
X1=w*DATA_A(n+(loopCount-1)*M+1)+X1;
X2=w*DATA_T(n+(loopCount-1)*M+1)+X2;
X3=w*DATA_C(n+(loopCount-1)*M+1)+X3;
X4=w*DATA_G(n+(loopCount-1)*M+1)+X4;
n=n-1;
end
%p(k)=abs(X1); %test use
p(k)=(abs(X1)^2+abs(X2)^2+abs(X3)^2+abs(X4)^2)
%AVG_E平均功率,R信噪比
max_number=fix(m/3);
if p(max_number)<p(max_number+1)
max_number=max_number+1;
end
if p(max_number)<p(max_number-1)
max_number=max_number-1;
end
%max_number
AVG_E=sum(p)/m;
R(loopCount)=p(max_number)/AVG_E;
end
x_label=1:M:M*length(R);
plot(x_label,R);
分享到:
相关推荐
2012年第九届“华为杯”全国研究生数学建模竞赛试题全套+matlab算法大全
中国大学生数学建模竞赛题解_matlab
2015年研究生数学建模竞赛B题MATLAB代码: 将zip文件解压到mydir,将mydir设置为工作路径; 运行RunAll即可生成全部图片。
数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学建模Matlab数学...
2013全国大学生数学建模B题matlab代码
1. 运行 Satellite06_Fit.m 文件, 将06号卫星的观测数据对齐到09号卫星的观测时刻上。 输出文件为 yy_0600_fa.mat,其中的变量 yy_0600_fa中存储了06号卫星的观测数据信息(观测时刻已与09号卫星的观测时刻相对齐)...
数学建模工具箱:本工具箱主要包含三部分内容 (支持平台MATLAB5.3或5.2,Symbolic math,optim,spline,stats) 1. MATLAB常用数学建模工具的中文帮助 2.... 中国大学生数学建模竞赛历年试题MATLAB程序
2014年研究生数学建模-E题-前三问的matlab程序+论文 2014年全国研究生数学建模竞赛E题 乘用车物流运输计划问题 整车物流指的是按照客户订单对整车快速配送的全过程。随着我国汽车工业的高速发展,整车物流量,...
这里面包含了历年全国数学建模竞赛试题的matlab程序。方便大家使用!
大学生数学建模2003B 卓金武matlab数学建模11章 露天矿卡车调度 matlab程序原创代码 主程序
1. MATLAB常用数学建模工具的中文帮助 2. 贡献MATLAB数学建模工具 3. 中国大学生数学建模竞赛历年试题MATLAB程序
2013全国大学生数学建模B题matlab参考代码,文档碎纸片半自动拼接。有论文,有代码,建模党可以下来参考。
2017-2021年湖南省高校研究生数学建模竞赛试题.zip
2013年全国大学生数学建模B题matlab代码
2017年数学建模国赛B题matlab代码及注释,亲自做题编写,实测可以运行,有注释。
2012全国数学建模论文a题(葡萄酒)省一等奖范文.docx2012全国数学建模论文a题(葡萄酒)省一等奖范文.docx2012全国数学建模论文a题(葡萄酒)省一等奖范文.docx2012全国数学建模论文a题(葡萄酒)省一等奖范文.docx2012全国...
本工具箱主要包含三部分内容% 1. MATLAB常用数学建模工具的中文帮助% 2. 贡献MATLAB数学建模工具(打*号)% 3. 中国大学生数学建模竞赛历年试题MATLAB程序
中国研究生数学建模竞赛中常用的几类基础算法,粒子群算法,马尔可夫链,模拟退火法,小波分析,神经网络,遗传算法等的原理基础介绍以及相关matlab代码和实例应用
matlab数学建模.pdfmatlab数学建模.pdfmatlab数学建模.pdfmatlab数学建模.pdfmatlab数学建模.pdfmatlab数学建模.pdfmatlab数学建模.pdfmatlab数学建模.pdf
数学建模基础入门教程 MATLAB数学建模入门PPT课件 MATLAB基础 共66页.ppt