MATLAB在微积分中的应用
MATLAB是MathWorks公司于1982年推出的一套高性能的数值计算和可视化数学软件.被誉为“巨人肩上的工具”.用Matlab编写程序犹如在演算纸上排列出公式与求解问题,所以又被称为演算纸式科学算法语言.在这个环境下,对所要求解的问题,用户只需简单地列出数学表达式,其结果便以数值或图形方式显示出来.
§1 MATLAB入门
1.1 matlab的数值计算
运行MATLAB的可执行文件,进入Matlab工作窗口,在提示符“>>”后输入算术表达式,按Enter键即可得到该表达式的值,就象在计算器中运算一样.加、减、乘、除、乘方的算符依次为+、-、*、/、^.
例1 计算2+3×5的值.
解 在Matlab工作区输入命令:2+3*5^9,按Enter键,可得计算结果
2+3*5^9 ans =
5859377
MATLAB会将最近一次的运算结果直接存入一变量ans,变量ans代表MATLAB运算後的答案,并将其数值显示到屏幕上.也可以将计算结果赋值给一个自定义的变量,自定义变量应遵循以下命名规则:
(1)MATLAB对变量名的大小写是敏感的.
(2)变量的第一个字符必须为英文字母,而且不能超过31个字符. (3)变量名可以包含下划线、数字,但不能为空格符、标点.
例2 计算11.31.9
0.239
sin1的值,并将其赋值给变量a.
解 a=11.3*1.9^0.23+sin(1)
a =
13.9391
如果在上述的例子结尾加上”;”,则计算结果不会显示在指令视窗上,要得知计算值只须键入该变量名即可.
MATLAB可以将计算结果以不同的精确度的数字格式显示,我们可以在命令窗口的File 菜单下点击preferences子菜单,在随之打开的preferences对话框中,选取Command Window选项,设置Numerical Format参数,或者直接在matlab工作区键入以下指令:format short (这是默认的), format long等.
- 1 -
1.2 Matlab的数组运算
Matlab数组是Matlab进行运算的单元.创建数组就像我们在纸上写一个数组一样,元素与元素用“,”号或空格进行分隔,行与行用“;”号进行分隔.
例3 命令a=[1 2 3 4 5 6]建立一个1行6列的数组. 该命令与a=[1,2,3,4,5,6]是一样的.
命令b=[1 2 3;4 5 6]建立一个2行3列的数组. 数组运算的运算符与数值运算一样. 例4 a=[1 1 1;2 2 2] (建立数组a) a =
1 1 1 2 2 2
b=[3 3 3;4 4 4] (建立数组b) b =
3 3 3 4 4 4
a+b (求数组a与数组b的和) ans =
4 4 4 6 6 6
a-b (求数组a与数组b的差) ans =
-2 -2 -2 -2 -2 -2
a+3 (数组a的每一个元素都加上3) ans =
4 4 4 5 5 5
2*b (数组b的每一个元素都乘以2) ans =
6 6 6 8 8 8
两个同类型数组的对应元素相乘除的运算符是“./”和“.*”. 例5 a.*b (a的对应元素与b的对应元素相乘) ans =
3 3 3 8 8 8
a./b (a的对应元素除以b的对应元素) ans =
- 2 -
0.[1**********]333 0.[1**********]333 0.[1**********]333 0.[1**********]000 0.[1**********]000 0.[1**********]000
运算符“./”及“.*”应与运算符“/”及“*”相区别,a*b表示矩阵a与b的乘积,a/b表示矩阵a乘以矩阵b的逆矩阵.
例6 a=[1 2;2 1] (建立矩阵a) a =
1 2 2 1
b=[1 3;0 1] (建立矩阵b) b =
1 3 0 1
a*b (求矩阵a与矩阵b的乘积ab) ans =
1 5 2 7
a/b (求矩阵a与矩阵b的逆矩阵的乘积) ans =
1 -1 2 -5
运算符“^”表示方阵的幂,而运算符“.^”表示数组中每一个元素的幂. 例7 a^2 (矩阵a的平方) ans =
5 4 4 5
a.^2 (矩阵(数组)a的每一个元素的平方) ans =
1 4 4 1
1.3 Matlab的符号运算
matlab可以进行符号运算,需要预先定义符号变量.使用指令sym或syms定义符号变量.
例8 a=sym(‘x’) (将符号变量x赋值给变量a) a = x
sin(a)/cos(a) (符号表达式sin(a)/cos(a)) ans =
sin(x)/cos(x)
- 3 -
syms x y (定义符号变量x和y)
b=(x+y)^2-4*x*y (将符号表达式赋值给变量b) b=
(x+y)^2-4*x*y
a+b (求变量a与b的和) ans =
x+(x+y)^2-4*x*y
1.4 Matlab 的数学常数和函数
Matlab数学常数如下: pi 数学常数 inf 无穷大 eps 最小的浮点数
§2 MATLAB绘制一元函数的图形
2.1 常用命令
matlab绘图命令比较多,我们选编一些常用命令,并简单说明其作用,这些命令的调用格式,可参阅例题及使用帮助help查找.
表1 二维绘图函数
- 4 -
表2 基本线型和颜色
表3 二维绘图工具
表4 axis命令
linspace 创建数组命令,调用格式为:
x=linspace(x1,x2,n),创建了x1到x2之间有n个数据的数组.
funtool 函数工具,在matlab指令窗键入funtool可打开“函数计算器”图形用户界面.
2.2 绘制函数图形举例
- 5 -
例1 画出ysinx的图形.
解 首先建立点的坐标,然后用plot命令将这些点绘出并用直线连接起来,采用中学五点作图法,选取五点(0,0)、(,1)、(,0)、(,1)、(2,0).
22
输入命令
x=[0,pi/2,pi,3*pi/2,2*pi];y=sin(x);plot(x,y)
这里分号表示该命令执行结果不显示.从图上看,这是一条折线,与我们熟知的正弦曲线误差较大,这是由于点选取的太少的缘故。可以想象,随点数增加,图形越来越接近
ysinx的图象.例如,在0到2之间取30个数据点,绘出的图形与ysinx的图象已
经非常接近了.
x=linspace(0,2*pi,30);y=sin(x);plot(x,y).
也可以如下建立该图形.
x=0:0.1:2*pi;y=sin(x);plot(x,y)
还可以给图形加标记、格栅线. x=0:0.1:2*pi; y=sin(x);
plot(x,y,’r—‘) title(‘正弦曲线’) xlabel(‘自变量 x’) ylabel(‘函数y=sinx’) text(5.5,0,’y=sinx’) grid
上述命令第三行选择了红色虚线,第四行给图加标题“正弦曲线”,第五行给x轴加标题“自变量x”,第六行给y轴加标题“函数ysinx”,第七行在点(5.5,0)处放置文本“ysinx”,第八行给图形加格栅线
.
- 6 -
例2 画出y2x和y(1/2)x的图象.
解 输入命令
x=-4:0.1:4;y1=2.^x;y2=(1/2).^x;plot(x,y1,x,y2); axis([-4,4,0,8])
matlab允许在一个图形中画多条曲线.plot(x1,y1,x2,y2,x3,y3)指令绘制
y1f(x1),y2f(x2)等多条曲线.matlab自动给这些曲线以不同颜色.
例3 画出yarctgx的图象. 解 输入命令
从图上看,yarctgx是有界函数,y是其水平渐近线
.
2
例4 在同一坐标系中画出ysinx,yx,ytgx的图象. 解 输入命令
x=-pi/2:0.1:pi/2;y1=sin(x);y2=tan(x); plot(x,x,x,y1,x,y2) axis equal
axis([-pi/2,pi/2,-3,3]) grid
从图上看,当x0时,sinxxtgx,当x0时,sinxxtgx,yx是ysinx和ytgx在原点的切线,因此,当x1时,sinxx,tgxx.
例5 画出y10x1及ylg(x1)的图形.
解 输入命令
x1=-1:0.1:2;y1=10.^x1-1;x2=-0.99:0.1:2;y2=log10(x2+1); plot(x1,y1,x2,y2)
- 7 -
从图上看,这两条曲线与我们所知的图象相差很远,这是因为坐标轴长度单位不一样的缘故.y10x1与ylg(x1)互为反函数,图象关于yx对称,为更清楚看出这一点,我们再画出yx的图象.
hold on
x=-1:0.01:2;y=x;plot(x,y,’r’) axis([-1,2,-1,2]) axis square;hold off
plot语句清除当前图形并绘出新图形,hold on语句保持当前图形
.
例6 画出心形线r3(1cosa)的图象.
解 输入命令
x=-2*pi:0.1:2*pi;r=3*(1+cos(x));polar(x,r) 例7 画出星形线x3cos3t,y3sin3t的图象. 解 这是参数方程,可化为极坐标方程. r
(cosa
sina)2
- 8 -
输入命令
x=0:0.01:2*pi;
r=3./(((cos(x)).^2).^(1/3)+((sin(x)).^2).^(1/3)).^(3/2); polar(x,r)
注意,如果建立r与t的关系,此时t只是参数,不是极坐标系下的极角.
练习
1.画出yarcsinx的图象.
2.画出ysecx在[0,]之间的图象. 3.在同一坐标系中画出y4.画出f(x)(1性.
5.画出y1ln(x2)及其反函数的图象. 6.画出y
x)3
x,yx2,y
x)3
x,yx3,yx的图象.
(1的图象,并根据图象特点指出函数f(x)的奇偶
x21及其反函数的图象.
§3 利用MATLAB求一元函数的极限
3.1 常用命令
matlab求极限命令可列表如下:
matlab代数方程求解命令solve调用格式.
- 9 -
solve(函数f(x)) 给出f(x)0的根.
3.2 理解极限概念
数列{xn}收敛或有极限是指当n无限增大时,xn与某常数无限接近或xn趋向于某一定值,就图形而言,也就是其点列以某一平行与y轴的直线为渐近线. 例1 观察数列{n当n时的变化趋势.
n1
解 输入命令
n=1:100;xn=n./(n+1)
得到该数列的前100项,从这前100项看出,随n的增大,
与1非常接近,画出x的
n
n1
图形.
stem(n,xn) 或
for i=1:100;
plot(n(i),xn(i),’r’) hold on end
其中for „ end语句是循环语句,循环体内的语句被执行100次,n(i)表示n的第i个分量.由图可看出,随n的增大,点列与直线y1无限接近,因此可得结论 lim
n=1. nn1
对函数的极限概念,也可用上述方法理解
.
例2 分析函数f(x)xsin,当x0时的变化趋势.
x
解 画出函数f(x)在[1,1]上的图形. x=-1:0.01:1;y=x.*sin(1./x);plot(x,y)
- 10 -
从图上看,xsin随着x的减小,振幅越来越小趋近于0,频率越来越高作无限次振荡.x
作出yx的图象.
hold on;plot(x,x,x,-x)
例3 分析函数f(x)sin当x0时的变化趋势. x
解 输入命令
x=-1:0.01:1;y=sin(1./x);plot(x,y)
从图上看,当x0时,sin在-1和1之间无限次振荡,极限不存在.仔细观察该x
图象,发现图象的某些峰值不是1和-1,而我们知道正弦曲线的峰值是1和-1,这是由于自变量的数据点选取未必使sin取到1和-1的缘故,读者可试增加数据点,比较它们的结x
果.
例4 考察函数f(x)当x0时的变化趋势. x
解 输入命令
x=linspace(-2*pi,2*pi,100);y=sin(x)./x;plot(x,y)
x
limsinx=1. x0x从图上看,在x0附近连续变化,其值与1无限接近,可见 例5 考察f(x)(11)x当x时的变化趋势. x
解 输入命令
x=1:20:1000;y=(1+1./x).^x;plot(x,y)
从图上看,当x时,函数值与某常数无限接近,我们知道,这个常数就是e. - 11 -
3.3 求函数极限
例6 求lim1(1xx13
x31).
解 输入命令
syms x;f=1/(x+1)-3/(x^3+1);limit(f,x,-1)
得结果ans=-1.画出函数图形.
ezplot(f);hold on;plot(-1,-1,’r.’)
例7 求limtgxsinx. x0x3
解 输入命令
limit((tan(x)-sin(x))/x^3)
得结果 ans=1/2
例8 求lim(x1x1)x. x
解 输入命令
limit(((x+1)/(x-1))^x,inf)
得结果 ans=exp(2)
例9 求xlim0xx.
解 输入命令
limit(x^x,x,0,’right’)
得结果 ans =1
例10 求xlim0(ctgx).
解 输入命令
limit((cot(x))^(1/log(x)),x,0,’right’)
得结果 ans=exp(-1).
- 12 -
3.4 求方程的解
例11 解方程ax2bxc0.
解 输入命令
syms a b c x;
f=a*x^2+b*x+c;
solve(f)
得结果 ans=
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
如果不指明自变量,系统默认为x,也可指定自变量,比如指定b为自变量. solve(f,b)
得结果 ans=-(a*x^2+c)/x.
例12 解方程x55x10.
解 输入命令
f=x^5-5*x-1;solve(f)
得结果 ans=
[ -1.[***********][1**********]53]
[ -.[***********][1**********]959]
[.[***********][1**********]791e-1
-1.[***********][1**********]56*i]
[.[***********][1**********]791e-1
+1.[***********][1**********]56*i]
[ 1.[***********][1**********]33]
画出图象
ezplot(f,[-2,2]);hold on;plot([-2,2],[0,0])
练习
1.计算下列函数的极限. (1)lim1sin2x. x1cos4x (2)lim(1cosx)3secx. x
2
(3)lim
x
2. (2x)2
2xe2 (4)lim
x
0. - 13 -
2.解方程x2x10.
3.解方程x3sinx1.
4.解方程x3pxq0.(p、q为实数)
§4 导数的计算
4.1 常用命令
建立符号变量命令sym和syms调用格式
x=sym(`x`), 建立符号变量x;
syms x y z , 建立多个符号变量x,y,z;
matlab求导命令diff调用格式
diff(函数f(x)) , 求f(x)的一阶导数f(x);
diff(函数f(x), n) , 求f(x)的n阶导数f
4.2 导数一般概念
导数是函数的变化率,几何意义是曲线在一点处的切线斜率.
(1) 导数是一个极限值
x 例1 设f(x)e,用定义计算f(0). (n)(x)(n是具体整数).
解 f(x)在某一点x0的导数定义为极限: limx0f(x0x)f(x0) x
我们记hx,输入命令:
syms h;limit((exp(0+h)-exp(0))/h,h,0)
得结果:ans=1.可知f(0)1
(2) 导数的几何意义是曲线的切线斜率
例2 画出f(x)ex在x0处(P(0,1))的切线及若干条割线,观察割线的变化趋势.
- 14 -
解 在曲线yex上另取一点M(h,eh),则PM的方程是: y1eh1.即 x0h0
h yx1 h
取h3,2,1,0.1,0.01,分别作出几条割线.
h=[3,2,1,0.1,0.01];a=(exp(h)-1)./h;x=-1:0.1:3;
plot(x,exp(x),’r’);hold on
for i=1:5;
plot(h(i),exp(h(i)),’r.’)
plot(x,a(i)*x+1)
end
axis square
作出yex在x0处的切线yx1
plot(x,x+1,’r’)
从图上看,随着M与P越来越接近,割线PM越来越接近曲线的割线.
4.3 求一元函数的导数
(1)yf(x)的一阶导数
例3 求ysin(x)的导数. x
解 打开matlab指令窗,输入指令
dy_dx=diff(sin(x)/x).
得结果
dy_dx=cos(x)/x-sin(x)/x^2.
matlab的函数名允许使用字母、空格、下划线及数字,不允许使用其他字符,在这里我们用dy_dx表示yx.
例4 求yln(sinx)的导数.
解 输入命令
dy_dx=diff(log(sin(x))).
得结果
dy_dx=cos(x)/sin(x).
- 15 -
在matlab中,函数lnx用log(x)表示,而log10(x)表示lgx.
例5 求y(x22x)20的导数.
解 输入命令 dy_dx=diff((x^2+2*x)^20).
得结果
dy_dx=20*(x^2+2*x)^19*(2*x+2).
注意2x输入时应为2*x.
例6 求yxx的导数.
解 输入命令 dy_dx=diff(x^x).
得结果
dy_dx =x^x*(log(x)+1).
利用matlab 命令diff一次可以求出若干个函数的导数.
例7 求下列函数的导数: x22x5, y2cosx22cos2x,
y34sinx, y4lnlnx. y1
解 输入命令
a=diff([sqrt(x^2- 2*x+5),cos(x^2)+2*cos(2*x),4^(sin(x)),
log(log(x))]).
得结果
a=
[1/2/(x^2-2*x+5)^(1/2)*(2*x-2),-2*sin(x^2)*x-4*sin(2*x),
4^sin(x)*cos(x)*log(4), 1/x/log(x)].
dy1_dx=a(1).
dy1_dx=1/2/(x^2-2*x+5)^(1/2)*(2*x-2).
dy2_dx=a(2).
dy2_dx=-2*sin(x^2)*x-4*sin(2*x).
dy3_dx=a(3).
dy3_dx=4^sin(x)*cos(x)*log(4).
dy4_dx=a(4).
dy4_dx=1/x/log(x).
由本例可以看出,matlab函数是对矩阵或向量进行操作的,a(i)表示向量a的第i个分量.
(2) 参数方程所确定的函数的导数
设参数方程
- 16 - xx(t)dyy(t)确定函数yf(x),则y的导数. dxx(t)yy(t)
xa(tsint)dy 例8 设,求. dxya(1cost)
解 输入命令
dx_dt=diff(a*(t-sin(t)));dy_dt=diff(a*(1-cos(t)));
dy_dx=dy_dt/dx_dt.
得结果
dy_dx=sin(t)/(1-cos(t)).
其中分号的作用是不显示结果.
4.4 求高阶导数
例9 设f(x)x2e2x ,求f(20)(x).
解 输入命令 diff(x^2*exp(2*x),x,20).
得结果
ans =
99614720*exp(2*x)+20971520*x*exp(2*x)+1048576*x^2*exp(2*x).
练习
1.求下列函数的导数: (1)y(x1)(11) ; (2)yxsinxlnx; x
(3)y2sin2 ; (4)yln(x2xx2a2).
2.求下列参数方程所确定的函数的导数:
xt4xln(1t2) (1) ; (2) . y4tytarctgt
3.设yexcosx,求y(4).
4.验证yexsinx满足关系式:
y2y2y0.
§5 matlab自定义函数与导数应用
函数关系是指变量之间的对应法则,这种对应法则需要我们告诉计算机,这样,当我
- 17 -
们输入自变量时,计算机才会给出函数值,matlab软件包含了大量的函数,比如常用的正弦、余弦函数等.matlab允许用户自定义函数,即允许用户将自己的新函数加到已存在的matlab函数库中,显然这为matlab提供了扩展的功能,无庸置疑,这也正是matlab的精髓所在.因为matlab的强大功能就源于这种为解决用户特殊问题的需要而创建新函数的能力.matlab自定义函数是一个指令集合,第一行必须以单词function作为引导词,存为具有扩展名“.m”的文件,故称之为函数M-文件.
5.1 函数M-文件的定义格式
函数M-文件的定义格式为:
function 输出参数=函数名(输入参数)
函数体
„„
函数体
一旦函数被定义,就必须将其存为M-文件,以便今后可随时调用.比如我们希望建立函数f(x)x22x1,在matlab工作区中输入命令:
syms x;y=x^2+2*x+1;
不能建立函数关系,只建立了一个变量名为y的符号表达式,当我们调用y时,将返回这一表达式.
y
y=x^2+2*x+1
当给出x的值时,matlab不能给出相应的函数值来.
x=3;y
y=x^2+2*x+1
如果我们先给x赋值.
x=3;y=x^2+2*x+1
得结果:y=16
若希望得出y|x2的值,输入:
x=2;y
得结果:y=16,不是x2时的值.读者从这里已经领悟到在matlab工作区中输入命令:y=x^2+2*x+1不能建立函数关系,如何建立函数关系呢?我们可以点选菜单Fill\New\M-fill打开matlab文本编辑器,输入:
- 18 -
function y=f1(x)
y=x^2+2*x+1;
存为f1.m.调用该函数时,输入:
syms x;y=f1(x)
得结果:y= x^2+2*x+1.输入:
y1=f1(3)
得结果:y1=16
matlab求最小值命令fmin调用格式:
fmin(‘fun’,a,b) 给出f(x)在(a,b)上的最小值点.
5.2 自定义函数
例1 建立正态分布的密度函数
f(x,,.)e2(x)22.
解 打开文本编辑器,输入
function y=zhengtai(x,a,b)
y=1/sqrt(2*pi)/a*exp(-(x-b).^2/2/a^2);
存为zhengtai.m.调用时可输入命令
y=zhengtai(1,1,0)
得结果
y=0.2420.
此即f(1,1,0)的值.如果想画出标准正态分布的密度函数的图象,输入
ezplot(zhengtai(x,1,0)).
例2 解一元二次方程ax2bxc0.
解 我们希望当输入a,b,c的值时,计算机能给出方程的两个根.在文本编辑器中建立名为rootquad.m的文件.
function [x1,x2]=rootquad(a,b,c)
d=b*b-4*a*c;
x1=(-b+sqrt(d))/(2*a)
x2=(-b-sqrt(d))/(2*a)
比如求方程2x23x70的根,可用语句
[r1,r2]=rootquad(2,3,-7),
得结果 r1=1.2656 r2=-2.7656 .
- 19 -
5.3 验证罗必塔法则 罗必塔法则是指在求及的极限时,可用导数之比的极限来计算(如果导数之比的极限存在或)
xx 例3 以limab为例验证罗必塔法则. x0x
解 这是型极限 f=a^x-b^x;g=x;L=limit(f/g,x,0)
得结果:L=log(a)-log(b)
df=diff(f,x);dg=diff(g,x);L1=limit(df/dg,x,0)
得结果:L1=log(a)-log(b)
从结果看出 L=L1,即
xbx(axbx)'a=lim. limx0x0xx
5.4 函数的单调性与极值
例4 求函数f(x)x36x29x3的单调区间与极值.
解 求可导函数的单调区间与极值,就是求导函数的正负区间与正负区间的分界点,利用matlab解决该问题,我们可以先求出导函数的零点,再画出函数图象,根据图象可以直观看出函数的单调区间与极值.输入命令
f=x^3-6*x^2+9*x+3;df=diff(f,x);s=solve(df),
得结果 ans=[1,3], 画出函数图象.
ezplot(f,[0,4]).
从图上看,f(x)的单调增区间为(,1)、(1,),单调减区间是(1,3),极大值f(1)7,极小值f(3)3.
我们可以建立一个名为dandiao.m的M—文件,用来求求函数的单调区间.
disp(‘输入函数(自变量为x)’)
syms x
f=input('函数f(x)=')
df=diff(f);
s=solve(df)
a=[];
for i=1:size(s);
a(i)=s(i);
- 20 -
end
ezplot(f,[min(a)-1,max(a)+1])
要求函数yxln(1x)的单调区间与极值,可调用dandiao.m.输入
dandiao
在matlab工作区出现以下提示 输入函数(自变量为x) 函数f(x)=
在光标处输入:x-log(1+x),可得结果s=0.从图上看,f(x)的单调增区间为(0,),单调减区间是(,0),极小值f(0)0.
5.5 函数的最值
调用求函数最小值命令fmin时,可得出函数的最小值点,为求最小值,必须建立函数M—文件.
例5 求函数f(x)(x3)21在区间(0,5)上的最小值. 解 我们可以建立一个名为f.m的函数M-文件. function y=f(x) y=(x-3).^2-1; 并且调用fmin
x=fmin((‘f’,0,5)
得:x=3,f(x)在最小值点处的值(函数最小值)是f(3)1.
求最大值时可用x=fmin(‘-f(x)’,a,b)
练习
1.建立函数f(x,a)asinxsin3x,当a为何值时,该函数在x处取得极
33
值,它是极大值还是极小值,并求此极值.
2.确定下列函数的单调区间:
(1)y2x36x218x7 ; (2)y2x
8
(x0); x
(3)yln(xx2) ; (4)y(x1)(x1)3.
3.求下列函数的最大值、最小值:
3
2
4
2
(1)y2x3x,1x4; (2)yx8x2,1x3.
- 21 -
§6 一元函数积分的计算
6.1 常用命令
matlab积分命令int调用格式:
f(x)dx;
int(函数f(x,y),变量名x) 计算不定积分f(x,y)dx;
b
int(函数f(x),a,b) 计算定积分f(x)dx;
a
b
int(函数f(x,y),变量名x,a,b) 计算定积分f(x,y)dx.
a
int(函数f(x)) 计算不定积分
6.2 计算不定积分
例1 计算xlnxdx.
解 输入命令
int(x^2*log(x)) 可得结果
ans=1/3*x^3*log(x)-1/9*x^3. 注意设置符号变量.
例2 计算下列不定积分: 1.
2
a2x2dx; 2.x1dx; 3.x2arcsinxdx.
x1
解 首先建立函数向量. syms x
syms a real
y=[sqrt(a^2-x^2),(x-1)/(3*x-1)^(1/3),x^2*asin(x)]; 然后对y积分可得对y的每个分量积分的结果. int(y,x) ans =
[1/2*x*(a^2-x^2)^(1/2)+1/2*a^2*asin((1/a^2)^(1/2)*x), -1/3*(3*x-1)^(2/3)+1/15*(3*x-1)^(5/3),
1/3*x^3*asin(x)+1/9*x^2*(1-x^2)^(1/2)+2/9*(1-x^2)^(1/2)]
6.3 求和运算
sum(x),给出向量x的各个元素的累加和,如果x是矩阵,则sum(x)是一个元素为x的每列列和的行向量.
- 22 -
例1 x=[1,2,3,4,5,6,7,8,9,10]; sum(x) ans=55
例2 x=[1,2,3;4,5,6;7,8,9] x=
1 2 3 4 5 6 7 8 9 sum(x)
ans=12 15 18
符号表达式求和命令symsum调用格式. symsum(s,n), 求
s
km
n
symsum(s,k,m,n),求
s
n
当x的元素很有规律,比如为表达式是s(k)的数列时,可用symsum求得x的各项和,即
symsum(s(k),1,n)=s(1)s(2)s(n)
symsum(s(k),k,m,n)s(m)s(m1)s(n)
例3 syms k n symsum(k,1,10) ans=55
symsum(k^2,k,1,n)
ans=1/3*(n+1)^3-1/2*(n+1)^2+1/6*n+1/6 matlab求定积分命令int调用格式 int(函数f(x),a,b) , 计算定积分
a
b
f(x)dx;
int(函数f(x,y),变量名x,a,b) , 计算定积分
6.4 定积分的概念
a
b
f(x,y)dx.
定积分是一个和的极限.取f(x)ex,积分区间为[0,1],等距划分为20个子区间. x=linspace(0,1,21);
选取每个子区间的端点,并计算端点处的函数值. y=exp(x);
取区间的左端点乘以区间长度全部加起来. y1=y(1:20);s1=sum(y1)/20
- 23 -
s1=1.6757 s1可作为exdx的近似值. 若选取右端点
y2=y(2:21);s2=sum(y2)/20 s2=1.7616
s2也可以作为exdx的近似值.下面我们画出图象.
plot(x,y);hold on for i=1:20
fill([x(i),x(i+1),x(i+1),x(i),x(i)],[0,0,y(i),y(i),0],’b’) end
如果选取右端点,则可画出图象. for i=1:20;
fill([x(i),x(i+1),x(i+1),x(i),x(i)],[0,0,y(i+1),y(i+1),0],’b’) hold on end
plot(x,y,’r’)
在上边的语句中,for „ end是循环语句,执行语句体内的命令20次,fill命令可以填充多边形,在本例中,用的是兰色(blue)填充.从图上看s1
0
1
0
1
0exdxs2,当分点逐渐
1
增多时,s2s1的值越来越小,读者可试取50个子区间看一看结果怎样.下面按等分区间计算lim
n
i1
n
f()xilim
n. enni1
n
syms k n
s=symsum(exp(k/n)/n,k,1,n); limit(s,n,inf) 得结果
ans=exp(1)-1.
6.5 计算定积分和广义积分 例4 计算exdx.
解 输入命令:int(exp(x),0,1)
得结果ans=exp(1)-1.这与我们上面的运算结果是一致的. 例5 计算
1
0
0
2
x1dx
解 输入命令
- 24 -
int(abs(x-1),0,2)
得结果ans =1.本例用mathematica软件不能直接求解. 例6 判别广义积分
1
dx、edx与2
20(1x)2dx的敛散性,收敛xp
2
时计算积分值.
解 对第一个积分输入命令
syms p real;int(1/x^p,x,1,inf)
得结果ans =limit(-1/(p-1)*x^(-p+1)+1/(p-1),x = inf).由结果看出当p1时,x^(-p+1)为无穷,当p1时,ans=1/(p-1),这与课本例题是一致的. 对第二个积分输入命令
int(1/(2*pi)^(1/2)*exp(-x^2/2),-inf,inf) 得结果:
ans=[**************]3/[**************]84*2^(1/2)*pi^(1/2) 由输出结果看出这两个积分收敛.
对后一个积分输入命令 int(1/(1-x)^2,0,2)
结果得ans=inf.说明这个积分是无穷大不收敛.
t
例7 求积分dx
0
x
解 输入命令:int(sin(x)/x,0,t),可得结果sinint(t),通过查帮助(help sinint)
t
可知sinint(t)=dx,结果相当于没求!实际上matlab求出的只是形式上的结果,
0
x
因为这类积分无法用初等函数或其值来表示.尽管如此,我们可以得到该函数的函数值.输入vpa(sinint(0.5))可得sinint(0.5)的值.
练习
1.计算下列不定积分:
dx ; x2dx; (2)sin2xdx ; (3)
sin2xx25x1
dx; (5)x2e2xdx ; (6)dx. (4)x2x2x1
(1)
2.计算下列定积分: (1)
1xlnxdx ; (2)e
x3sin2x
dx;
- 25 -
(3)
1
e
sin(lnx)dx ; (4)
t
32dx. 1x42x21
1
3.求
dx并用diff对结果求导. 1(xlnx)2
4.求摆线xa(tsint),ya(1cost)的一拱(0t2)与x轴所围成的图形的面积.
§7 常微分方程
7.1 常用命令
matlab求解微分方程命令dsolve,调用格式为:
dsolve(‘微分方程’)给出微分方程的解析解,表示为t的函数; dsolve(‘微分方程’,‘初始条件’)给出微分方程初值问题的解,表示为t的函数; dsolve(‘微分方程’,‘变量x’)给出微分方程的解析解,表示为x的函数; dsolve(‘微分方程’,‘初始条件’,‘变量x’)给出微分方程初值问题的解,表示为x的函数.
7.2 求解一阶微分方程
微分方程在输入时,y应输入Dy,y应输入D2y等,D应大写.
dyx2
例1 求微分方程2xyxe的通解.
dx
解 输入命令
dsolve('Dy+2*x*y=x*exp(-x^2)')
结果为 ans =
1/2*(1+2*exp(-2*x*t)*C1*exp(x^2))/exp(x^2)
系统默认的自变量是t,显然系统把x当作常数,把y当作t的函数求解.输入命令 dsolve('Dy+2*x*y=x*exp(-x^2)','x') 得正确结果 ans =
1/2*(x^2+2*C1)/exp(x^2)
例2 求微分方程xyye0在初始条件y 解 输入命令
dsolve('x*Dy+y-exp(x)=0','y(1)=2*exp(1)','x')
- 26 -
x
x1
2e下的特解.
得结果为 ans =
1/x*(exp(x)+exp(1)) 例3 求微分方程(x21)dy
2xycosx0在初始条件yx0
1下的特解.
dx
解 输入命令
dsolve('(x^2-1)*Dy+2*x*y-cos(x)=0','y(0)=1','x')
得结果为 ans =
1/(x^2-1)*(sin(x)-1) 7.3 求解二阶微分方程 例4 求y3yex
0的通解. 解 输入命令
dsolve('D2y+3*Dy+exp(x)=0','x')
得结果 ans =
-1/4*exp(x)+C1+C2*exp(-3*x)
例5 求解微分方程
ye2yy0.
解 输入命令
dsolve('D2y-exp(2*y)*Dy=0','x')
得结果 ans =
1/2*log(-2*C1/(-1+exp(2*x*C1+2*C2*C1)))+x*C1+C2*C1 .
练习
求下列微分方程的通解:
1.2x2
yyy2
1 ; 2.dyydxxyx
; 3.ycos
yxx
x
; 4.(xcosysin2y)y1; 5.y3yyex
cos2x ; 6.y4yx1sinx;
7.
x22xyy2(y22xyx2
)dydx0;
yx11
- 27 -
d2xdx
2na2x02
dtdt
8. .
dxxx,
t00t0V0dt
§8 空间图形的绘制
Matlab绘制空间曲线的命令为plot3,调用格式绘制平面曲线的命令plot类似。 例1 画出螺旋线x2cos3t,
y2sin3t,z1.5t的图形.
解 输入命令
t=linspace(0,4*pi,300); x=2*cos(3*t); y=2*sin(3*t); z=1.5*t; plot3(x,y,z)
结果如图所示.
例2 画出圆锥螺线xtcos3t,
ytsin3t,z1.5t的图形.
解 输入命令
t=linspace(0,4*pi,300); x=t.*cos(3*t); y=t.*sin(3*t); z=1.5*t; plot3(x,y,z)
结果如图所示。
Matlab绘制空间曲面的命令为mesh和surf,mesh绘制网格形状的曲面,surf绘制由小平面组成的曲面。
例3 画出抛物面zxy的图形. 解 输入命令
x=linspace(-2,2,20);
y=linspace(-3,3,30);
- 28 -
2
2
[x,y]=meshgrid(x,y); z=x.^2+y.^2; mesh(x,y,z)
结果如图所示.
若使用surf(x,y,z)可得如图的结果。还可以对曲面进行平滑插值处理:shading interp,得如下结果。
可以采用曲面的参数方程:xrcost,yrsint,zr2,输入命令 r=linspace(0,2,20); t=linspace(0,2*pi,30); [r,t]=meshgrid(r,t); x=r.*cos(t); y=r.*sin(t); z=r.^2; mesh(x,y,z) 结果如图
或surf(x,y,z);shading interp绘制平滑曲面图
- 29 -
§9 偏导数的计算
9.1 常用命令
matlab求偏导命令diff调用格式:
diff(函数f(x,y),变量名x), 求f(x,y)对x的偏导数
f; x
nf
diff(函数f(x,y), 变量名x,n) ,求f(x,y)对x的n阶偏导数.
xn
matlab求雅可比矩阵命令jacobian,调用格式:
jacobian([函数f(x,y,z);函数g(x,y,z); 函数h(x,y,z)], [x,y,z])给出矩阵
fxgxhx
fygyhy
fzg
. zhz
9.2 求多元函数的偏导数
例1 设 u=x2y2z2求 u的一阶偏导数.
解 输入命令
diff((x^2+y^2+z^2)^(1/2), x). 得结果
ans=1/(x^2+y^2+z^2)^(1/2)*x. 在命令中将末尾的x换成y将给出y的偏导数 ans=1/(x^2+y^2+z^2)^(1/2)*y. 也可以输入命令
jacobian((x^2+y^2+z^2)^(1/2),[x y]). 得结果
ans=[1/(x^2+y^2+z^2)^(1/2)*x, 1/(x^2+y^2+z^2)^(1/2)*y].
给出矩阵,.
xy
例2 求下列函数的偏导数:
- 30 -
y
z1arctg(); z2xy .
x
解 输入命令
diff(atan(y/x), 得结果
ans=-y/x^2/(1+y^2/x^2); 输入命令
diff(atan(y/x), y), 得结果
ans=1/x/(1+y^2/x^2); 输入命令
diff(x^y, x), 得结果
ans=x^y*y/x; 输入命令
diff(x^y, y), 得结果
ans=x^y*log(x).
使用jacobian命令求偏导数更为方便. 输入命令
jacobian([atan(y/x),x^y],[x,y]), 得结果
ans=[ -y/x^2/(1+y^2/x^2), 1/x/(1+y^2/x^2)] [ x^y*y/x, x^y*log(x)].
9.3 求高阶偏导数
例3 设zx63y42x2y2,求2z2z2z
x2,y2,
xy
. 解 输入命令
diff(x^6-3*y^4+2*x^2*y^2,x,2)
2可得到zx
2
ans=30*x^4+4*y^2.
将命令中最后一个x换为y得2y
2
ans=-36*y^2+4*x^2. 输入命令
- 31 -
diff(diff(x^6-3*y^4+2*x^2*y^2,x),y)
2
可得
xy
ans=8*x*y.
2
同学们可自己计算比较它们的结果.
yx
2
注意命令diff(x^6-3*y^4+2*x^2*y^2,x,y),是对y求偏导数,不是求.
xy
9.4 求隐函数所确定函数的导数或偏导数 例4 设lnxee,求
yx
yx
dy. dx
解 F(x,y)lnxe
e,先求Fx,再求Fy.
输入命令
df_dx=diff(log(x)+exp(-y/x)-exp(1),x) 得到Fx
df_dx=1/x+y/x^2*exp(-y/x); 输入命令
df_dy=diff(log(x)+exp(-y/x)-exp(1),y)
得到Fy
df_dy=-1/x*exp(-y/x).
输入命令
dy_dx=-df_dx/df_dy 可得所求结果
dy_dx=-(-1/x-y/x^2*exp(-y/x))*x/exp(-y/x).
例5 设sin(xy)cos(yz)tg(xz)0 ,求z,z.
xy
解 记F(x)sin(xy)cos(yz)tg(xz). 输入命令
a=jacobian(sin(x*y)+cos(y*z)+tan(z*x),[x,y,z])
,Fz 可得矩阵Fx,Fy
a=
- 32 -
[cos(x*y)*y+(1+tan(z*x)^2)*z,cos(x*y)*x-sin(y*z)*z, -sin(y*z)*y+(1+tan(z*x)^2)*x]; 输入命令
dz_dx=-a(1)/a(3) 得
dz_dx=
(-cos(x*y)*y-(1+tan(z*x)^2)*z)/(-sin(y*z)*y+(1+tan(z*x)^2)*x); 输入命令
dz_dy=-a(2)/a(3) 得
dz_dy=
(-cos(x*y)*x+sin(y*z)*z)/(-sin(y*z)*y+(1+tan(z*x)^2)*x).
练习
1.求下列隐函数的导数: (1)arctg
y
x
lnx2y2 ; (2)xyyx . 2.求下列函数的偏导数:
z
(1) zx2sin(xy) ; (2)u
y
.
3.设uxln(xy),求22x2,
y2,2xy
. 4.求下列多元隐函数的偏导数x,y
.
(1)cos2xcos2ycos2z1 ; (2)ezxyz.
5.证明函数uln
(xa)2(yb)2(a,b为常数)满足拉普拉斯方程
2x22y2
0. (提示:对结果用simplify化简)
§10 重积分与曲线积分
10.1 二重积分计算
2 例1 求二次积分1x1
0dx
2x
xydy.
解 建立符号变量x和y后,输入命令
- 33 -
int(int(x*y,y,2*x,x^2+1),x,0,1) 得结果ans=1/12.
例2 计算二重积分
22(xyx)dxdy,其中D是由直线y2,yx及D
y2x所围成的闭区域.
解 该二重积分可以化为二次积分
2
dyy(x2y2x)dx,输入命令
2
y
int(int(x^2+y^2-x,x,y/2,y),y,0,2)
得结果ans= 13/6.
例3 计算积分I
2
dy
sinx
dx.
yx
解 输入命令
int(int(sin(x)/x,x,y-pi,pi),y,pi,2*pi) 得结果ans =2.
若不借助于计算机计算,需要交换积分次序. 例4 求
x2y21
sin((x2y2))dxdy.
x2,二重积
解 积分区域用不等式可以表示成1x1,x2y分可化为二次积分dx
1
1x2x
2
sin((x2y2)dy,输入命令
int(int(sin(pi*(x^2+y^2)),y,-sqrt(1-x^2),sqrt(1-x^2)),x,-1,1)
由输出结果可以看出,结果中仍带有int,表明matlab求不出这一积分的值.采用极坐标可化为二次积分
int(int(r*sin(pi*r^2),r,0,1),a,0,2*pi) 可得结果为ans=2.
10.2 三重积分计算 例5 计算三重积分I
0
2
darsin(r2)dr,输入命令
1
1
dx
1x
dy
1xy
dz
(1xyz)3
解 输入命令
int(int(int(1/(1+x+y+z)^3,z,0,1-x-y),y,0,1-x),x,0,1) 得结果ans =-5/16+1/2*log(2).
- 34 -
例6 计算三重积分
222
,为球面xyz1及三个坐标面所围xyzdxdydz
成的在第一卦限内的区域.
解 该三重积分可化为累次积分
dx
1
x2
dy
x2y2
xyzdz.输入命令
int(int(int(x*y*z,z,0,sqrt(1-x^2-y^2)),y,0,sqrt(1-x^2)),x,0,1)
得结果ans =1/48.
10.3 曲线积分计算 例7 求曲线积分
Lxyds,其中L为曲线x2y21在第一象限内的一段.
2
解 曲线的参数方程是xcost,ysint,(0t)曲线积分可以化为
20
costsintdt.
输入命令
int(cos(t)*sin(t),0,pi/2) 执行后即可求出曲线积分结果1/2.
例8 计算曲线积分
L
y2ds,L为摆线的一拱x2(tsint),ya(1cost),
(0t2).
解 曲线积分可以化为
2
4(1cost)288costdt.输入命令
int(4*(1-cos(t))^2*sqrt(8-8*cos(t)),t,0,2*pi) 得结果ans =1024/15*4^(1/2).
练习
1.计算二重积分: (1)
x2y21
(xy)dxdy; (2)(x2y2)dxdy.
x2y2x
2.计算三重积分: (1) (2)
0zyxa ; xyzdxdydz,:
xdxdydz,:xyza,x0,y0,z0.
3.计算
L
x2y2ds ,L为圆周x2y2ax(a0).
- 35 -
4.计算
L(x2y2)dx(x2y2)dy,其中L为抛物线yx2上从点(0,0)到点
(2,4)的一段弧.
§11 级数
11.1 常用命令
求已知函数的taylor展开式taylor命令,调用格式为: taylor(函数f(x)) f(x)的5次taylor多项式; taylor(函数f(x),n) f(x)的n-1次taylor多项式; taylor(函数f(x),a) f(x)在a点的taylor多项式. 求级数的和命令symsum调用格式为: symsum(S,n),求
S;
km
n
symsum(S,k,m,n),求
S.
n
matlab求极限命令limit调用格式为:
limit(函数f(x),变量x,自变量的趋向值)
11.2 taylor展开式
例1 求函数y=cosx在x=0点处的5阶taylor展开式及在x展开式.
解 输入命令
syms x;taylor(cos(x))
3
处的6阶taylor
得结果 ans =
1-1/2*x^2+1/24*x^4 ; 输入命令
taylor(cos(x),pi/3,7)
得结果 ans =
1/2-1/2*3^(1/2)*(x-1/3*pi)-1/4*(x-1/3*pi)^2+1/12*3^(1/2)*(x- 1/3*pi)^3+1/48*(x-1/3*pi)^4-1/240*3^(1/2)*(x-1/3*pi)^5-1/1440*(x-1/3*pi)^6 .
- 36 -
11.3 级数求和 例2 求
1n12
n
. 解 输入命令
syms n;symsum(1/2^n,1,inf)
得结果 ans = 1 .
例3 求幂级数xn
n2
的和函数.n1n
解 输入命令
symsum(x^n/(n*2^n),n,1,inf)
得结果 ans =
-log(1-1/2*x) . 例4 求幂级数
nx
n
的和函数.
n1
解 输入命令
symsum(n*x^n,n,1,inf)
得结果 ans =
x/(x-1)^2 .
11.4 判别级数敛散性
例5判断数项级数
1
n(n1)
的收敛性.n1 解 输入求和命令
symsum(1/(n*(n+1)),n,1,inf)
得结果
ans = 1 .
求和得是1,说明该级数收敛.
例6 判别级数
sin
n1
n(n1)
的敛散性. - 37 -
解 输入命令
symsum(sin(pi/(n*(n+1))),1,inf)
得结果 ans =
sum(sin(pi/n/(n+1)),pi = 1 .. inf) .
由执行结果看出仍含有sum,说明用matlab不能求出其和,可采用比较判别法,取比较级数为P级数输入命令
limit(sin(pi/(n*(n+1)))/(1/n^2),n,inf)
1
,取二者通项比值的极限. 2nn1
得结果
ans = pi .
得值为pi,由所取P级数收敛,得知所要判别的级数也收敛.
3
例7 判别级数n的敛散性.
n14
解 用比值判别法,输入命令
limit((n+1)*(3/4)^(n+1)/(n*(3/4)^n),n,inf)
n
得结果 ans = 3/4 .
极限值小于1,由比值判别法知级数收敛.实际上输入求和命令
symsum(n*(3/4)^n,n,1,inf)
得结果 ans = 12 .
练习
1.给出函数f(x)esinx2cosx在点x0的7阶taylor展开式以及在x=1处的 5阶taylor展开式.
2.判别下列级数的敛散性,若收敛求其和.
111
(1)1 ; (2)tg;
3572nn1n1
n11n
(3)(1) ; (4)(1).
2nlnnnn1n1n2
x
x
- 38 -
3.求幂级数
(1)
n2
n
xnnn
2
的和函数.
4.求函数项级数
(1)nsin
n1
2n
xn)的和函数.
- 39 -
MATLAB在微积分中的应用
MATLAB是MathWorks公司于1982年推出的一套高性能的数值计算和可视化数学软件.被誉为“巨人肩上的工具”.用Matlab编写程序犹如在演算纸上排列出公式与求解问题,所以又被称为演算纸式科学算法语言.在这个环境下,对所要求解的问题,用户只需简单地列出数学表达式,其结果便以数值或图形方式显示出来.
§1 MATLAB入门
1.1 matlab的数值计算
运行MATLAB的可执行文件,进入Matlab工作窗口,在提示符“>>”后输入算术表达式,按Enter键即可得到该表达式的值,就象在计算器中运算一样.加、减、乘、除、乘方的算符依次为+、-、*、/、^.
例1 计算2+3×5的值.
解 在Matlab工作区输入命令:2+3*5^9,按Enter键,可得计算结果
2+3*5^9 ans =
5859377
MATLAB会将最近一次的运算结果直接存入一变量ans,变量ans代表MATLAB运算後的答案,并将其数值显示到屏幕上.也可以将计算结果赋值给一个自定义的变量,自定义变量应遵循以下命名规则:
(1)MATLAB对变量名的大小写是敏感的.
(2)变量的第一个字符必须为英文字母,而且不能超过31个字符. (3)变量名可以包含下划线、数字,但不能为空格符、标点.
例2 计算11.31.9
0.239
sin1的值,并将其赋值给变量a.
解 a=11.3*1.9^0.23+sin(1)
a =
13.9391
如果在上述的例子结尾加上”;”,则计算结果不会显示在指令视窗上,要得知计算值只须键入该变量名即可.
MATLAB可以将计算结果以不同的精确度的数字格式显示,我们可以在命令窗口的File 菜单下点击preferences子菜单,在随之打开的preferences对话框中,选取Command Window选项,设置Numerical Format参数,或者直接在matlab工作区键入以下指令:format short (这是默认的), format long等.
- 1 -
1.2 Matlab的数组运算
Matlab数组是Matlab进行运算的单元.创建数组就像我们在纸上写一个数组一样,元素与元素用“,”号或空格进行分隔,行与行用“;”号进行分隔.
例3 命令a=[1 2 3 4 5 6]建立一个1行6列的数组. 该命令与a=[1,2,3,4,5,6]是一样的.
命令b=[1 2 3;4 5 6]建立一个2行3列的数组. 数组运算的运算符与数值运算一样. 例4 a=[1 1 1;2 2 2] (建立数组a) a =
1 1 1 2 2 2
b=[3 3 3;4 4 4] (建立数组b) b =
3 3 3 4 4 4
a+b (求数组a与数组b的和) ans =
4 4 4 6 6 6
a-b (求数组a与数组b的差) ans =
-2 -2 -2 -2 -2 -2
a+3 (数组a的每一个元素都加上3) ans =
4 4 4 5 5 5
2*b (数组b的每一个元素都乘以2) ans =
6 6 6 8 8 8
两个同类型数组的对应元素相乘除的运算符是“./”和“.*”. 例5 a.*b (a的对应元素与b的对应元素相乘) ans =
3 3 3 8 8 8
a./b (a的对应元素除以b的对应元素) ans =
- 2 -
0.[1**********]333 0.[1**********]333 0.[1**********]333 0.[1**********]000 0.[1**********]000 0.[1**********]000
运算符“./”及“.*”应与运算符“/”及“*”相区别,a*b表示矩阵a与b的乘积,a/b表示矩阵a乘以矩阵b的逆矩阵.
例6 a=[1 2;2 1] (建立矩阵a) a =
1 2 2 1
b=[1 3;0 1] (建立矩阵b) b =
1 3 0 1
a*b (求矩阵a与矩阵b的乘积ab) ans =
1 5 2 7
a/b (求矩阵a与矩阵b的逆矩阵的乘积) ans =
1 -1 2 -5
运算符“^”表示方阵的幂,而运算符“.^”表示数组中每一个元素的幂. 例7 a^2 (矩阵a的平方) ans =
5 4 4 5
a.^2 (矩阵(数组)a的每一个元素的平方) ans =
1 4 4 1
1.3 Matlab的符号运算
matlab可以进行符号运算,需要预先定义符号变量.使用指令sym或syms定义符号变量.
例8 a=sym(‘x’) (将符号变量x赋值给变量a) a = x
sin(a)/cos(a) (符号表达式sin(a)/cos(a)) ans =
sin(x)/cos(x)
- 3 -
syms x y (定义符号变量x和y)
b=(x+y)^2-4*x*y (将符号表达式赋值给变量b) b=
(x+y)^2-4*x*y
a+b (求变量a与b的和) ans =
x+(x+y)^2-4*x*y
1.4 Matlab 的数学常数和函数
Matlab数学常数如下: pi 数学常数 inf 无穷大 eps 最小的浮点数
§2 MATLAB绘制一元函数的图形
2.1 常用命令
matlab绘图命令比较多,我们选编一些常用命令,并简单说明其作用,这些命令的调用格式,可参阅例题及使用帮助help查找.
表1 二维绘图函数
- 4 -
表2 基本线型和颜色
表3 二维绘图工具
表4 axis命令
linspace 创建数组命令,调用格式为:
x=linspace(x1,x2,n),创建了x1到x2之间有n个数据的数组.
funtool 函数工具,在matlab指令窗键入funtool可打开“函数计算器”图形用户界面.
2.2 绘制函数图形举例
- 5 -
例1 画出ysinx的图形.
解 首先建立点的坐标,然后用plot命令将这些点绘出并用直线连接起来,采用中学五点作图法,选取五点(0,0)、(,1)、(,0)、(,1)、(2,0).
22
输入命令
x=[0,pi/2,pi,3*pi/2,2*pi];y=sin(x);plot(x,y)
这里分号表示该命令执行结果不显示.从图上看,这是一条折线,与我们熟知的正弦曲线误差较大,这是由于点选取的太少的缘故。可以想象,随点数增加,图形越来越接近
ysinx的图象.例如,在0到2之间取30个数据点,绘出的图形与ysinx的图象已
经非常接近了.
x=linspace(0,2*pi,30);y=sin(x);plot(x,y).
也可以如下建立该图形.
x=0:0.1:2*pi;y=sin(x);plot(x,y)
还可以给图形加标记、格栅线. x=0:0.1:2*pi; y=sin(x);
plot(x,y,’r—‘) title(‘正弦曲线’) xlabel(‘自变量 x’) ylabel(‘函数y=sinx’) text(5.5,0,’y=sinx’) grid
上述命令第三行选择了红色虚线,第四行给图加标题“正弦曲线”,第五行给x轴加标题“自变量x”,第六行给y轴加标题“函数ysinx”,第七行在点(5.5,0)处放置文本“ysinx”,第八行给图形加格栅线
.
- 6 -
例2 画出y2x和y(1/2)x的图象.
解 输入命令
x=-4:0.1:4;y1=2.^x;y2=(1/2).^x;plot(x,y1,x,y2); axis([-4,4,0,8])
matlab允许在一个图形中画多条曲线.plot(x1,y1,x2,y2,x3,y3)指令绘制
y1f(x1),y2f(x2)等多条曲线.matlab自动给这些曲线以不同颜色.
例3 画出yarctgx的图象. 解 输入命令
从图上看,yarctgx是有界函数,y是其水平渐近线
.
2
例4 在同一坐标系中画出ysinx,yx,ytgx的图象. 解 输入命令
x=-pi/2:0.1:pi/2;y1=sin(x);y2=tan(x); plot(x,x,x,y1,x,y2) axis equal
axis([-pi/2,pi/2,-3,3]) grid
从图上看,当x0时,sinxxtgx,当x0时,sinxxtgx,yx是ysinx和ytgx在原点的切线,因此,当x1时,sinxx,tgxx.
例5 画出y10x1及ylg(x1)的图形.
解 输入命令
x1=-1:0.1:2;y1=10.^x1-1;x2=-0.99:0.1:2;y2=log10(x2+1); plot(x1,y1,x2,y2)
- 7 -
从图上看,这两条曲线与我们所知的图象相差很远,这是因为坐标轴长度单位不一样的缘故.y10x1与ylg(x1)互为反函数,图象关于yx对称,为更清楚看出这一点,我们再画出yx的图象.
hold on
x=-1:0.01:2;y=x;plot(x,y,’r’) axis([-1,2,-1,2]) axis square;hold off
plot语句清除当前图形并绘出新图形,hold on语句保持当前图形
.
例6 画出心形线r3(1cosa)的图象.
解 输入命令
x=-2*pi:0.1:2*pi;r=3*(1+cos(x));polar(x,r) 例7 画出星形线x3cos3t,y3sin3t的图象. 解 这是参数方程,可化为极坐标方程. r
(cosa
sina)2
- 8 -
输入命令
x=0:0.01:2*pi;
r=3./(((cos(x)).^2).^(1/3)+((sin(x)).^2).^(1/3)).^(3/2); polar(x,r)
注意,如果建立r与t的关系,此时t只是参数,不是极坐标系下的极角.
练习
1.画出yarcsinx的图象.
2.画出ysecx在[0,]之间的图象. 3.在同一坐标系中画出y4.画出f(x)(1性.
5.画出y1ln(x2)及其反函数的图象. 6.画出y
x)3
x,yx2,y
x)3
x,yx3,yx的图象.
(1的图象,并根据图象特点指出函数f(x)的奇偶
x21及其反函数的图象.
§3 利用MATLAB求一元函数的极限
3.1 常用命令
matlab求极限命令可列表如下:
matlab代数方程求解命令solve调用格式.
- 9 -
solve(函数f(x)) 给出f(x)0的根.
3.2 理解极限概念
数列{xn}收敛或有极限是指当n无限增大时,xn与某常数无限接近或xn趋向于某一定值,就图形而言,也就是其点列以某一平行与y轴的直线为渐近线. 例1 观察数列{n当n时的变化趋势.
n1
解 输入命令
n=1:100;xn=n./(n+1)
得到该数列的前100项,从这前100项看出,随n的增大,
与1非常接近,画出x的
n
n1
图形.
stem(n,xn) 或
for i=1:100;
plot(n(i),xn(i),’r’) hold on end
其中for „ end语句是循环语句,循环体内的语句被执行100次,n(i)表示n的第i个分量.由图可看出,随n的增大,点列与直线y1无限接近,因此可得结论 lim
n=1. nn1
对函数的极限概念,也可用上述方法理解
.
例2 分析函数f(x)xsin,当x0时的变化趋势.
x
解 画出函数f(x)在[1,1]上的图形. x=-1:0.01:1;y=x.*sin(1./x);plot(x,y)
- 10 -
从图上看,xsin随着x的减小,振幅越来越小趋近于0,频率越来越高作无限次振荡.x
作出yx的图象.
hold on;plot(x,x,x,-x)
例3 分析函数f(x)sin当x0时的变化趋势. x
解 输入命令
x=-1:0.01:1;y=sin(1./x);plot(x,y)
从图上看,当x0时,sin在-1和1之间无限次振荡,极限不存在.仔细观察该x
图象,发现图象的某些峰值不是1和-1,而我们知道正弦曲线的峰值是1和-1,这是由于自变量的数据点选取未必使sin取到1和-1的缘故,读者可试增加数据点,比较它们的结x
果.
例4 考察函数f(x)当x0时的变化趋势. x
解 输入命令
x=linspace(-2*pi,2*pi,100);y=sin(x)./x;plot(x,y)
x
limsinx=1. x0x从图上看,在x0附近连续变化,其值与1无限接近,可见 例5 考察f(x)(11)x当x时的变化趋势. x
解 输入命令
x=1:20:1000;y=(1+1./x).^x;plot(x,y)
从图上看,当x时,函数值与某常数无限接近,我们知道,这个常数就是e. - 11 -
3.3 求函数极限
例6 求lim1(1xx13
x31).
解 输入命令
syms x;f=1/(x+1)-3/(x^3+1);limit(f,x,-1)
得结果ans=-1.画出函数图形.
ezplot(f);hold on;plot(-1,-1,’r.’)
例7 求limtgxsinx. x0x3
解 输入命令
limit((tan(x)-sin(x))/x^3)
得结果 ans=1/2
例8 求lim(x1x1)x. x
解 输入命令
limit(((x+1)/(x-1))^x,inf)
得结果 ans=exp(2)
例9 求xlim0xx.
解 输入命令
limit(x^x,x,0,’right’)
得结果 ans =1
例10 求xlim0(ctgx).
解 输入命令
limit((cot(x))^(1/log(x)),x,0,’right’)
得结果 ans=exp(-1).
- 12 -
3.4 求方程的解
例11 解方程ax2bxc0.
解 输入命令
syms a b c x;
f=a*x^2+b*x+c;
solve(f)
得结果 ans=
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
如果不指明自变量,系统默认为x,也可指定自变量,比如指定b为自变量. solve(f,b)
得结果 ans=-(a*x^2+c)/x.
例12 解方程x55x10.
解 输入命令
f=x^5-5*x-1;solve(f)
得结果 ans=
[ -1.[***********][1**********]53]
[ -.[***********][1**********]959]
[.[***********][1**********]791e-1
-1.[***********][1**********]56*i]
[.[***********][1**********]791e-1
+1.[***********][1**********]56*i]
[ 1.[***********][1**********]33]
画出图象
ezplot(f,[-2,2]);hold on;plot([-2,2],[0,0])
练习
1.计算下列函数的极限. (1)lim1sin2x. x1cos4x (2)lim(1cosx)3secx. x
2
(3)lim
x
2. (2x)2
2xe2 (4)lim
x
0. - 13 -
2.解方程x2x10.
3.解方程x3sinx1.
4.解方程x3pxq0.(p、q为实数)
§4 导数的计算
4.1 常用命令
建立符号变量命令sym和syms调用格式
x=sym(`x`), 建立符号变量x;
syms x y z , 建立多个符号变量x,y,z;
matlab求导命令diff调用格式
diff(函数f(x)) , 求f(x)的一阶导数f(x);
diff(函数f(x), n) , 求f(x)的n阶导数f
4.2 导数一般概念
导数是函数的变化率,几何意义是曲线在一点处的切线斜率.
(1) 导数是一个极限值
x 例1 设f(x)e,用定义计算f(0). (n)(x)(n是具体整数).
解 f(x)在某一点x0的导数定义为极限: limx0f(x0x)f(x0) x
我们记hx,输入命令:
syms h;limit((exp(0+h)-exp(0))/h,h,0)
得结果:ans=1.可知f(0)1
(2) 导数的几何意义是曲线的切线斜率
例2 画出f(x)ex在x0处(P(0,1))的切线及若干条割线,观察割线的变化趋势.
- 14 -
解 在曲线yex上另取一点M(h,eh),则PM的方程是: y1eh1.即 x0h0
h yx1 h
取h3,2,1,0.1,0.01,分别作出几条割线.
h=[3,2,1,0.1,0.01];a=(exp(h)-1)./h;x=-1:0.1:3;
plot(x,exp(x),’r’);hold on
for i=1:5;
plot(h(i),exp(h(i)),’r.’)
plot(x,a(i)*x+1)
end
axis square
作出yex在x0处的切线yx1
plot(x,x+1,’r’)
从图上看,随着M与P越来越接近,割线PM越来越接近曲线的割线.
4.3 求一元函数的导数
(1)yf(x)的一阶导数
例3 求ysin(x)的导数. x
解 打开matlab指令窗,输入指令
dy_dx=diff(sin(x)/x).
得结果
dy_dx=cos(x)/x-sin(x)/x^2.
matlab的函数名允许使用字母、空格、下划线及数字,不允许使用其他字符,在这里我们用dy_dx表示yx.
例4 求yln(sinx)的导数.
解 输入命令
dy_dx=diff(log(sin(x))).
得结果
dy_dx=cos(x)/sin(x).
- 15 -
在matlab中,函数lnx用log(x)表示,而log10(x)表示lgx.
例5 求y(x22x)20的导数.
解 输入命令 dy_dx=diff((x^2+2*x)^20).
得结果
dy_dx=20*(x^2+2*x)^19*(2*x+2).
注意2x输入时应为2*x.
例6 求yxx的导数.
解 输入命令 dy_dx=diff(x^x).
得结果
dy_dx =x^x*(log(x)+1).
利用matlab 命令diff一次可以求出若干个函数的导数.
例7 求下列函数的导数: x22x5, y2cosx22cos2x,
y34sinx, y4lnlnx. y1
解 输入命令
a=diff([sqrt(x^2- 2*x+5),cos(x^2)+2*cos(2*x),4^(sin(x)),
log(log(x))]).
得结果
a=
[1/2/(x^2-2*x+5)^(1/2)*(2*x-2),-2*sin(x^2)*x-4*sin(2*x),
4^sin(x)*cos(x)*log(4), 1/x/log(x)].
dy1_dx=a(1).
dy1_dx=1/2/(x^2-2*x+5)^(1/2)*(2*x-2).
dy2_dx=a(2).
dy2_dx=-2*sin(x^2)*x-4*sin(2*x).
dy3_dx=a(3).
dy3_dx=4^sin(x)*cos(x)*log(4).
dy4_dx=a(4).
dy4_dx=1/x/log(x).
由本例可以看出,matlab函数是对矩阵或向量进行操作的,a(i)表示向量a的第i个分量.
(2) 参数方程所确定的函数的导数
设参数方程
- 16 - xx(t)dyy(t)确定函数yf(x),则y的导数. dxx(t)yy(t)
xa(tsint)dy 例8 设,求. dxya(1cost)
解 输入命令
dx_dt=diff(a*(t-sin(t)));dy_dt=diff(a*(1-cos(t)));
dy_dx=dy_dt/dx_dt.
得结果
dy_dx=sin(t)/(1-cos(t)).
其中分号的作用是不显示结果.
4.4 求高阶导数
例9 设f(x)x2e2x ,求f(20)(x).
解 输入命令 diff(x^2*exp(2*x),x,20).
得结果
ans =
99614720*exp(2*x)+20971520*x*exp(2*x)+1048576*x^2*exp(2*x).
练习
1.求下列函数的导数: (1)y(x1)(11) ; (2)yxsinxlnx; x
(3)y2sin2 ; (4)yln(x2xx2a2).
2.求下列参数方程所确定的函数的导数:
xt4xln(1t2) (1) ; (2) . y4tytarctgt
3.设yexcosx,求y(4).
4.验证yexsinx满足关系式:
y2y2y0.
§5 matlab自定义函数与导数应用
函数关系是指变量之间的对应法则,这种对应法则需要我们告诉计算机,这样,当我
- 17 -
们输入自变量时,计算机才会给出函数值,matlab软件包含了大量的函数,比如常用的正弦、余弦函数等.matlab允许用户自定义函数,即允许用户将自己的新函数加到已存在的matlab函数库中,显然这为matlab提供了扩展的功能,无庸置疑,这也正是matlab的精髓所在.因为matlab的强大功能就源于这种为解决用户特殊问题的需要而创建新函数的能力.matlab自定义函数是一个指令集合,第一行必须以单词function作为引导词,存为具有扩展名“.m”的文件,故称之为函数M-文件.
5.1 函数M-文件的定义格式
函数M-文件的定义格式为:
function 输出参数=函数名(输入参数)
函数体
„„
函数体
一旦函数被定义,就必须将其存为M-文件,以便今后可随时调用.比如我们希望建立函数f(x)x22x1,在matlab工作区中输入命令:
syms x;y=x^2+2*x+1;
不能建立函数关系,只建立了一个变量名为y的符号表达式,当我们调用y时,将返回这一表达式.
y
y=x^2+2*x+1
当给出x的值时,matlab不能给出相应的函数值来.
x=3;y
y=x^2+2*x+1
如果我们先给x赋值.
x=3;y=x^2+2*x+1
得结果:y=16
若希望得出y|x2的值,输入:
x=2;y
得结果:y=16,不是x2时的值.读者从这里已经领悟到在matlab工作区中输入命令:y=x^2+2*x+1不能建立函数关系,如何建立函数关系呢?我们可以点选菜单Fill\New\M-fill打开matlab文本编辑器,输入:
- 18 -
function y=f1(x)
y=x^2+2*x+1;
存为f1.m.调用该函数时,输入:
syms x;y=f1(x)
得结果:y= x^2+2*x+1.输入:
y1=f1(3)
得结果:y1=16
matlab求最小值命令fmin调用格式:
fmin(‘fun’,a,b) 给出f(x)在(a,b)上的最小值点.
5.2 自定义函数
例1 建立正态分布的密度函数
f(x,,.)e2(x)22.
解 打开文本编辑器,输入
function y=zhengtai(x,a,b)
y=1/sqrt(2*pi)/a*exp(-(x-b).^2/2/a^2);
存为zhengtai.m.调用时可输入命令
y=zhengtai(1,1,0)
得结果
y=0.2420.
此即f(1,1,0)的值.如果想画出标准正态分布的密度函数的图象,输入
ezplot(zhengtai(x,1,0)).
例2 解一元二次方程ax2bxc0.
解 我们希望当输入a,b,c的值时,计算机能给出方程的两个根.在文本编辑器中建立名为rootquad.m的文件.
function [x1,x2]=rootquad(a,b,c)
d=b*b-4*a*c;
x1=(-b+sqrt(d))/(2*a)
x2=(-b-sqrt(d))/(2*a)
比如求方程2x23x70的根,可用语句
[r1,r2]=rootquad(2,3,-7),
得结果 r1=1.2656 r2=-2.7656 .
- 19 -
5.3 验证罗必塔法则 罗必塔法则是指在求及的极限时,可用导数之比的极限来计算(如果导数之比的极限存在或)
xx 例3 以limab为例验证罗必塔法则. x0x
解 这是型极限 f=a^x-b^x;g=x;L=limit(f/g,x,0)
得结果:L=log(a)-log(b)
df=diff(f,x);dg=diff(g,x);L1=limit(df/dg,x,0)
得结果:L1=log(a)-log(b)
从结果看出 L=L1,即
xbx(axbx)'a=lim. limx0x0xx
5.4 函数的单调性与极值
例4 求函数f(x)x36x29x3的单调区间与极值.
解 求可导函数的单调区间与极值,就是求导函数的正负区间与正负区间的分界点,利用matlab解决该问题,我们可以先求出导函数的零点,再画出函数图象,根据图象可以直观看出函数的单调区间与极值.输入命令
f=x^3-6*x^2+9*x+3;df=diff(f,x);s=solve(df),
得结果 ans=[1,3], 画出函数图象.
ezplot(f,[0,4]).
从图上看,f(x)的单调增区间为(,1)、(1,),单调减区间是(1,3),极大值f(1)7,极小值f(3)3.
我们可以建立一个名为dandiao.m的M—文件,用来求求函数的单调区间.
disp(‘输入函数(自变量为x)’)
syms x
f=input('函数f(x)=')
df=diff(f);
s=solve(df)
a=[];
for i=1:size(s);
a(i)=s(i);
- 20 -
end
ezplot(f,[min(a)-1,max(a)+1])
要求函数yxln(1x)的单调区间与极值,可调用dandiao.m.输入
dandiao
在matlab工作区出现以下提示 输入函数(自变量为x) 函数f(x)=
在光标处输入:x-log(1+x),可得结果s=0.从图上看,f(x)的单调增区间为(0,),单调减区间是(,0),极小值f(0)0.
5.5 函数的最值
调用求函数最小值命令fmin时,可得出函数的最小值点,为求最小值,必须建立函数M—文件.
例5 求函数f(x)(x3)21在区间(0,5)上的最小值. 解 我们可以建立一个名为f.m的函数M-文件. function y=f(x) y=(x-3).^2-1; 并且调用fmin
x=fmin((‘f’,0,5)
得:x=3,f(x)在最小值点处的值(函数最小值)是f(3)1.
求最大值时可用x=fmin(‘-f(x)’,a,b)
练习
1.建立函数f(x,a)asinxsin3x,当a为何值时,该函数在x处取得极
33
值,它是极大值还是极小值,并求此极值.
2.确定下列函数的单调区间:
(1)y2x36x218x7 ; (2)y2x
8
(x0); x
(3)yln(xx2) ; (4)y(x1)(x1)3.
3.求下列函数的最大值、最小值:
3
2
4
2
(1)y2x3x,1x4; (2)yx8x2,1x3.
- 21 -
§6 一元函数积分的计算
6.1 常用命令
matlab积分命令int调用格式:
f(x)dx;
int(函数f(x,y),变量名x) 计算不定积分f(x,y)dx;
b
int(函数f(x),a,b) 计算定积分f(x)dx;
a
b
int(函数f(x,y),变量名x,a,b) 计算定积分f(x,y)dx.
a
int(函数f(x)) 计算不定积分
6.2 计算不定积分
例1 计算xlnxdx.
解 输入命令
int(x^2*log(x)) 可得结果
ans=1/3*x^3*log(x)-1/9*x^3. 注意设置符号变量.
例2 计算下列不定积分: 1.
2
a2x2dx; 2.x1dx; 3.x2arcsinxdx.
x1
解 首先建立函数向量. syms x
syms a real
y=[sqrt(a^2-x^2),(x-1)/(3*x-1)^(1/3),x^2*asin(x)]; 然后对y积分可得对y的每个分量积分的结果. int(y,x) ans =
[1/2*x*(a^2-x^2)^(1/2)+1/2*a^2*asin((1/a^2)^(1/2)*x), -1/3*(3*x-1)^(2/3)+1/15*(3*x-1)^(5/3),
1/3*x^3*asin(x)+1/9*x^2*(1-x^2)^(1/2)+2/9*(1-x^2)^(1/2)]
6.3 求和运算
sum(x),给出向量x的各个元素的累加和,如果x是矩阵,则sum(x)是一个元素为x的每列列和的行向量.
- 22 -
例1 x=[1,2,3,4,5,6,7,8,9,10]; sum(x) ans=55
例2 x=[1,2,3;4,5,6;7,8,9] x=
1 2 3 4 5 6 7 8 9 sum(x)
ans=12 15 18
符号表达式求和命令symsum调用格式. symsum(s,n), 求
s
km
n
symsum(s,k,m,n),求
s
n
当x的元素很有规律,比如为表达式是s(k)的数列时,可用symsum求得x的各项和,即
symsum(s(k),1,n)=s(1)s(2)s(n)
symsum(s(k),k,m,n)s(m)s(m1)s(n)
例3 syms k n symsum(k,1,10) ans=55
symsum(k^2,k,1,n)
ans=1/3*(n+1)^3-1/2*(n+1)^2+1/6*n+1/6 matlab求定积分命令int调用格式 int(函数f(x),a,b) , 计算定积分
a
b
f(x)dx;
int(函数f(x,y),变量名x,a,b) , 计算定积分
6.4 定积分的概念
a
b
f(x,y)dx.
定积分是一个和的极限.取f(x)ex,积分区间为[0,1],等距划分为20个子区间. x=linspace(0,1,21);
选取每个子区间的端点,并计算端点处的函数值. y=exp(x);
取区间的左端点乘以区间长度全部加起来. y1=y(1:20);s1=sum(y1)/20
- 23 -
s1=1.6757 s1可作为exdx的近似值. 若选取右端点
y2=y(2:21);s2=sum(y2)/20 s2=1.7616
s2也可以作为exdx的近似值.下面我们画出图象.
plot(x,y);hold on for i=1:20
fill([x(i),x(i+1),x(i+1),x(i),x(i)],[0,0,y(i),y(i),0],’b’) end
如果选取右端点,则可画出图象. for i=1:20;
fill([x(i),x(i+1),x(i+1),x(i),x(i)],[0,0,y(i+1),y(i+1),0],’b’) hold on end
plot(x,y,’r’)
在上边的语句中,for „ end是循环语句,执行语句体内的命令20次,fill命令可以填充多边形,在本例中,用的是兰色(blue)填充.从图上看s1
0
1
0
1
0exdxs2,当分点逐渐
1
增多时,s2s1的值越来越小,读者可试取50个子区间看一看结果怎样.下面按等分区间计算lim
n
i1
n
f()xilim
n. enni1
n
syms k n
s=symsum(exp(k/n)/n,k,1,n); limit(s,n,inf) 得结果
ans=exp(1)-1.
6.5 计算定积分和广义积分 例4 计算exdx.
解 输入命令:int(exp(x),0,1)
得结果ans=exp(1)-1.这与我们上面的运算结果是一致的. 例5 计算
1
0
0
2
x1dx
解 输入命令
- 24 -
int(abs(x-1),0,2)
得结果ans =1.本例用mathematica软件不能直接求解. 例6 判别广义积分
1
dx、edx与2
20(1x)2dx的敛散性,收敛xp
2
时计算积分值.
解 对第一个积分输入命令
syms p real;int(1/x^p,x,1,inf)
得结果ans =limit(-1/(p-1)*x^(-p+1)+1/(p-1),x = inf).由结果看出当p1时,x^(-p+1)为无穷,当p1时,ans=1/(p-1),这与课本例题是一致的. 对第二个积分输入命令
int(1/(2*pi)^(1/2)*exp(-x^2/2),-inf,inf) 得结果:
ans=[**************]3/[**************]84*2^(1/2)*pi^(1/2) 由输出结果看出这两个积分收敛.
对后一个积分输入命令 int(1/(1-x)^2,0,2)
结果得ans=inf.说明这个积分是无穷大不收敛.
t
例7 求积分dx
0
x
解 输入命令:int(sin(x)/x,0,t),可得结果sinint(t),通过查帮助(help sinint)
t
可知sinint(t)=dx,结果相当于没求!实际上matlab求出的只是形式上的结果,
0
x
因为这类积分无法用初等函数或其值来表示.尽管如此,我们可以得到该函数的函数值.输入vpa(sinint(0.5))可得sinint(0.5)的值.
练习
1.计算下列不定积分:
dx ; x2dx; (2)sin2xdx ; (3)
sin2xx25x1
dx; (5)x2e2xdx ; (6)dx. (4)x2x2x1
(1)
2.计算下列定积分: (1)
1xlnxdx ; (2)e
x3sin2x
dx;
- 25 -
(3)
1
e
sin(lnx)dx ; (4)
t
32dx. 1x42x21
1
3.求
dx并用diff对结果求导. 1(xlnx)2
4.求摆线xa(tsint),ya(1cost)的一拱(0t2)与x轴所围成的图形的面积.
§7 常微分方程
7.1 常用命令
matlab求解微分方程命令dsolve,调用格式为:
dsolve(‘微分方程’)给出微分方程的解析解,表示为t的函数; dsolve(‘微分方程’,‘初始条件’)给出微分方程初值问题的解,表示为t的函数; dsolve(‘微分方程’,‘变量x’)给出微分方程的解析解,表示为x的函数; dsolve(‘微分方程’,‘初始条件’,‘变量x’)给出微分方程初值问题的解,表示为x的函数.
7.2 求解一阶微分方程
微分方程在输入时,y应输入Dy,y应输入D2y等,D应大写.
dyx2
例1 求微分方程2xyxe的通解.
dx
解 输入命令
dsolve('Dy+2*x*y=x*exp(-x^2)')
结果为 ans =
1/2*(1+2*exp(-2*x*t)*C1*exp(x^2))/exp(x^2)
系统默认的自变量是t,显然系统把x当作常数,把y当作t的函数求解.输入命令 dsolve('Dy+2*x*y=x*exp(-x^2)','x') 得正确结果 ans =
1/2*(x^2+2*C1)/exp(x^2)
例2 求微分方程xyye0在初始条件y 解 输入命令
dsolve('x*Dy+y-exp(x)=0','y(1)=2*exp(1)','x')
- 26 -
x
x1
2e下的特解.
得结果为 ans =
1/x*(exp(x)+exp(1)) 例3 求微分方程(x21)dy
2xycosx0在初始条件yx0
1下的特解.
dx
解 输入命令
dsolve('(x^2-1)*Dy+2*x*y-cos(x)=0','y(0)=1','x')
得结果为 ans =
1/(x^2-1)*(sin(x)-1) 7.3 求解二阶微分方程 例4 求y3yex
0的通解. 解 输入命令
dsolve('D2y+3*Dy+exp(x)=0','x')
得结果 ans =
-1/4*exp(x)+C1+C2*exp(-3*x)
例5 求解微分方程
ye2yy0.
解 输入命令
dsolve('D2y-exp(2*y)*Dy=0','x')
得结果 ans =
1/2*log(-2*C1/(-1+exp(2*x*C1+2*C2*C1)))+x*C1+C2*C1 .
练习
求下列微分方程的通解:
1.2x2
yyy2
1 ; 2.dyydxxyx
; 3.ycos
yxx
x
; 4.(xcosysin2y)y1; 5.y3yyex
cos2x ; 6.y4yx1sinx;
7.
x22xyy2(y22xyx2
)dydx0;
yx11
- 27 -
d2xdx
2na2x02
dtdt
8. .
dxxx,
t00t0V0dt
§8 空间图形的绘制
Matlab绘制空间曲线的命令为plot3,调用格式绘制平面曲线的命令plot类似。 例1 画出螺旋线x2cos3t,
y2sin3t,z1.5t的图形.
解 输入命令
t=linspace(0,4*pi,300); x=2*cos(3*t); y=2*sin(3*t); z=1.5*t; plot3(x,y,z)
结果如图所示.
例2 画出圆锥螺线xtcos3t,
ytsin3t,z1.5t的图形.
解 输入命令
t=linspace(0,4*pi,300); x=t.*cos(3*t); y=t.*sin(3*t); z=1.5*t; plot3(x,y,z)
结果如图所示。
Matlab绘制空间曲面的命令为mesh和surf,mesh绘制网格形状的曲面,surf绘制由小平面组成的曲面。
例3 画出抛物面zxy的图形. 解 输入命令
x=linspace(-2,2,20);
y=linspace(-3,3,30);
- 28 -
2
2
[x,y]=meshgrid(x,y); z=x.^2+y.^2; mesh(x,y,z)
结果如图所示.
若使用surf(x,y,z)可得如图的结果。还可以对曲面进行平滑插值处理:shading interp,得如下结果。
可以采用曲面的参数方程:xrcost,yrsint,zr2,输入命令 r=linspace(0,2,20); t=linspace(0,2*pi,30); [r,t]=meshgrid(r,t); x=r.*cos(t); y=r.*sin(t); z=r.^2; mesh(x,y,z) 结果如图
或surf(x,y,z);shading interp绘制平滑曲面图
- 29 -
§9 偏导数的计算
9.1 常用命令
matlab求偏导命令diff调用格式:
diff(函数f(x,y),变量名x), 求f(x,y)对x的偏导数
f; x
nf
diff(函数f(x,y), 变量名x,n) ,求f(x,y)对x的n阶偏导数.
xn
matlab求雅可比矩阵命令jacobian,调用格式:
jacobian([函数f(x,y,z);函数g(x,y,z); 函数h(x,y,z)], [x,y,z])给出矩阵
fxgxhx
fygyhy
fzg
. zhz
9.2 求多元函数的偏导数
例1 设 u=x2y2z2求 u的一阶偏导数.
解 输入命令
diff((x^2+y^2+z^2)^(1/2), x). 得结果
ans=1/(x^2+y^2+z^2)^(1/2)*x. 在命令中将末尾的x换成y将给出y的偏导数 ans=1/(x^2+y^2+z^2)^(1/2)*y. 也可以输入命令
jacobian((x^2+y^2+z^2)^(1/2),[x y]). 得结果
ans=[1/(x^2+y^2+z^2)^(1/2)*x, 1/(x^2+y^2+z^2)^(1/2)*y].
给出矩阵,.
xy
例2 求下列函数的偏导数:
- 30 -
y
z1arctg(); z2xy .
x
解 输入命令
diff(atan(y/x), 得结果
ans=-y/x^2/(1+y^2/x^2); 输入命令
diff(atan(y/x), y), 得结果
ans=1/x/(1+y^2/x^2); 输入命令
diff(x^y, x), 得结果
ans=x^y*y/x; 输入命令
diff(x^y, y), 得结果
ans=x^y*log(x).
使用jacobian命令求偏导数更为方便. 输入命令
jacobian([atan(y/x),x^y],[x,y]), 得结果
ans=[ -y/x^2/(1+y^2/x^2), 1/x/(1+y^2/x^2)] [ x^y*y/x, x^y*log(x)].
9.3 求高阶偏导数
例3 设zx63y42x2y2,求2z2z2z
x2,y2,
xy
. 解 输入命令
diff(x^6-3*y^4+2*x^2*y^2,x,2)
2可得到zx
2
ans=30*x^4+4*y^2.
将命令中最后一个x换为y得2y
2
ans=-36*y^2+4*x^2. 输入命令
- 31 -
diff(diff(x^6-3*y^4+2*x^2*y^2,x),y)
2
可得
xy
ans=8*x*y.
2
同学们可自己计算比较它们的结果.
yx
2
注意命令diff(x^6-3*y^4+2*x^2*y^2,x,y),是对y求偏导数,不是求.
xy
9.4 求隐函数所确定函数的导数或偏导数 例4 设lnxee,求
yx
yx
dy. dx
解 F(x,y)lnxe
e,先求Fx,再求Fy.
输入命令
df_dx=diff(log(x)+exp(-y/x)-exp(1),x) 得到Fx
df_dx=1/x+y/x^2*exp(-y/x); 输入命令
df_dy=diff(log(x)+exp(-y/x)-exp(1),y)
得到Fy
df_dy=-1/x*exp(-y/x).
输入命令
dy_dx=-df_dx/df_dy 可得所求结果
dy_dx=-(-1/x-y/x^2*exp(-y/x))*x/exp(-y/x).
例5 设sin(xy)cos(yz)tg(xz)0 ,求z,z.
xy
解 记F(x)sin(xy)cos(yz)tg(xz). 输入命令
a=jacobian(sin(x*y)+cos(y*z)+tan(z*x),[x,y,z])
,Fz 可得矩阵Fx,Fy
a=
- 32 -
[cos(x*y)*y+(1+tan(z*x)^2)*z,cos(x*y)*x-sin(y*z)*z, -sin(y*z)*y+(1+tan(z*x)^2)*x]; 输入命令
dz_dx=-a(1)/a(3) 得
dz_dx=
(-cos(x*y)*y-(1+tan(z*x)^2)*z)/(-sin(y*z)*y+(1+tan(z*x)^2)*x); 输入命令
dz_dy=-a(2)/a(3) 得
dz_dy=
(-cos(x*y)*x+sin(y*z)*z)/(-sin(y*z)*y+(1+tan(z*x)^2)*x).
练习
1.求下列隐函数的导数: (1)arctg
y
x
lnx2y2 ; (2)xyyx . 2.求下列函数的偏导数:
z
(1) zx2sin(xy) ; (2)u
y
.
3.设uxln(xy),求22x2,
y2,2xy
. 4.求下列多元隐函数的偏导数x,y
.
(1)cos2xcos2ycos2z1 ; (2)ezxyz.
5.证明函数uln
(xa)2(yb)2(a,b为常数)满足拉普拉斯方程
2x22y2
0. (提示:对结果用simplify化简)
§10 重积分与曲线积分
10.1 二重积分计算
2 例1 求二次积分1x1
0dx
2x
xydy.
解 建立符号变量x和y后,输入命令
- 33 -
int(int(x*y,y,2*x,x^2+1),x,0,1) 得结果ans=1/12.
例2 计算二重积分
22(xyx)dxdy,其中D是由直线y2,yx及D
y2x所围成的闭区域.
解 该二重积分可以化为二次积分
2
dyy(x2y2x)dx,输入命令
2
y
int(int(x^2+y^2-x,x,y/2,y),y,0,2)
得结果ans= 13/6.
例3 计算积分I
2
dy
sinx
dx.
yx
解 输入命令
int(int(sin(x)/x,x,y-pi,pi),y,pi,2*pi) 得结果ans =2.
若不借助于计算机计算,需要交换积分次序. 例4 求
x2y21
sin((x2y2))dxdy.
x2,二重积
解 积分区域用不等式可以表示成1x1,x2y分可化为二次积分dx
1
1x2x
2
sin((x2y2)dy,输入命令
int(int(sin(pi*(x^2+y^2)),y,-sqrt(1-x^2),sqrt(1-x^2)),x,-1,1)
由输出结果可以看出,结果中仍带有int,表明matlab求不出这一积分的值.采用极坐标可化为二次积分
int(int(r*sin(pi*r^2),r,0,1),a,0,2*pi) 可得结果为ans=2.
10.2 三重积分计算 例5 计算三重积分I
0
2
darsin(r2)dr,输入命令
1
1
dx
1x
dy
1xy
dz
(1xyz)3
解 输入命令
int(int(int(1/(1+x+y+z)^3,z,0,1-x-y),y,0,1-x),x,0,1) 得结果ans =-5/16+1/2*log(2).
- 34 -
例6 计算三重积分
222
,为球面xyz1及三个坐标面所围xyzdxdydz
成的在第一卦限内的区域.
解 该三重积分可化为累次积分
dx
1
x2
dy
x2y2
xyzdz.输入命令
int(int(int(x*y*z,z,0,sqrt(1-x^2-y^2)),y,0,sqrt(1-x^2)),x,0,1)
得结果ans =1/48.
10.3 曲线积分计算 例7 求曲线积分
Lxyds,其中L为曲线x2y21在第一象限内的一段.
2
解 曲线的参数方程是xcost,ysint,(0t)曲线积分可以化为
20
costsintdt.
输入命令
int(cos(t)*sin(t),0,pi/2) 执行后即可求出曲线积分结果1/2.
例8 计算曲线积分
L
y2ds,L为摆线的一拱x2(tsint),ya(1cost),
(0t2).
解 曲线积分可以化为
2
4(1cost)288costdt.输入命令
int(4*(1-cos(t))^2*sqrt(8-8*cos(t)),t,0,2*pi) 得结果ans =1024/15*4^(1/2).
练习
1.计算二重积分: (1)
x2y21
(xy)dxdy; (2)(x2y2)dxdy.
x2y2x
2.计算三重积分: (1) (2)
0zyxa ; xyzdxdydz,:
xdxdydz,:xyza,x0,y0,z0.
3.计算
L
x2y2ds ,L为圆周x2y2ax(a0).
- 35 -
4.计算
L(x2y2)dx(x2y2)dy,其中L为抛物线yx2上从点(0,0)到点
(2,4)的一段弧.
§11 级数
11.1 常用命令
求已知函数的taylor展开式taylor命令,调用格式为: taylor(函数f(x)) f(x)的5次taylor多项式; taylor(函数f(x),n) f(x)的n-1次taylor多项式; taylor(函数f(x),a) f(x)在a点的taylor多项式. 求级数的和命令symsum调用格式为: symsum(S,n),求
S;
km
n
symsum(S,k,m,n),求
S.
n
matlab求极限命令limit调用格式为:
limit(函数f(x),变量x,自变量的趋向值)
11.2 taylor展开式
例1 求函数y=cosx在x=0点处的5阶taylor展开式及在x展开式.
解 输入命令
syms x;taylor(cos(x))
3
处的6阶taylor
得结果 ans =
1-1/2*x^2+1/24*x^4 ; 输入命令
taylor(cos(x),pi/3,7)
得结果 ans =
1/2-1/2*3^(1/2)*(x-1/3*pi)-1/4*(x-1/3*pi)^2+1/12*3^(1/2)*(x- 1/3*pi)^3+1/48*(x-1/3*pi)^4-1/240*3^(1/2)*(x-1/3*pi)^5-1/1440*(x-1/3*pi)^6 .
- 36 -
11.3 级数求和 例2 求
1n12
n
. 解 输入命令
syms n;symsum(1/2^n,1,inf)
得结果 ans = 1 .
例3 求幂级数xn
n2
的和函数.n1n
解 输入命令
symsum(x^n/(n*2^n),n,1,inf)
得结果 ans =
-log(1-1/2*x) . 例4 求幂级数
nx
n
的和函数.
n1
解 输入命令
symsum(n*x^n,n,1,inf)
得结果 ans =
x/(x-1)^2 .
11.4 判别级数敛散性
例5判断数项级数
1
n(n1)
的收敛性.n1 解 输入求和命令
symsum(1/(n*(n+1)),n,1,inf)
得结果
ans = 1 .
求和得是1,说明该级数收敛.
例6 判别级数
sin
n1
n(n1)
的敛散性. - 37 -
解 输入命令
symsum(sin(pi/(n*(n+1))),1,inf)
得结果 ans =
sum(sin(pi/n/(n+1)),pi = 1 .. inf) .
由执行结果看出仍含有sum,说明用matlab不能求出其和,可采用比较判别法,取比较级数为P级数输入命令
limit(sin(pi/(n*(n+1)))/(1/n^2),n,inf)
1
,取二者通项比值的极限. 2nn1
得结果
ans = pi .
得值为pi,由所取P级数收敛,得知所要判别的级数也收敛.
3
例7 判别级数n的敛散性.
n14
解 用比值判别法,输入命令
limit((n+1)*(3/4)^(n+1)/(n*(3/4)^n),n,inf)
n
得结果 ans = 3/4 .
极限值小于1,由比值判别法知级数收敛.实际上输入求和命令
symsum(n*(3/4)^n,n,1,inf)
得结果 ans = 12 .
练习
1.给出函数f(x)esinx2cosx在点x0的7阶taylor展开式以及在x=1处的 5阶taylor展开式.
2.判别下列级数的敛散性,若收敛求其和.
111
(1)1 ; (2)tg;
3572nn1n1
n11n
(3)(1) ; (4)(1).
2nlnnnn1n1n2
x
x
- 38 -
3.求幂级数
(1)
n2
n
xnnn
2
的和函数.
4.求函数项级数
(1)nsin
n1
2n
xn)的和函数.
- 39 -