005 MATLAB符号微积分

前言:

在MATLAB中,数值与符号的主要区别在于它们的处理方式和应用场景

  • 数值计算适用于实际的数值计算问题,如矩阵运算、数据分析等。
  • 符号计算适用于符号推导、公式化简和符号解析,如理论物理和工程计算。

 01 符号对象

1.基本符号对象:

定义基本符号,格式:
sym('x')          %定义符号变量x
syms x y z

前者每次只能定义一个符号对象,且用单引号' '引上;
后者可以同时定义多个符号对象,各对象间用空格分隔。

 对于符号常量,定义时还可指定符号量的具体表示格式,如d十进制、f浮点数、r有理数等等,默认时为有理数格式。如:

sym('y','real')              %定义实型符号变量y

syms b c unreal              %定义非实符号变量b和c

2.符号表达式:

  • 符号表达式可sym或syms构建
 创建符号表达式:
f1=sym('x^2-x*sin(x)+exp(x)')
f1 =
  x^2-x*sin(x)+exp(x)

不同的是,sym像定义基本符号对象一样来定义符号表达式,
                  而syms是先定义表达式中涉及的基本符号对象,再输入表达式。

  • 符号方程式是含有等号的符号表达式,只能由sym指令来构建。
>> sym('x^2-2*x*y=0')
ans =
  x^2-2*x*y=0
  • 查找表达式中的符号变量

用函数findsym来寻找符号变量,其调用格式为:  

查找表达式中的变量:
>> syms a b c x
>> f=a*x^2+b*x+c;
>> findsym(f)
ans =
  a, b, c, x
另外还有:
>> findsym(f,2)    %返回表达式f中靠近x的2个变量,包括x本身。
ans =
  x,c
>> findsym(f,4)
ans =
  x,c,b,a

注意:在使用函数findsym时,认为大写字母离x的距离总大于所有小写字母离x的距离

符号表达式的四则运算:

数值表达式一样,可以进行加减、乘除运算,得到的结果仍然是符号型的

>>syms x y
>> f1=x^2+x*y+1;
>> f2=y^2+x*y+1;
>> f3=f1+f2,f4=f1-f2,f5=f1*f2,f6=f1/f2,f7=f1\f2

符号表达式的因式分解:

利用函数factor(s)实现:符号表达式s可以是正整数、数值数组或符号表达式数组

例如

将函数f(x)=2x4-5x3+4x2-5x+2进行因式分解:

>> f=sym('2*x^4-5*x^3+4*x^2-5*x+2');
>> F1=factor(f)
F1 =
(x-2)*(2*x-1)*(x^2+1)

合并同类项:

利用函数collect,其调用格式为:

collect(s):按默认变量x对符号表达式s合并同类项;

f=-2*x^2*cos(x)-x^2);
>>f1=collect(f)
f1 =
  (-2*cos(x)-1)*x^2

collect(s,v):按变量v对符号表达式s合并同类项

f=x^3-2*x^2*cos(x)-x^2+y*cos(x)-2*y;
>> f2=collect(f,cos(x))
f2 =
  (-2*x^2+y)*cos(x)+x^3-x^2-2*y

多项式展开:

利用函数expand(s)来展开符号表达式s

f3=expand(exp((x+y)^2))
f3 =
  exp(x^2)*exp(x*y)^2*exp(y^2)

符号表达式的化简:

simplify函数:利用Maple化简规则得到符号表达式的最简结果。

simple函数:尝试用不同的化简方法对表达式进行化简,返回最简形式。
有3种调用格式:            
simple(s):显示通过各种化简方法得到的化简结果,并返回其中最简的一个。               r=simple(s):不显示中间的化简结果,仅返回最简的一个结果。              
[r how]=simple(s):返回最简的结果和化简方法。
 

例如:

利用simplify函数化简符号表达式:

syms x y
>> s=sin(x)^4-cos(x)^4;
>> f1=simplify(s)
f1 =
    1-2*cos(x)^2

利用simple函数化简符号表达式:

>> f=simple(s)                   %直接返回其中最简的结果
f =
-1+cos(x)^2

符号表达式的通分:

利用函数numden 可将符号表达式化简为有理式,提取出其分子和分母

[n,d]=numden(s):返回符号表达式s的分子n和分母d。其中s还可以是符号矩阵

>> [n1,d1]=numden(sym(4/5))
n1 = 4
d1 = 5

