第7章 符号计算——7.6 符号微积分

简介: 第7章 符号计算——7.6 符号微积分

7.6  符号微积分


微积分运算在数学计算中的重要性是不言而喻的,整个高等数学就是建立在微积分运算的基础上的。同时微积分运算也是后面求解符号微分方程的必要知识储备。

在符号数学工具箱中提供了一些常用的函数来支持具有重要基础意义的微积分运算,涉及求极限、微分、积分、级数求和和泰勒级数等。下面将具体介绍符号运算在微积分中的使用方法。


7.6.1  符号表达式的极限


求微分的基本思想是当自变量趋近某个值时,求函数值的变化。无穷逼近是微积分的一个基本思想,求极限是非常普遍的。事实上,导数就是由极限给出的:

e6f4fe0db0e30b5b1dd1158be8fbbc20_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


MATLAB中,用函数limit来求符号表达式的极限。函数limit的调用格式如下。

● limit(F,x,a):求当x→a时,符号表达式F的极限。

● limit(F,a):符号表达式F采用默认自变量(可由函数findsym求得),该函数求F的自变量趋近于a时的极限值。

● limit(F):符号表达式F采用默认自变量,并以a=0作为自变量的趋近值,从而求符号表达式F的极限值。

● limit(F,x,a,'right')limit(F,x,a,'left'):分别求取符号表达式F的左极限和右极限,即自变量从左边或右边趋近于a时的函数极限值。


7-25:求符号表达式的极限示例。

在命令行窗口中输入:

syms x;
f1 = sym((cos(x) + sin(x) - x) / x)
limit(f1, x, inf)

输出结果:

f1 =
(cos(x) - x + sin(x))/x
ans =
-1


在命令行窗口中输入:

limit(f1, x, -inf)

输出结果:

ans =
-1


在命令行窗口中输入:

limit(f1, x, 0)

输出结果:

ans =
NaN

在命令行窗口中输入:

f2 = sym((sin(x) - x) / x)
limit(f2, x, 0, 'right')

输出结果:

f2 =
-(x - sin(x))/x
ans =
0

在命令行窗口中输入:

limit(f2, x, 0, 'left')

输出结果:

ans =
0



7.6.2  符号表达式的微分


MATLAB提供的函数可以完成一元及多元符号表达式函数的各阶微分,功能函数diff可以完成一元或多元函数的任意阶数的微分。对于自变量的个数多于一个的符号矩阵,微分为Jacobian矩阵,采用功能函数jacobian实现微分。


1diff函数


当创建符号表达式后,就可以利用diff函数对它进行微分运算。diff函数的调用格式如下。

● diff(S,'v'):将符号“v”视作变量,对符号表达式或符号矩阵S求取微分。

● diff(S,n):将S中的默认变量进行n阶微分运算,其中默认变量可以用findsym函数确定,参数n必须是正整数。

● diff(S,'v',n):将符号“v”视作变量,对符号表达式或矩阵S进行n阶微分运算。


2jacobian函数


jacobian函数的调用格式如下。

● R=jacobian(w,v):其中w是一个符号列向量,v是指定进行变换的变量所组成的行向量。


7-26:求符号表达式的微分示例。

在命令行窗口中输入:

syms x y z;
f1 = sym(exp(x * sin(y)) + log(z))
diff(f1, x)

输出结果:

f1 =
exp(x*sin(y)) + log(z)
ans =
exp(x*sin(y))*sin(y)

在命令行窗口中输入:

diff(f1, y)
输出结果:
ans =
x*exp(x*sin(y))*cos(y)


在命令行窗口中输入:

diff(f1, z)

输出结果:

ans =
1/z


在命令行窗口中输入:

diff(f1, x, 2)

输出结果:

ans =
exp(x*sin(y))*sin(y)^2


在命令行窗口中输入:

f2 = sym([x^2 + y^2; y * z])
J = jacobian(f2, [x, y])

输出结果:

f2 =
 x^2 + y^2
       y*z
J =
[ 2*x, 2*y]
[   0,   z]


7.6.3  符号表达式的积分


在数学中,积分和微分是一对互逆的运算。符号数学工具箱中提供了函数int来求符号表达式的积分,其调用格式如下。

● R=int(S):用默认变量求符号表达式S的不定积分,默认变量可用函数findsym确定。

● R=int(S,v):用符号标量v作为变量求符号表达式S的不定积分值。

● R=int(S,a,b):符号表达式采用默认变量,该函数求默认变量从a变到b时符号表达式S的定积分值。如果S是符号矩阵,那么积分将对各个元素分别进行,而且每个元素的变量也可以独立地由函数findsym来确定,ab可以是符号或数值标量。

● R=int(S,v,a,b):符号表达式采用符号标量v作为标量,求当va变到b时,符号表达式S的定积分值。其他参数和上一种调用格式相同。


