MATLAB基础操作
开始时间2023-07-18 21:08:59
结束时间2023-07-18 23:34:43
前言:出去完了好几天,又在家里躺了两天尸,稍微认真学一点吧,简单开个新篇章,呜呼!
A.1 Matlab帮助的使用
1 help elfun %关于基本函数的帮助信息 2 help exp %指数函数exp的帮助信息1.help
1 当要查找具有某种功能但不知道准确名字的指令时,help的能力就不够了,lookfor可根据用户提供的完整或不完整的关键词,去搜索出一组与之相关的指令。 2 lookfor integral %寻找有关积分的命令 3 lookfor fourier %查找能进行傅里叶变换的指令lookfor命令
1 在MATLAB中,关于有关函数的“帮助”信息可以用doc命令以超文本的方式给出 2 doc 3 doc doc 4 doc eig %eig求矩阵的特征值和特征向量超文本格式的帮助
1 可以从MathWorks网站上下载有关的pdf{}“帮助”文件。pdf“帮助”文件
A.2 数据的输入
1 (1)要直接输入矩阵时,矩阵一行中的元素用空格或逗号分隔;矩阵行与行之间用分号“;”分隔,整个矩阵放在方括号“[]”中。 2 (2)矩阵的分行输入简单矩阵的输入
1 ans %用于结果的默认变量名 2 pi %圆周率 3 eps %浮点相对精度 4 inf %无穷大,如1/0 5 NaN %不定量(非数),如0/0 6 i(j) %i=j=根号下-1 7 nargin %所用函数的输入变量数目 8 nargout %所用函数的输出变量数目 9 realmin %最小可用正实数 10 realmax %最大可用正实数特殊变量
1 t=[0:0.1:10] 2 %产生0~10的行向量,元素之间的间隔为0.1 3 t=linspace(n1,n2,n) 4 %产生n1和n2之间线性均匀分布的n个数 5 (默认n时,产生100个数) 6 t=logspace(n1,n2,n) 7 %在10的n1次方和10的n2次方之间按照对照对数距离等间距产生n个数 8 (默认n时,产生50个数)特殊向量 特殊矩阵
A.3 绘图命令
1 二维绘图的基本命令有 plot,loglog,semilogx,semilogy 和 polarplot。 2 它们的使用方法基本相同,其不同特点是在不同的坐标中绘制图形。 3 plot 命令使用线性坐标空间绘制图形; 4 loglog 命今在两个对数坐标空间中绘制图形; 5 而 semilogx(或 semilogy)命令使用x轴 (或1轴) 为对数刻度,另外一个轴为线性刻度的坐标空间绘制图形; 6 polarplot 使用极坐标空间绘制图形。 7 二维绘图命令 plot 为了适应各种绘图需要,提供了用于控制线色、数据点和线型的 3 组基本参数。它的使用格式如下: 8 plot(x,y,'color_point linestyle') 9 如果多重曲线对应不同的向量绘制,可使用命今plot(t1,x1,t2,x2,t3,x3) 10 subplot 命令使得在一个屏幕上可以分开显示 n个不同坐标系,且可分别在每一个坐标系中绘制曲线 11 其命令格式如下 12 subplot(r,c,p) 13 在图形绘制完毕后,执行如下命令可以再在图中加入标题、标号、说明和分格线等。这些命令有 title.xlabel,ylabel,text,gtext 等。 14 它们的命令格式如下title('My Title’) ,xlabel('My X-axis Label) 15 ylabel(My Y-axis Label’). 16 text(x,y,'Text for annotation') 17 gtext('Text for annotation'), grid 18 gtext命令是使用鼠标器定位的文字注释命令当输入命令后,可以在屏幕上得到一个光标,然后使用鼠标器控制它的位置。按鼠标器的左键,即可确定文字设定的位置。 19 hold on 是图形保持命令,可以把当前图形保持在屏幕上不变,同时在这个坐标系内绘制另外一个图形。hold 命令是一个交替转换命令,即执行一次,转变一个状态 (相当于 hold on、hold off)二维绘图命令
A.3.2 显函数、符号函数或隐函数的绘图
1 folot(fum,lims)绘制由字符串 fn 指定函数名的函数在X轴区间为 lims-[xmim,xmax]的函数图。 2 若ims=[xmin,xmax,ymin,ymax],则y轴也被限制。函数
A.3.3 三维图形
1 在实际工程计算中,最常用的三维绘图是三维曲线图、三维网格图和三维曲面图 3 种基本类型。与此对应,Matlab 也提供了一些三维基本绘图命令,如三维曲线命令 plot3 和 fplot3。三维网格图命令 mesh和fmesh,三维表面图命今surf和fsurf。其中的fplot3fmesh 和 fsurf 是使用函数进行绘图,比较方便,也容易使用。还有 3 维隐函数画图命令 fimplicit3,下面给出这些函数的用法示例。三维图形
1 plot3(x,y,z)通过描点连线画出曲线,这里x,y,z都是n维向量,分别表示该曲线上点集的横坐标、纵坐标、竖坐标。三维曲线
1 命令mesh(x,y,z)画网格曲面。这里x,y,z是三个同维数的数据矩阵,分别表示数据点的横坐标、纵坐标、竖坐标,命令mesh(x,y,z)将该数据点在空间中描出,并连成网格。网格图
1 命令surf(x,y,z)画三维表面图,这里x,y,z是三个同维数的数据矩阵,分别表示数据点的横坐标、纵坐标、竖坐标。表面图
1 隐函数,可以直接使用隐函数画图命令fimplicit3画图; 2 还可以先把旋转曲面化成参数方程,使用命令fmesh画图。旋转曲面
Matlab中使用绘图命令fmesh或fsurf,画显函数或参数方程表示的二次曲面很方便,或者直接使用fimlicit3画隐函数表示的二次曲面二次曲面图形
A.4 数据处理
1 把Matlab工作空间中的数据矩阵a,b,c保存到数据文件dataA_27.mat中。 2 save dataA_27.mat a b c 3 注:Matlab中的默认数据文件mat文件可以省略后缀名。 4 把例A.27生成的dataA_27.mat中的所有数据加载到Matlab工作空间中。 5 load('dataA_27.mat')MATLAB中的默认数据文件mat文件
1 可以把word文档中整行整列的数据粘贴到纯文本文件,然后调入到Matlab工作空间中。 2 把纯文本文件dataA_29.txt加载到工作空间。 3 a=load('dataA_29.txt'); 4 或者是 5 b=readmatrix('dataA_29.txt'); 6 使用writematrix命令把矩阵b保存到纯文本文件dataA_30.txt。 7 b=randi([0,10],3) %生成3阶随机整数矩阵 8 writematrix(b,'dataA_30.txt') 9 生成服从标准正态分布随机数的 矩阵,再保存到Excel文件dataA31.xlsx。 10 clc, clear, a=normrnd(0,1,100,200); 11 writematrix(a, 'dataA_31.xlsx')纯文本文件
1 把一个 矩阵写到Excel文件dataA_32.xlsx表单Sheet2中B2开始的域中。 2 a=rand(5,10); warning('off') 3 writematrix(a, 'dataA_32.xlsx', 'Sheet', 2, 'Range', 'B2') 4 把例A.32生成的Excel文件dataA_32.xlsx中表单Sheet2的域“C3:F6”中的数据赋给b。 5 b=readmatrix('dataA_32.xlsx','Sheet',2,'Range','C3:F6')Excel文件
1 统计下列五行字符串中字符a、c、g、t出现的频数。 2 1.aggcacggaaaaacgggaataacggaggaggacttggcacggcattacacggagg 3 2.cggaggacaaacgggatggcggtattggaggtggcggactgttcgggga 4 3.gggacggatacggattctggccacggacggaaaggaggacacggcggacataca 5 4.atggataacggaaacaaaccagacaaacttcggtagaaatacagaagctta 6 5.cggctggcggacaacggactggcggattccaaaaacggaggaggcggacggaggc 7 8 把上述五行复制到一个纯文本数据文件dataA_34_1.txt中,编写如下程序: 9 clc, clear, f=fopen('dataA_34_1.txt'); i=1; 10 while (~feof(f)) 11 d=fgetl(f); a=sum(d==97); c=sum(d==99); 12 g=sum(d==103); t=sum(d==116); 13 n=sum(d>=97&d<=122); %检验26个小写字符的个数 14 s(i,:)=[a, c, g, t, n, a+c+g+t]; 15 i=i+1; 16 end 17 s, he=sum(s) 18 writematrix(s,'dataA_34_2.txt') 19 其他的一些字符串处理命令有strcmp,strfind等。字符串数据
1 例A.35 把一个比较大的bmp图像文件dataA_35_1.bmp,转化成比较小的jpg文件,命名成dataA35_2.jpg,并显示。 2 3 a=imread('dataA_35_1.bmp'); subplot(121), imshow(a) 4 imwrite(a,'dataA_35_2.jpg'); 5 subplot(122), imshow('dataA_35_2.jpg') 6 例A.36 生成10幅彩色jpg文件,依次命名成A_36_1.jpg,…,A_36_10.jpg。 7 8 clc, clear 9 for i=1:10 10 str=['A_36_',int2str(i),'.jpg']; 11 a(:,:,1)=rand(500); a(:,:,2)=rand(500)+100; a(:,:,3)=rand(500)+200; 12 imwrite(a,str); 13 end图像文件
1 例A.37 现有数据文件A_37_1.xlsx,…,A_37_5.xlsx,用命令importdata读入数据。 2 3 clc, clear 4 mydata=cell(1, 5); %初始化存放各个文件数据的细胞数组 5 for k=1:5 6 filename=sprintf('A_37_%d.xlsx', k); %构造文件名的格式化字符串 7 mydata{k}=importdata(filename); %从文件导入数据 8 end 9 celldisp(mydata) %显示细胞数组的数据 10 11 例A.38 现有数据文件A_38_01.xlsx,…,A_38_05.xlsx,读入各Excel文件的第2个表单(Sheet2)的域“A1:C3”的数据。 12 13 clc, clear, d=cell(1,5); %初始化 14 for k=1:5 15 fileName=sprintf('A_38_%02d.xlsx',k); 16 d{k}=readmatrix(fileName,'Sheet',2,'Range','A1:C3'); 17 end 18 celldisp(d) %显示细胞数组的数据 19 20 例A.39 读入当前目录下所有后缀名为xlsx的Excel文件的数据。 21 22 clc, clear 23 fi=dir('*.xlsx') %提出Excel文件的信息,返回值是结构数组 24 n=length(fi); %计算Excel文件的个数 25 d=cell(1,n); %初始化 26 for k=1:n 27 d{k}=importdata(fi(k).name); 28 end 29 celldisp(d) %显示细胞数组的数据数据的批处理
1 clc, clear 2 rng('shuffle') %根据当前时间为随机数生成器提供种子 3 a=randn(6,1); %生成服从标准正态分布的伪随机数 4 b=[today:today+5]' %从今天到后面5天 5 c=datetime(b,'ConvertFrom','datenum') 6 T=array2timetable(a,'RowTimes',c) %生成时间序列数据 7 T.a(3)=NaN; %将第3个数据变为缺失值NaN 8 newT=fillmissing(T,'linear') %用线性插值填补时间序列中的缺失数据 9 data=table2array(newT) %时间序列数据转成普通数据时间序列处理数据
1 Matlab日期和时间的函数有datenum,now,clock,date,calendar,eomday,weekday,addtodate,etime等。 2 例A.41 统计1601年1月到2000年12月,每月的13日分别出现在星期日、星期一、星期二,…,星期六的频数,并画出对应的柱状图。 3 4 注:Matlab中weekday的1对应“星期日”,2对应“星期一”,…,7对应“星期六”。 5 解 所画出的柱状图见图A.1,Matlab程序如下: 6 clc, clear, c=zeros(1,7); 7 for y=1601:2000 8 for m=1:12 9 d=datetime(y,m,13); 10 w=weekday(d); 11 c(w)=c(w)+1; 12 end 13 end 14 c, bar(c) %显示频数并画出频数的柱状图 15 axis([0 8 680 690]) 16 line([0,8],[4800/7,4800/7],'linewidth',4,'color','k') 17 set(gca,'xticklabel',{'Su','M','Tu','W','Th','F','Sa'})日期和时间
1 Matlab除了支持各种图像文件的读写等操作,还支持视频文件的相应处理。实际上,视频文件本质上是由多帧具有一定大小、顺序、格式的图像组成的,只是一般的图像是静止的,而视频是可以将多帧静止的图像进行连续显示,从而达到动态效果。 2 3 例A.42 读取一个视频文件test.avi,并把视频中的每一帧保存成jpg文件。 4 5 clc,clear 6 ob=VideoReader('test.avi') %读取视频文件对象 7 n=ob.NumFrames; %获取视频的总帧数 8 for i=1:n 9 a=read(ob,i); %读取视频对象的第i帧 10 imshow(a) %显示第i帧图像 11 str=['pic\',int2str(i),'.jpg']; %构造文件名的字符串,目录pic要提前建好 12 imwrite(a,str); %把第i帧保存到jpg文件 13 end视频文件