3.符号方程的求解

利用solve函数,用于求解代数方程(组),调用格式:

g = solve(eq):求自变量为默认自变量的代数方程eq=0。  
g = solve(eq,v):求自变量为指定变量v的代数方程eq=0。  
g = solve(eq1,eq2,...,eqn):求n个代数方程eq1=0、eq2=0、…、eqn=0组成的方程组,自变量为这n个代数方程的默认自变量。  
g = solve(eq1,eq2,...,eqn,v1,v2,...,vn):求n个代数方程eq1=0、eq2=0、…、eqn=0组成的方程组,自变量为n个指定变量v1、…、vn。

注意,当方程(组)不存在符号解时,又没有其它自由参数,则solve将给出数值解。

例如:(1)求解一元二次方程
f=sym('a*x^2+b*x+c');
>> solve(f)                         %以x为自变量求解方程f=0
ans =
 1/2/a*(-b+(b^2-4*a*c)^(1/2))
 1/2/a*(-b-(b^2-4*a*c)^(1/2))
>> solve(f,'b')                      %以b为自变量求解方程f=0
ans =
-(a*x^2+c)/x
(2)求解方程组
>> syms x y z
>> f1=x^2-y^2+z;
>> f2=x+y-z;
>> f3=3*x-y-z-2;
>> [x,y,z]=solve(f1,f2,f3)   %以数值数组形式输出求解结果
x =
1/2
y =
-1/2
z =
0

4.符号矩阵

创建符号矩阵方法:

(1)函数法:用sym函数直接创建符号矩阵。
A=sym('[1,a,b;a+b,1/2,a*b]')
A =
[   1,   a,   b]
[ a+b, 1/2, a*b]
2)直接法:用创建普通数值矩阵的方法创建符号矩阵,但首先要定义所需要的符号变量。
利用直接法创建符号矩阵
>> syms a b
>> A=[1,a,b;a+b,1/2,a*b]
A =
[   1,   a,   b]
[ a+b, 1/2, a*b]
3)转换法:利用函数sym来实现由数值矩阵转换为符号矩阵
转换法创建符号矩阵
>> A=[1.1 2.2;3.3 4.4]
A =   1.1000    2.2000
         3.3000    4.4000
>> sym(A)
ans =  [ 11/10,  11/5]
           [ 33/10,  22/5]

02 符号极限

利用limit函数,求解符号函数的极限,调用格式:

limit(F,x,a):计算当时符号表达式F,当自变量x趋近于a时的极限。
limit(F,a):计算当默认自变量趋近于a时符号表达式F的极限。
limit(F):计算当默认自变量趋近于0时符号表达式F的极限。
limit(F,x,a,'left')或limit(F,x,a,'right'):计算当x趋向于a时,符号表达式F的左极限(a-)或右极限(a+)。

>> syms x y
>> limit(sin(x)/x)
ans = 1

03 符号微分

利用diff函数,调用格式:

diff(s):求符号表达式s对于默认自变量的微分。  
diff(s,’v’):求符号表达式s对于自变量v的微分。
diff(s,n):求符号表达式s对于默认自变量的n次微分。  
diff(s,’v’,n):求符号表达式s对于自变量v的n次微分。

>> s1=sym('2*x^2+y^2-4*x*y');
>> diff(s1)
ans =
4*x-4*y
>> diff(s1,2)
ans =
4

求解微分方程

利用函数dsolve用于求解微分方程(组),调用格式:

r=dsolve(‘eq1,eq2,...’,‘cond1,cond2,...’,‘v’)或 r = dsolve(‘eq1’, ‘q2’,...,‘cond1’,‘cond2’,...,‘v’)  求微分方程eq1、eq2、…的解。  其中cond1、cond2、…为给定的常微分方程的边界条件或初始条件,  v为指定的自变量,默认变量为t。

注意,在微分方程eq中,用D表示对自变量(设为x)的微分,如D=d/dx,D2= d2/dx2,D后的字符为因变量。

例如:

>> dsolve('Dy=a*x')            %未指定变量,默认变量为t
ans =
a*x*t+C1
>> dsolve('Dy=a*x','x')        %指定变量为x
ans =
1/2*a*x^2+C1

>> dsolve('D2y=cos(2*x)-y','Dy(0)=0','y(0)=1','x')
ans =
4/3*cos(x)-1/3*cos(2*x)

