薛定宇教授大讲堂(卷Ⅱ):MATLAB微积分运算
上QQ阅读APP看书,第一时间看更新

2.1 函数与映射

2.1.1 函数的定义与描述

本节首先给出函数的数学定义,然后介绍各种各样函数的MATLAB表示方法,并介绍函数的绘图方法。

定义2-1 设在某变化过程中有两个变量xy,如果对于x在某一范围内的每个确定的值,y都有唯一确定的值与它对应,那么就称yx的函数,记作y=f(x),x称为自变量,y称为因变量。函数y=f(x)还可以描述成变量x到变量y的映射,在数学上记作f:x→y

这种函数更严格地应该称为单变量函数(univariate function)。

定义2-2 如果自变量为x1x2,…,xn,且它们之间相互独立,则函数称为多元函数(multivariate function),记作y=f(x1,x2,…,xn)。

定义2-3 自变量x取值的集合称为函数的定义域,和自变量x对应的y的值称为函数值,函数值的集合称为函数的值域。

函数是微积分学中重要的研究对象。本节先介绍常用超越函数(transcendental functions)的概念与计算方法,再介绍函数的MATLAB描述与绘图方法。

2.1.2 常用超越函数的MATLAB计算

变量的加、减、乘、除运算在MATLAB下可以用“+”“−”“*”“/”符号直接实现,如a+b*c/(d+e);乘方和开方运算可以使用“^”符号直接实现,如a^(1/3)。

定义2-4 超越函数通常指变量之间的关系不能用有限次加、减、乘、除、乘方、开方运算表示的函数,例如指数函数、对数函数、三角函数等。

MATLAB超越函数的一般调用格式为y=fun(x),其中x可以是标量,也可以是向量、矩阵或多维数组,可以是符号变量,也可以是实数、复数。得出的y的数据结构和维数与x相同。下面列出常用的超越函数及相应的MATLAB函数。

(1)三角函数:正弦、余弦、正切、余切的MATLAB函数分别为sin()、cos()、tan()、cot();正割(余弦的倒数)、余割(正弦的倒数)函数可以由sec()、csc()函数计算;双曲正弦sinh x=(ex−e−x)/2、双曲余弦cosh x=(ex+e−x)/2可以由sinh()、cosh()函数直接计算。三角函数默认的单位是弧度,若想使用角度单位,则可以用单位变换公式x=180x1/π进行转换,还可以使用sind()这类函数。

(2)反三角函数:如果三角函数名前有一个a,如asin(),则计算反三角函数。

(3)指数函数:e的指数函数ex可以由exp()函数直接计算。

(4)对数函数:自然对数ln x可以由log()计算;常用对数lgx可以由log10()计算;一般的对数函数logax可以由对数的换底公式log(x)/log(a)直接计算。

2.1.3 一般函数的MATLAB表示

对于一般的函数y=f(x),在MATLAB下有两种直接的表示方法,一种方法是申明x为符号变量,然后由一般的符号表达式直接将函数表示出来,另一种是在符号型数据结构下直接定义出函数,即使用符号函数的方法。

例2-1 试用MATLAB符号变量形式表示出下面函数

可以使用下面两种格式来定义这两个函数

如果想求出f(5)与g(a2,a+b)的值,用两种方法需要使用不同的方式调用函数,从调用语句的方便程度看,显然第二种函数定义的格式更方便,也更接近数学原型。另外,两类定义的数据结构是不同的,f1为符号变量sym,f2为符号函数symfun。

如果x为实数,还可以用下面的格式直接定义实函数,并对其求值

     >> syms x real; f(x)=a*x^2+b*x+c;

这里介绍的两种将函数输入MATLAB环境的方法对问题的描述没有本质上区别,在实际应用中用哪种方法方便就使用哪种方法。不过,由于函数描述的方式可以直接指出自变量,更接近数学原型,所以在可能的情况下建议使用函数格式直接定义数学中的函数。

使用符号函数时应当注意,如果定义了f(x),再定义f(x,y)会导致错误,所以定义f(x,y)之前应该给出clear f命令先清除以前的定义。

2.1.4 函数的曲线与曲面表示

一般情况下,一元函数可以由曲线表示,二元函数可以用曲面表示。这里将介绍如何在MATLAB环境下绘制函数的曲线与曲面。

(1)一元函数:如果已知一元函数y=f(x),则可以用fplot()函数直接绘制其曲线,调用格式为

fplot(f),%默认绘图区间[-5,5],或fplot(f,[xm,xM])

其中f可以为匿名函数,也可以为符号表达式或符号函数。不过在使用匿名函数时,应该采用点运算的形式。

在早期版本MATLAB中,还可以使用ezplot()函数直接绘制一元显函数曲线,该函数的调用格式为

ezplot(f),%默认绘图区间[-2π,2π],或ezplot(f,[xm,xM])

其中f可以是符号表达式或符号函数,还可以是数值计算中常用的字符串,相比之下,ezplot()函数可以比较好地自动选择坐标轴,但不能直接绘制分段函数,而fplot()函数可以。

(2)二元函数:若已知二元函数z=f(x,y),则可以用fsurf()函数绘制其曲面图,其调用格式为

也可以用早期版本函数ezsurf()绘制,该函数的调用格式为

其中f可以是符号表达式、符号函数或字符串。

还有一些特殊形式的函数,其曲线、曲面的绘制方法将在2.2节进一步介绍。