一、函数M文件
MATLAB有内装函数,如三角函数、幂函数、指数函数等,这些函数都用后缀为M的函数文件编写,故又称函数M文件。当调用MATLAB函数时,在命令窗口输入函数名,则该函数的程序即被调用并执行。
例3-1
求解下列3次代数方程式的根
>> syms x
>> y=x^3+6*x^2+11*x+6;
>> y1=sym2poly(y) %提取3次代数方程的系数向量y1
%sym2poly为多项式转换成系数向量的转换系数
y1 =
1 6 11 6
>> roots(y1) %求解方程的根(y=0)
ans =
-3.0000
-2.0000
-1.0000
二、 函数M文件的构成
M文件的编写在M文件编辑器中进行。
函数M文件由下列5部分组成:
- 函数定义行:它必须由关键字function开头,紧跟着是函数的输出变量,如果有多个输出变量则用方括号括起来,各输出变量用逗号隔开。在等式右边则为函数名,后面紧接着是输入变量,用圆括号括起来,多个用逗号分隔。
- 帮助文档的标题行(简称H1行):这一行简明扼要的说明函数的功能。
- 帮助文本的内容:详细说明变量的类型,使用时的语法规则,使用举例和相关的函数名作为查找时的参考。
- 函数体:即由输入变量计算输出变量的程序体,还包括程序运行时的出错处理。
- 附注:说明函数的编者、版权和日期。
例3-2
编制一个程序,计算三角形的面积A,已知三角形的3条边为a、b、c,面积计算公式为
其中s=(a+b+c)/2
function A=triarea(a,b,c)
if a<0||b<0||c<0
disp('The a,b,c must be positive number.')
end
if a+b<c||a+c<b||b+c<a
disp('This is impossible.')
end
s=(a+b+c)/2;
A=(s*(s-a)*(s-b)*(s-c))^(1/2);
%TRIAREA(a,b,c)is calculate the area of triangle.
%The a,b,c must be a scale and nonnegtive.
%and any two sides of triangle must be greater than the third.
%For example triarea(3,4,5)
% ans=
% 6
% triarea(3,0,8)
% ans=
% 0
% triarea(11,18,6)
% This is impossible.
% triarea(-5,6,7)
% The a,b,c must be positive number.
%See also POLYAREA
注:
- 原书存在错误,break语句只能用于for语句中
- A的公式应为A=(s*(s-a)(s-b)(s-c))^(1/2);
(1)已知a=4,b=8,c=√80,求三角形面积。
>> triarea(4,8,80^(1/2))
ans =
16
(2)已知a=4,b=8,c=14,求三角形面积。
>> triarea(4,8,14)
This is impossible.
三、内联函数
对于一次性使用的函数,可以用内联函数inline来实现。内联函数的编制比较宽松,但它不进行函数存储,它的书写格式为
例3-3
用内联函数表示 y = sin x+ sin2x,并求 x=π/4时的函数值。
在命令窗口键入如下程序:
>> y=inline('sin(x)+sin(x)^2','x')
y =
内联函数:
y(x) = sin(x)+sin(x)^2
>> y(pi/4)
ans =
1.2071
例3-4
用内联函数来表示 y = sinx1cosx1 +sinx2cosx2 -sinx1cosx2,并求 x1 =π/8, x2=3π/8时的函数值。
在命令窗口键入如下程序:
>> y=inline('sin(x1)*cos(x1)+sin(x2)*cos(x2)-sin(x1)*cos(x2)','x1','x2')
y =
内联函数:
y(x1,x2) = sin(x1)*cos(x1)+sin(x2)*cos(x2)-sin(x1)*cos(x2)
>> y(pi/8,3*pi/8)
ans =
0.5607
四、文本M文件
一次要执行大量的 MATLAB 命令和语句,且经常重复使用的程序,则可将这些语句的集合,存放在扩展名为 M 的文件中。它的输出数据亦保存在工作空间中,便于下次计算时调用。为了和函数文件的区别,故称为文本文件。
例3-5
在单位圆内,分别绘制 10 花瓣、20 花瓣、2花瓣和不对称花瓣图。通过Enter键来切换图形。
在 M 文件编辑器输入以下程序:
%flower petal plots %程序标题,花瓣图
theta= - pi:pi/300:pi; %设置角度分量,分度为pi/300
rho(1,:)=2*sin(5*theta).^2; %计算频率为5的正弦函数平方
rho(2,:)=cos(10*theta).^3; %计算频率为10的余弦函数立方
rho(3,:)=sin(theta).^2;
rho(4,:)=5*cos(3.5*theta).^3; %计算频率为3.5的余弦函数立方
for i=1:4
polar (theta, rho(i,:))
switch i
case 1
title 10-petal
case 2
title 20-petal
case 3
title two-petal
case 4
title 2-3-2unsymmetrical-petal
end
pause
end
在 MATLAB 命令窗口输入
>> flower
注:原书存在一处错误,应该在命令窗口直接输入flower。
五、M文件的编辑和存储
MATLAB 的流程控制有:
循环控制语句 for/end、while/end;
条件控制语句 if/else/end;
分支条件语句 if/else if/elseif/…else/end;
开关控制语句 switch/case 1,case 2…otherwise/end;
试验和捕捉语句 try/catch/end ;
返回语句 return;
中断语句 break 等。