MATLAB 数据分析方法(第2版)1.5 M文件与编程

简介:

1.5 M文件与编程

 

1.5.1 M文件编辑/调试器窗口

 

在默认状态下,M文件编辑/调试器(Editor/Debugger)窗口不随MATLAB界面的出现而启动。当需要编写M文件时,在主界面的主页上单击“新建脚本”按钮,即可启动该窗口。如图1-17所示。

 

 

图1-17 M文件编辑/调试器窗口

 

 

  M文件编辑/调试器的菜单与工具栏请参考“帮助”系统。

 

1.5.2 M文件

 

M文件是由MATLAB语句(命令或函数)构成的ASCII码文本文件,文件名必须以“.m”为扩展名。M文件通过M文件编辑/调试器生成。在命令行窗口调用M文件,可实现一次执行多条MATLAB语句的功能。M文件有以下两种形式。

 

1.M脚本文件

 

脚本文件是MATLAB命令或函数的组合,没有输入输出参数,执行脚本文件只需在命令行窗口中键入文件名并按回车键,或在M文件编辑/调试器窗口激活状态下直接按“运行”按钮或按“F5”键。

 

当用户要运行的指令较多时,可以直接从键盘上逐行输入指令,但这样做显得很麻烦,而命令文件则可以较好地解决这一问题。用户可以将一组相关命令编辑在同一个ASCII码命令中,运行时只需输入文件名,MATLAB就会自动按顺序执行文件中的命令。这类似于批处理文件。命令文件中的语句可以访问MATLAB工作区中的所有数据。在运行的过程中所产生的变量均是全局变量。这些变量一旦生成,就一直保存在内存空间中,除非用户将它们清除(如clear命令)。

 

如求数1,2,3,4,…,100的和。

 

在编辑器中写出程序如下:

 

s=0;

 

for n=1:100

 

s=s+n;

 

end

 

s

保存为exm0101(这是文件名),然后在命令行窗口中执行,即输入文件名:

 

>>exm0101

 

s=5050%这是程序运行的结果

2.M函数文件

 

M函数文件是另一种形式的M文件,可以有输入参数和返回输出参数,函数在自己的工作区中操作局部变量,它的第一句可执行语句是以function引导的定义语句。在函数文件中的变量都是局部变量,它们在函数执行过程中驻留在内存中,在函数执行结束时自动消失。函数文件不单单具有命令文件的功能,更重要的是它提供了与其他MATLAB函数和程序的接口,因此功能更强大。

 

新建M函数文件,只需在主界面的主页上点击“新建”按钮,选择“函数”选项,即可打开含有function引导的定义语句的M文件编辑窗口,如图1-18所示。

 

 

 

图1-18 M函数编辑/调试器窗口

 

 

 

MATLAB的M函数文件的组成:文件第一行是函数定义行,格式为:

 

function \[返回参数1,参数2,…\]= 函数名(输入参数1,参数2,…)

 

                    函数体

 

end

注意:第一行的有无,是区分命令文件与函数文件的重要标志;函数体包含所有函数程序代码,是函数的主体部分;函数文件保存的文件名应与用户定义的函数名一致。在命令行窗口中以固定格式调用函数。

 

例如,定义函数f(x,y)=x3+y3-3xy,并计算f(2,3)。

 

在编辑器中写出如下程序:

 

function f=exm0102(x,y)           %函数名为exm0102,返回值为f

 

f=x.^3+y.^3-3*x.*y;%这是函数主体

 

end

保存为exm0102(这是文件名,与函数名一致),然后在命令行窗口中输入

 

>> exm0102(2,3)

 

ans =17%这是程序运行的结果

1.5.3 控制语句的编程

 

1.循环语句

 

MATLAB提供了两种循环方式:for…end循环和while…end循环。

 

1)for循环语句(计数循环方式),其调用格式如下:

 

for循环变量=初值:步长:终值

 

    循环体

 

end

执行过程:将初值赋给循环变量,执行循环体;执行完一次循环之后,循环变量自增一个步长的值,然后再判断循环变量的值是否介于初值和终值之间,如果满足仍然执行循环体,直至不满足为止。

 

例如,利用for循环语句构造K=4阶希尔伯特矩阵A(即A矩阵的(m,n)元等于1/(m+n-1))的程序如下:

 

K=4;%定义矩阵的阶数K

 

for m=1:K%外层循环,循环变量是矩阵的行数m

 

  for n=1:K%内层循环,循环变量是矩阵的列数n

 

     A(m,n)=1/(m+n-1);%循环体语句

 

  end

 

end

 

format rat %有理格式输出

 

A

输出结果:

 

A = 1       1/2      1/3      1/4

 

    1/2      1/3      1/4      1/5

 

    1/3      1/4      1/5      1/6

 

    1/4      1/5      1/6      1/7

当然,MATLAB中已有专门的函数hilb(K)生成希尔伯特矩阵了,因此直接调用:

 

A=hilb(4) ;%生成4阶希尔伯特矩阵A

能达到程序的同样目的。

 

2)while循环语句(条件循环方式),其一般调用格式为:

 

while表达式

 

  循环体

 

end

其执行过程为:若表达式的值为真,则执行循环体语句,执行后再判断表达式的值是否为真,直到表达式的值为假时跳出循环。

 

while语句一般用于事先不能确定循环次数的情况。例如,求1+11+2+11+2+3+…,程序如下:

 

k=0;s=0;d=inf;S=0;      %变量赋初值

 

