第一章 微积分、线性代数的基础知识及其在Matlab中的实现
1.1 建模中常用微积分基础知识在Matlab中的实现
在数摸问题的计算中,经常要用到极限、导数、微分和积分等基本运算。利用数学软件Matlab可以使复杂的微积分运算变得很容易。本节介绍微积分的基本运算在计算机上如何实现,包括:微分、积分、极限、级数求和、方程求根以及Taylor展开等功能的实现方法。
下面是MATLAB中的基本符号运算函数(有关符号运算请参考附录A): 1. x=sym(‘x’)
功能:创建一个符号变量x 2. syms x y z
功能:创建多个符号变量 x , y , z 3. r=collect(S,v)
功能:合并同类项,S是符号表达式,v是变量或表达式,R是合并同类项后的结果。 4. factor(S)
功能:符号计算的因式分解,X是待分解的符号多项式 5. expand(S)
功能:对符号多项式或函数S进行展开 6. r=simple(S) 或 r=simplify(S) 功能:对符号表达式S进行化简 7. subs(S,old,new)
功能:把符号变量中的变量old 用 new 代替,new 可以是一个符号,也可以是具体的数 8. vpa(S)
功能:对符号表达式S计算其任意精度的数值 9. eval(S)
功能:计算符号表达式(或字符串)S
1.1.1 导数、极值和积分、Talyor公式及在Matlab中的实现
一、极限运算
在MATLAB中,计算极限采用下面的命令:
命令 功能 limit(f,x,a) 计算limx?af(x) f(x)
x?a? limit(f,x,inf) 计算limx?? limit(f,x,a,’right’) 计算单侧极限 limit(f,x,a,’left’) 计算单侧极限
limf(x)
x?a?limf(x)
注意:在左右极限不相等或左右极限有一个不存在时,Matlab的默认状态是求右极限
ex?1例1 求极限lim(1?4x)与极限lim
x?0x?0x1x解 Matlab命令为 syms x;
y1=(1+4*x)^(1/x); y2=(exp(x)-1)/x; limit(y1,x,0) ans= exp(4) limit(y2,x,0) ans= 1
例2 求极限lim?(x?0x?2)
?1x解 syms x; y=sqrt(x)-2^(-1/x); limit(y,x,0,’right’) ans= 0
二、求导运算
导数是函数增量?y与自变量增量?x之比的极限(?x?0),即在Matlab中求函数的导数及其他一些类似计算均由 diff 命令来完成。
1.一元函数的求导 命令形式1: diff(f)
功能:求函数f的一阶导数,其中f为符号函数。 命令形式2: diff(f,n)
功能:求函数f的n阶导数,其中f为符号函数。 例3 求函数
f?(x)?f(x??x)?f(x)。
?x3x3?5x?1的二阶导数
解 Matlab的命令为 syms x ; f= 3*x^3+5*x+1 ; diff(f,2) ; ans= 18*x 例4 设
y?3x2?2x?1,求y'|x?1
解 syms x ; y=3*x^2-2*x+1 ; B=diff(y) , x=1 ; eval(B) 运行结果为 B = 6*x – 2 ans = 4
2.多元函数的偏导数 将函数z数,记为
?f(x,y)中的变量y看成常量而对变量x的导数称为二元函数f(x,y)对变量x的偏导
fx(x,y)。若把x当作常量而对y求导的结果称为函数对y的偏导数,记为fy(x,y)。求偏
导的方法和一元函数的求导方法一样,只要把另一个变量看成常量即可。
命令形式1: diff(f,xi)
功能: 多函数f 对变量xi的一阶偏导。 命令形式2: diff(f,xi,n)
功能:多函数f 对变量xi的n阶偏导。 例5 求z?x2sin2y关于x的偏导数
解 syms x y;
z= x^2*sin(2*y); B=diff(z,’x’); 运行结果为 B=2*x*sin(2*y)
3. 全微分、参数方程求导及隐函数求导 (1) 若函数z?f(x,y)在某点(x0,y0)的两个偏导数存在且连续,则函数在该点的全微分为 dz?fx(x0,y0)dx?fy(x0,y0)dy
Matlab中求函数全微分的命令为: diff(z,x)+diff(z,y) (2) 对参数方程??x?x(t)dydydt?所确定的函数y?f(x),根据公式,连续两次利用diff(f)dxdxdty?y(t)?命令就可以求出结果。
(3) 隐函数求导
方程F(x,y)?0所确定的隐函数
y?y(x),则其导数
Fdy??xdxFy;方程F(x,y,z)?0确定的
F?z??x隐函数z?z(x,y),其导数为?xFz的偏导再相除就可得到隐函数的导数。
三、积分运算
1.一元函数的不定积分 命令形式1: int(f)
Fy?z,???yFz。在Matlab中按照上述公式,分别求出函数
功能: 求函数f对默认变量的不定积分,用于函数中只有一个变量的情况。 命令形式2:int(f,v)
功能:求符号函数f对变量v的不定积分。 例6 计算
1?sin2xcos2xdx
解 Matlab命令为 syms x ;
y=1/(sin(x)^2*cos(x)^2) ; int(y) ans =
1/(sin(x)*cos(x))?2*cos(x)/sin(x)
pretty(int(y)) %把int(y)化简为常用的数学形式的表达式 结果为
12cosx?
sinx()cosx()sinx例7 求
x?1?z2dz
解 Matlab的命令为
syms x z ; B=int(x/(1+z^2),z) ; B=x*atan(z)
2.一元函数的定积分 命令形式: int(f,x,a,b)
功能:用微积分基本公式计算定积分
?baf(x)dx
1例8 求?1(1?x?)2dx
x221解 Matlab的命令为 syms x ;
t=1+x-1/x; y=exp(x+1/x) ; t=t*y ; int(f,x,1/2,2) ; ans = 3/2*exp(5/2)
3. 多重积分运算
命令 功能 int(int(f,y),x) 计算不定积分
?dx?f(x,y)dy
bdcint(int(f,y,c,d),x,a,b) 计算定积分注意:对于三重积分的运算和二重积分的形式一致。 例9 计算
?dx?af(x,y)dy
A??1x?10x?(x2?y2?1)dxdy
解 Matlab的命令为 syms x y
A=int(int(x^2+y^2+1,y,x,x+1),x,0,1) %求二重积分 A=5/2
四、函数的Taylor展开 命令形式1:taylor(f)
功能:将函数f展开成默认变量的6阶麦克劳林公式 命令形式2: taylor(f, n)
功能:将函数f展开成默认变量的n阶麦克劳林公式 命令形式3: taylor(f, n, v, a)
功能: 将函数f(v)在v=a处展开n阶泰勒公式
例10 将函数
f(x)?xarctanx?ln1?x2展开为x的6阶麦克劳林公式。
解 Matlab命令为 syms x ;
f=x*atan(x) – log(sqrt(1+x^2)); taylor(f)
ans = 1/2*x^2-1/12*x^4 例11 将函数
f(x)?1x2展开为关于(x?2)的最高次为4的幂级数。
解 Matlab 命令为 syms x ; f = 1/x^2 ;
taylor(f, 4, x, 2) ; pretty(taylor(f, 4, x, 2)) ;
13134?(x?2)?(x?2)2?(x?2)3
41681.1.2 数值积分法及其在Matlab中的实现
用定积分的符号解法求定积分有时会失效,此时,可以用数值方法来计算定积分的值。Matlab提供了如下一些计算定积分值的数值方法。
一、用数值方法计算定积分 (1) 复合梯形公式
复合梯形公式用小梯形面积代替小曲边梯形的面积,然后求和以获得定积分的近似值。 命令形式:trapz(x,y)
功能:用复合梯形公式计算定积分,变量x是积分变量在被积区间上的分点向量,y为被积函数在x处对应的函数值向量。
(2)复合辛普生公式
本方法用抛物线代替小曲边梯形的曲边计算小面积,然后求和以获得定积分的近试值。 命令形式1:quad('fun',a,b,tol,trace) 命令形式2:quad8('fun',a,b,tol,trace) 式中
fun式被积函数表达式字符串或者是M函数文件名,a,b积分的下限与上限,tol代表精度,
可以缺省;缺省时,tol?0.001。trace?1 时用图形展示积分过程,trace?0时无图形,默认值为0。命令形式2比命令形式1`精度高。
例11 用复合梯形公式和复合辛普生公式求解
命令为Matlab
5?2lnxdx的积分值。 2xsyms x ; x=2:0.1:5 ;
y?log(x)./(x.2);
t?trapz(x,y);ff = inline(‘log(x)./(x.^2)’,’x’) ;