>>  [x,y]=dsolve('Dx=x-y','Dy=x+y','x(0)=2','y(0)=1')
x =
-exp(t)*(-2*cos(t)+sin(t))
y =
exp(t)*(2*sin(t)+cos(t))

04 符号积分

利用函数int,调用格式:

int(s):求符号表达式s对默认自变量的不定积分。
int (s,’v’):求符号表达式s对自变量v的不定积分。
int (s,a,b):求符号表达式s对默认自变量从a到b的定积分。
int(s,’v’,a,b):求符号表达式s对自变量v从a到b的定积分。

>> syms x a
>> int(1/(1+x^2))
ans =
atan(x)

05 复合函数求解

 利用compose函数,求解复合函数,调用格式:

compose(f,g):求f=f(x),g=g(y)的复合函数f[g(y)]。
compose(f,g,z):求f=f(x),g=g(y),y=z的复合函数f[g(z)]。  
compose(f,g,x,z):求f=f(x),x=g(z)的复合函数f[g(z)]。
compose(f,g,x,y,z):求f=f(x),x=g(y),y=z的复合函数f[g(z)]

>> syms x y z t u              %定义符号变量
>> f=1/(1+x^2);g=cos(y);h=x^t;p=exp(y/u);    %定义符号表达式f,g,h,p
>> compose(f,g)                                   %求f,g的复合函数
ans =
1/(1+cos(y)^2)

06 求解反函数

利用finverse函数,调用格式:

g = finverse(f):返回符号函数f的反函数,且反函数的自变量与原函数的相同。  
g = finverse(f,v):返回包含多余1个变量的符号函数f的反函数,反函数的自变量为v。

求解反函数
>> syms x y
>> finverse(exp(2*x))          %求反函数,自变量为x
ans =
1/2*log(x)
>> finverse(x+2*y-1,y)         %求反函数,自变量为y
ans =
-1/2*x+1/2+1/2*y

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925453.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 13 编译Android Studio版本的Launcher3

