《计算机在生命科学中的应用》实验指导书1精讲.docx
《《计算机在生命科学中的应用》实验指导书1精讲.docx》由会员分享,可在线阅读,更多相关《《计算机在生命科学中的应用》实验指导书1精讲.docx(43页珍藏版)》请在冰点文库上搜索。
《计算机在生命科学中的应用》实验指导书1精讲
实验一:
数据采集
(一)基本功能
双击MATLAB图标,打开MATLABCommandWindow,它是用户输入命令的地方,MATLAB将计算结果也显示在此。
共有File,Edit,view,web,Windows,Help五个主要功能。
1简易数学
>>1+2+3
ans=
6
>>1*10+2*20+3*30
ans=
140
>>x=1+2+3
x=
6
如果在上述的例子结尾加上;,则计算结果不会显示在命令窗口中,要得知计算值只须键入该变量名即可。
>>x=1+2+3;
>>x
x=
6
MATLAB提供基本的算术运算有:
加(+)、减(-)、乘(*)、除(/)、幂次方(^),例如:
5+3,5-3,5*3,5/3,5^3
要计算面积Area=
半径r=2,则可键入
>>r=2;
>>area=pi*r^2;
>>area
12.5664
我们也可以将上述命令打在同一行,以,或是;分开,例如
>>r=2,area=pi*r^2
>>r=2;area=pi*r^2;
请注意上述二式的差异,前者有计算值显示,而后者无。
如果一个命令过长可以在结尾加上...,例如
>>r=2;
>>area=pi...
*r^2
另外一个符号注解是由%起头,也就是说在%之后的任何文字都被视为程序的注解。
例如
>>r=2;%键入半径
>>area=pi*r^2;%计算面积
MATLAB可以将计算结果以不同的精确度的数字格式显示,在命令窗口键入以下显示格式的命令,以π值为例
命令
数字值
说明
formatshort
3.1416
预设的4位有效小数位数
formatlong
3.14159265358979
15位有效小数位数
formatshorte
3.1416e+000
4位有效小数位数加上指数表格式
观察下列命令后pi结果的变化:
>>formatlong
>>pi
>>formatshort
>>pi
2变量
MATLAB对使用变量名称的规定:
1.变量名称的英文大小写是有区别的(apple,Apple,AppLe,三个变量不同)。
2.变量的长度上限为19个字符。
3.变量名的第一个字符必须是英文字符,随后可以英文字符、数字或下划线。
3其它功能
MATLAB利用了↑↓二个光标移动键将所执行过的命令重复使用。
按下↑前一次命令重新出现,之后再按Enter键,即再执行前一次的命令。
键入who可以查看所有定义过的变量名称。
而键入clear则是清除所有定义过的变量名称;如果只是要去除x及y二个变量,则可以键入clearxy。
Ctrl-C(即同时按Ctrl及C二个键)可以用来中止执行中的MATLAB的工作。
4帮助
利用help命令,如果你要找题材(topic),直接键入help。
利用命令窗口的功能菜单中的Help,从中选取TableofContents(目录)或是Index(索引)。
例如
>>helpsqrt
SQRTSquareroot.
SQRT(X)isthesquarerootoftheelementsofX.Complex
resultsareproducedifXisnotpositive.
(二)数组与矩阵输入
1数组与矩阵的定义
MATLAB的运算是以数组及矩阵方式,而这二者在MATLAB的基本运算性质不同,数组强调元素对元素的运算,而矩阵则采用线性代数的运算方式。
定义一变量为数组或是矩阵时,须用中括号[]将元素置于其中。
数组为一维元素所构成,而矩阵为多维元素所组成,例如
>>x=[123]%一维1x3数组
>>x=[123;456]%二维2x3矩阵
假设要计算y=sin(x),0至π而x=0,0.2π,0.4π,...,π,即可用数组方式运算,例如
>>x=[00.2*pi0.4*pi0.6*pi0.8*pipi]%注意数组内也可作运算
x=
00.62831.25661.88502.51333.1416
>>y=sin(x)
y=
00.58780.95110.95110.58780.0000
要找出数组的某个元素或数个元素:
>>x(3)%第三个x的元素
ans=
1.2566
>>y(5)%第五个y的元素
ans=
0.5878
>>x(1:
5)%列出第一到第五个x的元素
ans=
00.62831.25661.88502.5133
>>y(3:
-1:
1)%列出第三到第一个y的元素,3为起始值,1为终止值,-1为增量
ans=
0.95110.58780
如果要建立的数组的元素多达数百个,则须采用以下的方式。
>>x=(0:
0.2:
1)%以:
区隔起始值=0、增量值=0.2、终止值=1
>>x=linspace(0,1,51)%利用linspace,以区隔起始值=0终止值=1之间的元素数目=51
>>x=(0:
0.01:
1)*pi%注意数组外也可作运算
>>a=1:
5,b=1:
2:
9%这二种方式更直接
a=
12345
b=
13579
>>c=[ba]%可利用先前建立的数组a及数组b,组成新数组
c=
1357912345
2数组运算符
以下将数组的运算符号及其意义列出,除了加减符号外其余的数组运算符号均须多加.符号。
数组运算功能
+加
-减
.*乘
./左除
.^次方
.'转置
>>a=1:
5;a-2%从数组a减2
ans=
-10123
>>2*a-1%以2乘数组a再减1
ans=
13579
>>b=1:
2:
9;a+b%数组a加数组b
ans=
2581114
>>a.*b%数组a及b中的元素与元素相乘
ans=
16152845
>>a.^2%数组中的各个元素作二次方
ans=
1491625
3特殊矩阵
zeros函数是形成元素皆为0的矩阵;ones函数是形成元素皆为1的矩阵;eye则是产生一个单位矩阵,如zeros(m)可以产生一个m×m的方阵,而zeros(m,n)产生的是m×n的矩阵。
>>B=zeros(2,3)
B=
000
000
>>C=[12;34;56];
>>size(C)%使用size命令得到C矩阵的大小
ans=
32
>>A=ones
(2),B=ones(2,3)%1的矩阵
A=
11
11
B=
111
111
>>A=eye
(2),B=eye(2,3)%单位矩阵
A=
10
01
B=
100
010
(四)编写M-file
MATLAB提供了M-file的方式,可让使用者自行将命令及算式写成程序然后储存,其扩展各为m,如test.m,其中的test就是文件名称。
在命令窗口中选择File再选择New,当程序写完后要存档时,必须以.m名称储存。
以下的tutex1.m是一个简易绘图程序做为示范使用M-file
x=linspace(0,2*pi,20);y=sin(x);
plot(x,y,'r+')
xlabel('x-value')
ylabel('y-value')
title('2Dplot')
写好上述程序后即可在命令窗口下键入tutex1,即可执行已建立的tutex1.m程序。
(五)设置工作目录
当在执行M-file时,我们最好是将自己的M-file储存在自己的工作目录下,而不要放在MATLAB内建的目录下,要在自己的工作目录执行程序可分为二个步骤:
(1)建立搜寻路径,
(2)切换目录。
建立搜寻路径
MATLAB将许多内建函数分门别类放在不同的子目录下,因此它在工作时须依次的搜寻这些目录,这个过程称为「搜寻路径」。
MATLAB的命令path可以让我们将自己的工作目录加在原来MATLAB的搜寻路径之前或之后,如
先在D盘中创建文件夹“stu01”,然后输入下列命令:
>>path(path,'d:
\stu01')%将自己的目录\stu01加在MATLAB的搜寻路径之后
>>path
>>path('d:
\stu01',path)%将自己的目录\stu01加在MATLAB的搜寻路径之前
>>path
实验二:
绘图
(一)二维绘图
plot是用来绘函数x对函数y的二维图,例如要绘出y=sin(x),0至2π。
plot可以在一个图上绘数条曲线,且以不同的符号及颜色来表示曲线,如要在x、y轴及图上加注说明,则可利用命令xlabel,ylabel,title,使用命令grid加上网格线。
______________________________________________
字母颜色标点线型
y黄色·点线
m粉红○圈线
c亮蓝××线
r大红++字线
g绿色-实线
b蓝色星形线
w白色:
虚线
k黑色-.(--)点划线
___________________________________________________
>>v1=linspace(0,2*pi,20);v2=sin(v1);%建立v1及v2数组
>>plot(v1,v2)%利用plot,输入的变量为x轴,y轴
>>v3=cos(v1);%建立v3数组
>>plot(v1,v2,v1,v3)%绘二条曲线
>>plot(v1,v2,v1,v2,'+')%一样绘二条曲线,不过第二条曲线以符号+标示
>>plot(v1,v2,v1,v2.*v3,'--')%绘二条曲线,一条代表v1-v2函数关系,一条
%代表v1-(v2.*v3)函数关系
>>xlabel('x-axis')%加上x轴的说明,在二个单引号'之间键入文字的说明
>>ylabel('y-axis')%加上y轴的说明
>>title('2Dplot')%加上图的说明
gtext则是依据鼠标或上下左右游标键来放置文字说明,其语法为gtext('string')。
>>x=linspace(0,2*pi,30);y=sin(x);z=cos(x);
>>plot(x,y,x,z)%绘二条曲线y=sin(x),z=cos(x)
>>text(2.5,0.7,'sin(x)')%(2.5,0.7)是依据绘图大小的座标值
>>gtext('cos(x)')%将鼠标移至适当位置再按鼠标键
一般的x-y图在横轴及纵轴皆是以线性尺度来绘图,如果要绘图的数据的x或y值变化范围太大,就须要改用对数(log)尺度来绘图才可得到合理的图。
MATLAB提供三种对数尺度的绘图命令:
semilogx,semilogy,loglog,它们的作用分别是x轴以对数尺度绘图,y轴以对数尺度绘图,x和y轴以对数尺度绘图。
>>y=0:
0.1:
10;x=10.^y
>>plot(x,y)%
>>semilogx(x,y)%改以对数尺度绘图
>>x=[0257101215172021];
>>y=[0.10.20.50.60.911.21.261.221.2];
>>plot(x,y)%先以线性尺度绘图,再分别以三种对数尺度绘
>>semilogx(x,y)%图,注意各个图像会改变
>>semilogy(x,y)
>>loglog(x,y)
(二)绘图选项
1MATLAB有许多的绘图选项,如将二条曲线划在同一个图中。
>>x=linspace(0,2*pi,30);
>>y=sin(x);z=cos(x);
>>plot(x,y,x,z)%将y=sin(x)及z=cos(x)二函数分布绘图
>>plot(x,y,'g:
',x,z,'r--')%加上不同的颜色及符号来区别二条曲线
title——给图形加标题
xlable——给x轴加标注
ylable——给y轴加标注
text——在图形指定位置加标注
gtext——将标注加到图形任意位置
gridon(off)——打开、关闭坐标网格线
legend——添加图例
axis——控制坐标轴的刻度
2横轴和纵轴的控制
要控制绘图的横轴及纵轴比例,可以用axis配合下列的相关的选项:
axis([xminxmaxyminymax])
以xminxmax设定横轴的下限及上限,以yminymax设定纵轴的下限及上限
axisauto
横轴及纵轴依照数据大小的上下限来订定,横轴及纵轴比例是4:
3
axissquare
横轴及纵轴比例是1:
1
axisequal
将横轴纵轴的尺度比例设成相同值
axisnormal
以预设值画纵轴及横轴
axisoff
将纵轴及横轴取消
axison
恢复纵轴及横轴
上述的各个命令的语法也可以将关键字放在括弧内的单引号之间,如axis('')。
>>x=linspace(0,2*pi,30);y=sin(x);z=cos(x);
>>plot(x,y,x,z)
>>axisoff
>>axison
>>axis('square','equal')
>>axis('xy','normal')
3子图
要将数个相关的图画在同一页时,可以用subplot这个命令。
其语法为subplot(m,n,p),其中m,n代表绘图成mxn个子图,m表示在y方向有m个图,n表示在x方向有n个图,p是代表第几个子图。
下例是以subplot分别画出线性及对数尺度的四个子图:
>>x=[0257101215172021];
>>y=[0.10.20.50.60.911.21.261.221.2];
>>subplot(2,2,1),plot(x,y)%画左上角的图
>>subplot(2,2,2),semilogx(x,y)%画右上角的图
>>subplot(2,2,3),semilogy(x,y)%画左下角的图
>>subplot(2,2,4),loglog(x,y)%画右下角的图
4图形放大及缩小
zoom命令可以将图形放大或缩小,若要将图形放大时用zoomon,zoomout,当不再要放大或缩小图形时用zoomoff。
>>M=peaks(25);%peaks是MATLAB内建的一个像山峰的特别函数,25是这个
>>plot(M)%函数矩阵的大小,如果数值愈大则画出的山峰图愈平滑
>>zoomon%开始放大图形,每按一次鼠标左键图形就放大一次
>>zoomout%开始缩小图形,每按一次鼠标右键图形就缩小一次
>>zoomoff%停止图形放大或缩小功能
5函数分布的快速绘图
fplot的命令可以用来自动的画一个已定义的函数分布图,而无须产生绘图所须要的一组数据做为变量。
其语法为fplot('fun',[xminxmaxyminymax]),其中fun为一已定义的函数名称,例如sin,cos等等;而xmin,xmax,ymin,ymax则是设定绘图横轴及纵轴的下限及上限。
以下的例子是将一函数f(x)=sin(x)/x在-20 x 20,-0.4 y 1.2之间画出:
>>fplot('sin(x)./x',[-2020-0.41.2])
>>title('Fplotoff(x)=sin(x)/x')
>>xlabel('x'),ylabel('f(x)')
(三)三维绘图
1三维的曲线绘图
plot3可以用来画一个三维的曲线,它的格式类似plot,不过多了z方向的数据。
其与法可以是plot3(X,Y,Z)或是plot3(X,Y,Z,'linetype'),其中的linetype是设定画线的符号和颜色。
下面的例子说明一个三维的曲线图:
>>t=0:
pi/50:
10*pi;
>>plot3(sin(t),cos(t),t)
>>title('Helix'),xlabel('sin(t)',ylabel('cos(t)'),zlabel('t')
2曲面及等值线绘图
如果要画一个三维的曲面,MATLAB是以meshgrid配合与mesh或surf命令来绘图。
先要以meshgrid产生在x-y平面的二维的网格数据,再以一组z轴的数据对应到这个二维的网格,即可画出三维的曲面。
>>x=-7.5:
0.5:
7.5;y=x;%先产生x及y二个数组
>>[X,Y]=meshgrid(x,y);%再以meshgrid形成二维的网格数据
>>R=sqrt(X.^2+Y.^2)+eps;%加上eps可避免当R在分母时趋近零时会无法定义
>>Z=sin(R)./R;%产生z轴的数据
>>mesh(X,Y,Z)%将z轴的变化值以网格方式画出
>>surf(X,Y,Z)%将z轴的变化值以曲面方式画出
实验三:
函数
(一)多项式函数
1多项式的表示方法
在生命科学实验分析中,多项式常被用来模拟一个现象的函数。
令p(x)代表一个多项式:
MATLAB以一最简便方式代表上述的多项式p=[14-7-10],其中的数值是多项式的各阶项(从高到低)的各个系数,其实p也是一个数组,用以代表这个多项式。
2多项式的加减乘除运算
有了多项式的表示式后,即可来计算其函数值。
可以用函数polyval直接做运算,语法为polyval(p,x),其中p代表多项式各阶系数的数组。
因此:
>>x=linspace(-1,3);
>>p=[147-10];
>>v=polyval(p,x);
函数conv做乘法运算以及函数deconv做除法运算。
当二多项式相乘,其语法为conv(a,b),其中a,b代表二个多项式的数组。
而二多项式相除有deconv函数,其语法稍有不同[q,r]=deconv(a,b),其中q,r分别代表整除多项式及余数多项式。
>>a=[1234];b=[14916];
>>c=a+b
c=
261220
>>d=a-b
d=
0-2-6-12
>>e=conv(a,b)
e=
162050758464
>>g=e+[000c]
g=
162052819684
>>[f,r]=deconv(e,b)
f=
1234
r=
0000000%因为是整除所以余数多项式的各系数皆为零
>>[h,r]=deconv(g,a)
f=
14918
r=
00002612%余数多项式为2*x^2+6*x+12
(二)数据分析函数
1极值、平均、总和、连乘及排序
最大值max,最小值min,平均值mean,一组数据的中位数median,总和值sum,连乘值prod,累积总和值cumsum,累积连乘值cumprod,排序函数sort。
max(x)找出x数组的最大值
max(x,y)找出x及y数组的最大值,会有二个极值分属x及y数组
[y,i]=max(x)找出x数组的最大值以y显示,其在x数组的位置以i显示
min(x)找出x数组的最小值
min(x,y)找出x及y数组的最小值,会有二个极值分属x及y数组
[y,i]=min(x)找出x数组的最小值以y显示,其在x数组的位置以i显示
mean(x)找出x数组的平均值
median(x)找出x数组的中位数
sum(x)计算x数组的总和值
prod(x)计算x数组的连乘值
cumsum(x)计算x数组的累积总和值
cumprod(x)计算x数组的累积连乘值
>>rains=1000*rand(2,6)%rains为一个2x6的数组
rains=
126.8148.5173.0148.4194.7208.9
328.8300.7268.3210.5278.4321.5
>>avg_rain=mean(rains)%将rains数组中的每一行的平均值列出
avg_rain=
227.8000224.6000220.6500179.4500236.5500265.2000
>>avg_rain=mean(avg_rain)%将上述数组中的平均值列出
avg_rain=
225.7083
>>max_rain=max(rains)%将rains数组中的每一行的最大值列出
max_rain=
328.8000300.7000268.3000210.5000278.4000321.5000
>>[max_rain,x]=max(rains)%将rains数组中的每一行的最大值及其位置列出
max_rain=
328.8000300.7000268.3000210.5000278.4000321.5000
x=
222222
>>min_rain=min(rains)%将rains数组中的每一行的最小值列出
min_rain=
126.8000148.5000173.0000148.4000194.7000208.9000
>>s_sort=sort(rains)%将rains数组的值由小到大做排序
s_sort=
126.8000148.5000173.0000148.4000194.7000208.9000
328.8000