while d>0.001%循环开始,判定表达式“d>0.001”的真值

 

   k=k+1;%循环体

 

   s=s+k;

 

   d=1/s;

 

   S=S+d;

 

end%循环结束

 

N=k;

2.条件控制语句

 

1)if…else…end语句,其调用格式如下:

 

if表达式

 

  语句体1;

 

else

 

  语句体2;

 

end

其执行过程为:当表达式的值为真时,执行语句体1,否则执行语句体2;语句体1或语句体2执行后,再执行if语句的后继语句。

 

用if…else…end语句编写分段函数y(x)=x,x<-1

x3,-1≤x<1

e1-x,x≥1,根据所写函数计算函数值y(-2)、y(0.5)、y(2)。程序如下:

 

function y=exm0103 (x)        %定义函数

 

n=length(x);

 

for k=1:n

 

  if x(k)<-1%选择条件1

 

     y(k)=x(k);%根据条件1为真选择执行的语句

 

  elseif x(k)>=1%选择条件2

 

     y(k)=exp(1-x(k));%根据条件2为真选择执行的语句

 

  else

 

     y(k)=x(k)^3;%条件1和2不真时选择执行的语句

 

  end

 

end

在命令行窗口中输入:

 

>> exm0103(\[-2,0.5,2\])

输出x=-2,0.5,2时的函数值:

 

ans =

 

  -2.0000  0.1250  0.3679

2)switch分支结构语句,其调用格式如下:

 

switch表达式

 

   case表达式1

 

      语句体1

 

   case表达式2

 

      语句体2

 

      …

 

   case表达式m

 

      语句体m

 

   otherwise

 

      语句体m+1

 

end

其执行过程为:控制表达式的值与每一个case后面表达式的值比较,若与第k(k的取值为1~m)个case后面的表达式k的值相等,就执行语句体k;若都不相同,则执行otherwise下的语句体m+1。

 

以下是将百分制的学生成绩按满分、优秀、良好、及格与不及格五档次进行分类,应用switch分支结构语句实现的算法程序。

 

clear all;                       %清除所有变量

 

for k=1:10%成绩分组

 

   a(k)={89+k};b(k)={79+k};c(k)={69+k};d(k)={59+k};

 

end;

 

c=\[d,c\];%成绩分组在60~79之间

 

A=cell(3,5);%定义元胞数组

 

A(1,:)={'Jack','Marry','Peter','Rose','Tom'};%学生姓名

 

A(2,:)={72,83,56,94,100};%学生成绩

 

%%以下是多分支选择结构%%

 

for k=1:5

 

  switch A{2,k}%读取学生成绩并与case比较

 

  case 100%成绩100分

 

   r='满分';

 

  case a%成绩90~99之间

 

   r='优秀';

 

  case b%成绩80~89之间

 

   r='良好'; 

 

  case c%成绩60~79之间

 

   r='及格'; 

 

  otherwise%成绩0~59之间

 

   r='不及格'; 

 

  end

 

A(3,k)={r};%记录每位学生成绩分档结果

 

end

 

A%输出学生成绩分档结果

程序输出结果:

 

A =

 

 'Jack'  'Marry' 'Peter' 'Rose'  'Tom'

 

 \[ 72\]  \[  83\]  \[  56\]  \[ 94\]  \[100\]

 

 '及格'   '良好'  '不及格' '优秀'  '满分'

3)其他流程控制语句。包括continue语句、break语句和return语句。

 

①continue语句用于for循环和while循环,其作用就是终止一次循环的执行,跳过循环体中所有剩余的未被执行的语句,去执行下一次循环。

 

②break语句也常用于for循环和while循环,其作用就是终止当前循环的执行,跳出循环体,去执行循环体外的下一行语句。

 

③return语句用于终止当前的命令序列,并返回到调用的函数或键盘,也用于终止keyboard方式。

 

相关文章
|
3月前
|
JSON 数据格式 Python
【2023最新】Matlab 保存JSON数据集文件,并用Python读取
本文介绍了如何使用MATLAB生成包含数据和标签的JSON格式数据集文件,并展示了用Python读取该JSON文件作为训练集的方法。
109 1
|
23天前
|
数据挖掘
ChatGPT在常用的数据分析方法中的应用(分组分析)
ChatGPT在常用的数据分析方法中的应用(分组分析)
46 1
|
23天前
|
数据挖掘 数据处理
ChatGPT在常用的数据分析方法中的应用(交叉分析)
ChatGPT在常用的数据分析方法中的应用(交叉分析)
34 1
|
23天前
|
数据挖掘
ChatGPT在常用的数据分析方法中的应用(对比分析)
ChatGPT在常用的数据分析方法中的应用(对比分析)
41 0
|
2月前
|
SQL 数据采集 数据可视化
数据分析的方法
数据分析的方法
71 3
|
3月前
Matlab批量修改指定文件下文件名
Matlab批量修改指定文件下文件名
158 1
|
3月前
|
存储 算法 Serverless
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
|
3月前
|
计算机视觉
【图像处理】基于灰度矩的亚像素边缘检测方法理论及MATLAB实现
基于灰度矩的亚像素边缘检测方法,包括理论基础和MATLAB实现,通过计算图像的灰度矩来精确定位边缘位置,并提供了详细的MATLAB代码和实验结果图。
81 6
|
3月前
|
存储 Serverless
【matlab】matlab实现倒谱法基音频率检测和共振峰检测(源码+音频文件)【独一无二】
【matlab】matlab实现倒谱法基音频率检测和共振峰检测(源码+音频文件)【独一无二】

热门文章

最新文章