Android 13 Aosp源码 源码版本Android Studio版本Launcher3QuickStepLib (主要代码) Launcher3ResLib(主要资源)Launcher3IconLoaderLib(图

Ubuntu交叉编译 opencv for QNX

前言 在高通板子上开发一些程序的时候,会用到opencv帮助处理一下图像数据,高通车载板子sa8155和sm8295都有QNX os,需要交叉编译opencv的库,(这个交叉编译真是搞得我太恶心了,所以进行一个记录和分享) 搜了很多资料,有些太过于复杂,有些也存在错误导致最后没有编译成…

NVR监测软件EasyNVR多个NVR同时管理:录播主机的5条常见问题与解决办法

视频监控广泛应用于城市治安、交通管理、商业安保及家庭监控等领域。在使用EasyNVR平台管理多个NVR设备时,尤其是涉及到海康录播主机的场景中,使用者可能会遇到一些常见问题。本文将探讨海康录播主机的五个常见问题及其解决办法。 1、海康录播主机的5条常…

力扣刷题TOP101:6.BM7 链表中环的入口结点

目录: 目的 思路 复杂度 记忆秘诀 python代码 目的 {1,2},{3,4,5}, 3 是环入口。 思路 这个任务是找到带环链表的环入口。可以看作是上一题龟兔赛跑(Floyd 判圈算法)的延续版:乌龟愤愤不平地举报兔子跑得太快,偷偷…

网关: 用途和产品对比

概述 微服务中的有一个非常关键的组件: API网关 和配置中心一样,在没有采用微服务架构的时候 我们可以自己搭建自己的API网作作为统一的 API 出口和安全验证 在微服务架构之下,服务被拆的非常的零散,在降低了耦合度的同时 也给服务的统一…

Java ConcurrentHashMap

Java Map本质不是线程安全的,HashTable和Collections同步包装器(Synchronized Wrapper)在并发场景下性能低。Java还为实现 Map 的线程安全提供了并发包,保证线程安全的方式从synchronize简单方式到精细化,比如Concurre…

Spring 自调用事务失效分析及解决办法

前言 博主在写公司需求的时候,有一个操作涉及到多次对数据库数据的修改。当时就想着要加 Transactional注解来声名事务。并且由于一个方法中有太多行了,于是就想着修改数据库的操作单独提取出来抽象成一个方法。但这个时候,IDEA 提示我自调用…

【LeetCode每日一题】——189.轮转数组

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【题目进阶】八【解题思路】九【时空频度】十【代码实现】十一【提交结果】 一【题目类别】 数组 二【题目难度】 中等 三【题目编号】 189.轮转数组 四【题目描述】 …

Spark基本命令详解

文章目录 Spark基本命令详解一、引言二、Spark Core 基本命令1、Transformations(转换操作)1.1、groupBy(func)1.2、filter(func) 2、Actions(动作操作)2.1、distinct([numTasks])2.2、sortBy(func, [ascending], [numTasks]) 三、…

AppFlow:支持飞书机器人调用百炼应用

AppFlow:支持飞书机器人调用百炼应用 简介: 本文介绍了如何创建并配置飞书应用及机器人,包括登录飞书开发者后台创建应用、添加应用能力和API权限,以及通过AppFlow连接流集成阿里云百炼服务,最后详细说明了如何将机器…

基于vite创建一个脚手架(快速入门)

Vite是一种新型的前端构建工具,主要用于构建现代化的Web应用程序。以 原生ESM 方式提供源码。这实际上是让浏览器接管了打包程序的部分工作:Vite 只需要在浏览器请求源码时进行转换并按需提供源码。根据情景动态导入代码,即只在当前屏幕上实际…

学习ASP.NET Core的身份认证(基于Session的身份认证1)

ASP.NET Core使用Session也可以实现身份认证,关于Session的介绍请见参考文献5。基于Session的身份认证大致原理就是用户验证成功后将用户信息保存到Session中,然后在其它控制器中从Session中获取用户信息,用户退出时清空Session数据。百度基于…

视觉语言模型(VLM)学习笔记

目录 应用场景举例 VLM 的总体架构包括: 深度解析:图像编码器的实现 图像编码器:视觉 Transformer 注意力机制 视觉-语言投影器 综合实现 训练及注意事项 总结 应用场景举例 基于文本的图像生成或编辑:你输入 “生成一张…

spider--某站搜索--自动化dp

免责声明:本文仅作分享! 自动化: DrissionPage DrissionPage官网 import time from DrissionPage import ChromiumPage,ChromiumOptions import pandas as pd# 这里配置了浏览器路径,不配置的话直接 page ChromiumPage() co Ch…

学成在线day07

视频处理 技术方案 掌握了xxl-job的分片广播调度方式,下边思考如何分布式去执行学成在线平台中的视频处理任务。 任务添加成功后,对于要处理的任务会添加到待处理任务表中,现在启动多个执行器实例去查询这些待处理任务,此时如何…

vsftpd 的安装和应用(超详细!!!)

FTP(File Transfer Protocol,文件传输协议)是一种用于在计算机网络上进行文件传输的标准协议。它允许用户从一台计算机向另一台计算机上传或下载文件。FTP的工作原理涉及到客户端和服务器之间的交互,以及数据传输的过程。 一、FT…

学习笔记:黑马程序员JavaWeb开发教程(2024.11.29)

10.5 案例-部门管理-新增 如何接收来自前端的数据: 接收到json数据之后,利用RequestBody注解,将前端响应回来的json格式的数据封装到实体类中 对代码中Controller层的优化 发现路径中都有/depts,可以将每个方法对应请求路径中的…

基于Java的小程序电商商城开源设计源码

近年来电商模式的发展越来越成熟,基于 Java 开发的小程序电商商城开源源码,为众多开发者和企业提供了构建个性化电商平台的有力工具。 基于Java的电子商城购物平台小程序的设计在手机上运行,可以实现管理员;首页、个人中心、用户…

JiaJia-CP-1,2,3的WP(1)

一.JiaJia-CP-1 这是ctfshow里电子取证里面的题,以下下是我做题时的WP 审题,最后提交格式要进行md5 加密,给各位CTFer们找了一个md5加密的网站(加紧收藏哦): MD5 在线加密工具 | 菜鸟工具 1.拿到题目&am…

微信小程序下拉刷新与上拉触底的全面教程

微信小程序下拉刷新与上拉触底的全面教程 引言 在微信小程序的开发中,用户体验至关重要。下拉刷新和上拉触底是提高用户交互体验的重要功能,能够让用户轻松获取最新数据和内容。本文将详细介绍这两个功能的实现方式,结合实际案例、代码示例和图片展示,帮助开发者轻松掌握…