程序设计
一、M文件
1.M文件的类型
用MATLAB语言编写的程序,称为M文件。 M文件可以根据调用方式的不同分为两类:
- 脚本文件(命令文件) (Script File)
- 函数文件(Function File)
①脚本文件
将原本要在MATLAB环境下直接输入的多条语句,存放为.m后缀的文件,在命令行键入文件名,替代多条语句,一次执行成批命令。
②函数文件
以固定格式书写的程序代码,第一行是函数定义行,有输入参数和输出参数,由function引导;函数中的变量一般是局部变量,也可以声明全局变量;
-
函数m文件的格式
function [ 输出形参 ] = 函数名[ 输入形参 ] %注释 内容
注意:函数文件名要和主函数的名字一致
输入形参以圆括号()表示,输出形参以方括号[]表示(注:输出形参为一个的时候可以不用[])
如果a=function[x,y,z]
,则默认输出第一个输出形参
可以[~,b]=function[x,y,z]
,来输出第二个输出形参
即:通过~
符号,忽略函数返回的某个参数。
-
函数m文件的调用格式
[输出实参表]=函数名(输入实参表)
-
函数变量
函数内部产生的是局部变量,除非特殊说明为全局变量,局部变量会在函数调用完毕后随函数的结束而清除。
声明一个变量为全局变量:global 变量1,变量2
function [output] = average(inputArg) %AVERAGE 向量元素求均值 % 单纯求均值,为示例子函数而写 N=length(inputArg); output=GGBOND(inputArg,N) end function hh=GGBOND(X,N) hh=sum(X)/N; end
>> x=[1 2 3 4 5 6]; >> average(x) output = 3.5000 ans = 3.5000
③函数句柄
函数句柄的作用是将一个函数封装成一个变量,使其能够像其它变量一样在程序的不同部分传递。
语法:@函数名fun1 = @sin;
二、Matlab程序的控制语句
1.顺序语句
自不待言。
2.选择结构
①if
语句
- 单分支if语句
if condition
语句组
end
- 双分支if语句
if condition
语句组1
else
语句组2
end
- 多分支if语句
if 条件1
语句组1
elseif 条件2
语句组2
……
elseif 条件m-1
语句组m-1
else
语句组m
end
②switch
语句
switch 表达式
case 表达式值1
语句组1
case 表达式值2
语句组2
……
case 表达式值m-1
语句组m-1
otherwise
语句组m
end
当表达式的值等于表达式m-1的值时,执行语句组m-1;
当表达式的值不等于case所列的表达式的值时,执行语句组m;
当任意一个分支的语句执行完后,直接执行switch语句的下一句;
③try
语句
try
语句组1
catch
语句组2
end
try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。
3.循环结构
①for语句
- 第一种表示方式
for 循环变量 = 初值:步长:终值
循环体语句
end
eg.一个求水仙花数的示例
for m=100:999
m1=floor(m/100); %求m的百位数字
m2=rem(floor(m/10),10); %求m的十位数字
m3=rem(m,10); %求m的个位数字 rem求余数
if m==m1*m1*m1+m2*m2*m2+m3*m3*m3
disp(m) %显示变量
end
end
输出:
153
370
371
407
- 第二种表达方式
for 循环变量 = 矩阵表达式
循环体语句
end
执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。
for v = [1,2,3;5,6,7;8,9,10]
disp(v)
end
输出
1
5
8
2
6
9
3
7
10
求矩阵每行元素之和
s=0;
a=[1,2,3;5,6,7;8,9,10];
for k=a
s=s+k;
end
s;
k(1)=[1 5 8];
k(2)=[2 6 9];
k(3)=[3 7 10];
②while 语句
while (条件)
循环体语句
end
4.交互语句
(1)输入输出控制命令(input)
R=input('xxx')
:在屏幕上显示提示信息xxx,等待输入数据并赋值给R
keyboard
:停止执行程序,将控制权交给键盘,等待用户输入并在命令提示符前显示K以示区别
(2)等待用户响应命令(pause)
pause
:终止当前运行的M文件,等待用户按任意键后继续运行。
pause(n)
:在屏幕上显示提示信息xxx,等待n秒继续运行。
pause on
:允许以后的运行过程中使用pause命令。
pause off
:不允许以后的运行过程中使用pause命令
(3)中断、继续、转向命令
break
就是直接跳出该层循环
continue
就是直接进入该层循环的下一次迭代
return
就是直接退出程序或函数返回了
大概的关系如下 return>break>continue
验证输入的自然数是不是素数:
m=input('请输入数字')
k=sqrt(m);
ii=2;
while ii
ii
if rem(m,ii)==0
break
else
ii=ii+1;
end
if ii>k
'输入的是素数'
return
end
end
'输入的不是素数'