第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

相关文章
|
Java 数据库连接 Maven
分布式——Maven多模块管理
Maven的多模块管理。所谓Maven的多模块管理其实:子模块继承父模块的Maven依赖,这样在多模块开发之下,多个模块的依赖版本就是一样的,这样就不会造成因模块依赖的版本不同而造成的冲突。其实Mavne管理的就是依赖的版本号。
分布式——Maven多模块管理
|
10月前
|
传感器 数据安全/隐私保护
基于模糊PID控制的六步逆变器供电无刷直流电机调速simulink仿真
本课题基于MATLAB2022a,使用Simulink仿真六步逆变器供电的无刷直流电机调速系统,采用模糊PID控制器并与传统PID控制器对比。仿真结果包括转速、电流、电压和电磁转矩(Te)的对比,并局部放大显示。系统通过模糊逻辑与PID控制结合,提高了鲁棒性和适应性,适用于非线性系统的高精度调速控制。六步换相逆变器确保电机平稳高效运行。
|
11月前
|
设计模式 存储 算法
「全网最细 + 实战源码案例」设计模式——命令模式
命令模式(Command Pattern)是一种行为型设计模式,将请求封装成独立对象,从而解耦请求方与接收方。其核心结构包括:Command(命令接口)、ConcreteCommand(具体命令)、Receiver(接收者)和Invoker(调用者)。通过这种方式,命令的执行、撤销、排队等操作更易扩展和灵活。 适用场景: 1. 参数化对象以操作。 2. 操作放入队列或远程执行。 3. 实现回滚功能。 4. 解耦调用者与接收者。 优点: - 遵循单一职责和开闭原则。 - 支持命令组合和延迟执行。 - 可实现撤销、恢复功能。 缺点: - 增加复杂性和类数量。
365 14
「全网最细 + 实战源码案例」设计模式——命令模式
|
5月前
|
传感器 人工智能 运维
如何在AR运维巡检中导入AI识别方案,达到智慧巡检目的
在工业运维巡检中,传统依赖人工的方式易出错且效率低。通过融合AR与AI技术,构建智慧巡检闭环,实现设备状态自动识别、预测性维护与高效协同。本文从场景锚定、知识沉淀、交互优化、反馈闭环、模型选型五大维度,解析AI识别方案的落地路径,助力工业智能化转型。
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
1335 139
|
7月前
|
Java 定位技术
陌陌动态留联系方式怎么防止被检测到?只需要插件
本资源提供一种通过技术手段(如hook或对接第三方地图)避免陌陌联系方式被和谐的解决方案,包含示例代码以生成随机地图名称或验证名称有效性。
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
383 4
|
机器学习/深度学习 自然语言处理 算法
进阶RAG:探索前沿应用与挑战
【10月更文挑战第21天】
483 0
|
设计模式 JavaScript 小程序
黑马程序员uni-app 小兔鲜儿 项目及bug记录(上)(1)
黑马程序员uni-app 小兔鲜儿 项目及bug记录(上)(1)
1083 3
|
芯片 iOS开发 MacOS
Mac上运行windows软件-GPTK
Mac上运行windows软件-GPTK
616 1