7-27:求符号表达式的积分示例。

在命令行窗口中输入:

syms x y;
f1 = sym(x + x^-1)
int(f1)

输出结果:

f1 =
x + 1/x
ans =
log(x) + x^2/2


在命令行窗口中输入:

f2 = sym(x * y + (x * y)^-1)
int(f2, y)

输出结果:

f2 =
1/(x*y) + x*y
ans =
log(y)/x + (x*y^2)/2

在命令行窗口中输入:

int(f1, 1, 2)

输出结果:

ans =
log(2) + 3/2

在命令行窗口中输入:

int(f2, y, 1, 2)

输出结果:

ans =
(3*x)/2 + log(2)/x



7.6.4  符号表达式的级数求和


MATLAB提供的函数symsum用于对符号表达式进行求和,该函数的调用格式如下。

● r=symsum(s,a,b):求符号表达式s中默认变量从a变到b时的有限和。

● r=symsum(s,v,a,b):求符号表达式s中变量va变到b时的有限和。


7-28:符号表达式级数求和示例。

在命令行窗口中输入:

syms x y n;
f1 = sym(x^2)
symsum(f1, 0, n - 1)

输出结果:

f1 =
x^2
ans =
(n*(2*n - 1)*(n - 1))/6


在命令行窗口中输入:

f2 = sym(x^n)
symsum(f2, n, 0, inf)

输出结果:

f2 =
x^n
ans =
piecewise(1 <= x, Inf, abs(x) < 1, -1/(x - 1))


MATLAB 中,piecewise 函数用于定义分段函数。它允许你以一种简洁的方式描述函数在不同区间上的不同定义。

在上述得到的结果中,piecewise(1 <= x, Inf, abs(x) < 1, -1/(x - 1)) 表示了一个分段函数。它包含两个部分:

第一个部分是条件 1 <= x,当满足这个条件时,函数的值被设置为 Inf,表示正无穷大。

第二个部分是条件 abs(x) < 1,当满足这个条件时,函数的值被设置为 -1/(x - 1)

换句话说,这个分段函数在 x >= 1 的区间上的值为正无穷大,而在 -1 < x < 1 的区间上的值为 -1/(x - 1)。对于其他的 x 值,该函数没有给出明确的定义。


7.6.5  符号表达式的泰勒级数


MATLAB提供函数taylor用来求符号表达式的泰勒级数展开式,该函数的调用格式如下。

● r=taylor(f)f是符号表达式,其变量采用默认变量,该函数将返回f在变量等于0处作5阶泰勒展开时的展开式。

● r=taylor(f,n,v):符号表达式f以符号标量v作为自变量,返回fn-1阶麦克劳林级数(在v=0处作泰勒展开)展开式。

● r=taylor(f,n,v,a):返回符号表达式fv=a处作n-1阶泰勒展开时的展开式。

● r=taylor(f,x,x0,'Order',n):对函数f在点x0处进行n阶泰勒展开。


7-29:符号表达式的泰勒级数展开示例。

在命令行窗口中输入:

syms x y;
f1 = sym(sin(x) / (2 + sin(x)))
taylor(f1)

输出结果:

f1 =
sin(x)/(sin(x) + 2)
ans =
- (13*x^5)/480 + x^4/48 + x^3/24 - x^2/4 + x/2


在命令行窗口中输入:

f2 = sym(sin(x) + 1 / cos(y))
taylor(f2, y, 0, 'order', 8)

输出结果:

f2 =
sin(x) + 1/cos(y)
ans =
(61*y^6)/720 + (5*y^4)/24 + y^2/2 + sin(x) + 1


在命令行窗口中输入:

taylor(f2, x, 1, 'order', 4)

输出结果:

ans =
sin(1) - (sin(1)*(x - 1)^2)/2 + 1/cos(y) + cos(1)*(x - 1) - (cos(1)*(x - 1)^3)/6

相关文章
|
7月前
|
算法 前端开发
代码求解方程
代码求解方程
60 0
|
4月前
|
C语言
C语言实现拉格朗日插值法
C语言实现拉格朗日插值法
第7章 符号计算——7.8 符号代数方程求解
第7章 符号计算——7.8 符号代数方程求解
第7章 符号计算——7.9 符号微分方程求解
第7章 符号计算——7.9 符号微分方程求解
|
算法 C语言
C语言实现牛顿迭代法解方程
C语言实现牛顿迭代法解方程
257 0
第7章 符号计算——7.7 符号积分变换
第7章 符号计算——7.7 符号积分变换
|
机器学习/深度学习 SQL 算法
用Python实现复数的四则运算
用Python实现复数的四则运算
|
算法
数学知识:欧拉函数
复习acwing算法基础课的内容,本篇为讲解数学知识:欧拉函数,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
192 0
数学知识:欧拉函数