005 MATLAB符号微积分

前言:

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

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

 01 符号对象

1.基本符号对象:

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

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

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

sym('y','real')              %定义实型符号变量ysyms 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.20003.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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“岗位复合化、技能层次化” 高职大数据技术专业人才培养实践

在全球数字化浪潮的推动下,大数据技术已经成为引领社会进步和经济发展的核心动力。随着《关于深化现代职业教育体系建设改革的意见》等系列指导问文件的发布,我国高职大数据技术专业的教育正迎来全新机遇与挑战。这些政策不仅明确了职业教育改革的方向&a…

51c自动驾驶~合集38

我自己的原文哦~ https://blog.51cto.com/whaosoft/12358456 #GaussianPretrain 万能3D高斯预训练表示!爆拉3D检测、Occ、高精地图等四大任务! 受Tesla的技术的推动,越来越多的厂商开始走"纯视觉"的路线,多数方案还…

MongoDB集群分片安装部署手册

文章目录 一、集群规划1.1 集群安装规划1.2 端口规划1.3 目录创建 二、mongodb安装(三台均需要操作)2.1 下载、解压2.2 配置环境变量 三、mongodb组件配置3.1 配置config server的副本集3.1.1 config配置文件3.1.2 config server启动3.1.3 初始化config …

AIGC--------AIGC在医疗健康领域的潜力

AIGC在医疗健康领域的潜力 引言 AIGC(Artificial Intelligence Generated Content,人工智能生成内容)是一种通过深度学习和自然语言处理(NLP)等技术生成内容的方式。近年来,AIGC在医疗健康领域展现出了极…

数据结构 (18)数的定义与基本术语

前言 数据结构是计算机科学中的一个核心概念,它描述了数据元素之间的关系以及这些元素在计算机中的存储方式。 一、数的定义 在计算机科学中,“数”通常指的是树形数据结构,它是一种非线性的数据结构,由节点(或称为元素…

基于PoE交换机的智慧停车场监控组网应用

伴随城市发展快速,汽车保有量也不断增长,导致停车管理问题也愈发凸显。针对包括路侧停车位、地面停车场、地下停车场等场景的停车管理需求,通常会部署监控设备进行车位监测、现场安全监测等,助力构建智能化停车管理。因此如何为分…

【RocketMQ事务消息如何实现】

贴上一段实现代码, 业务中可以参考使用 Component public class TestIdpSender {public void sendInTransaction(String topic, String tag, String message){Message<String> msg MessageBuilder.withPayload(message).build();String dt topic ":" tag;…

ENSP IPV6-over-IPV4

IPv6是网络层协议的第二代标准协议&#xff0c;一个IPv6地址同样可以分为网络前缀和主机ID两个部分。 可以将IPV4的网络看成IPV6的承载网&#xff0c;只有IPv4网络是连通的&#xff0c;则IPv6网络才有可能连通。所以配置的时候需要先配置IPv4网络的路由功能&#xff0c;再配IP…

vue3透传Attributes

vue3透传Attributes,组件名称上写的事件、style、类名也会生效&#xff1b; 如果是透传事件&#xff0c;点击子组件内部按钮&#xff0c;会执行组件内部&#xff0c;再执行组件名上的 父组件 <script setup> import ChildView from ./ChildView.vuefunction onClick()…

18. C++STL 4(vector的使用, 空间增长, 迭代器失效详解)

⭐本篇重点&#xff1a;vector容器的使用详解 ⭐本篇代码&#xff1a;c学习/08.vector_test 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) 目录 一. vector的介绍 二. vector的使用 2.1 vector的定义 * 2.2 vector的迭代器和遍历 a operator[]访问 b vect…

深入探索机器学习性能优化的关键路径——《特征工程训练营》

通过“特征工程”技术&#xff0c;可优化训练数据&#xff0c;提升机器学习流程的输出效果&#xff01;“特征工程”基于现有数据设计相关的输入变量&#xff0c;由此简化训练过程&#xff0c;增强模型性能。调整超参数或模型的效果都不如特征工程&#xff1b;特征工程通过改变…

吉他初学者学习网站搭建系列(8)——如何练习音阶

文章目录 背景实现吉他面板音阶位置音阶识别 结语 背景 大家好&#xff0c;我是一个爱好音乐的非典型程序员&#xff01;我最近又往自己的网站中集成了一个模块——音阶。下面介绍一下背景。 很多吉他初学者在掌握了一些音阶知识后&#xff0c;可能不知道怎么训练自己的对音阶…

15.三数之和 python

三数之和 题目题目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;题目链接 题解Python 实现解释提交结果 题目 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满…

tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录

这些error的坑&#xff0c;肯定是很多人不想看到的&#xff0c;我的开源软件PakePlus是使用tauri开发的&#xff0c;PakePlus是一个界面化将任何网站打包为轻量级跨平台软件的程序&#xff0c;利用Tauri轻松构建轻量级多端桌面应用和多端手机应用&#xff0c;为了实现发布的时候…

Android 12.0 DocumentsUI文件管理器首次进入默认显示内部存储文件功能实现

1.前言 在12.0的系统rom定制化开发中,在关于文件管理器的某些功能中,在首次进入文件管理器的时候默认进入下载 文件夹,点击菜单选择内部存储的时候,会显示内部存储的内容,客户开发需要要求默认显示内部存储的文件 接下来分析下功能的实现 如图: 2.DocumentsUI文件管理器首…

抓包之wireshark基础用法介绍

写在前面 wireshark作为最优秀的抓包工具&#xff0c;有必要详细的看下其基本用法&#xff0c;所以本文就一起来做这件事吧&#xff01; 1&#xff1a;初步介绍 打开wireshark首先会进入如下的界面&#xff1a; 想要开始抓包&#xff0c;需要进行如下操作&#xff1a; 接着…

【Java基础入门篇】二、控制语句和递归算法

Java基础入门篇 二、控制语句和递归算法 2.1 switch-case多分支选择语句 switch执行case语句块时&#xff0c;若没有遇到break&#xff0c;则运行下一个case直到遇到break&#xff0c;最后的default表示当没有case与之匹配时&#xff0c;默认执行的内容&#xff0c;代码示例如…

【人工智能学习之STGCN训练自己的数据集】

STGCN训练自己的数据集 准备事项数据集制作视频转jsonjsons转jsonjson转npy&pkl 训练STGCN添加图结构修改训练参数开始训练测试 准备事项 st-gcn代码下载与环境配置 git clone https://github.com/yysijie/st-gcn.git cd st-gcn pip install -r requirements.txt cd torc…

Dify+Docker

1. 获取代码 直接下载 &#xff08;1&#xff09;访问 langgenius/dify: Dify is an open-source LLM app development platform. Difys intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, …

Android so库的编译

在没弄明白so库编译的关系前,直接看网上博主的博文,常常会觉得云里雾里的,为什么一会儿通过Android工程cmake编译,一会儿又通过NDK命令去编译。两者编译的so库有什么区别? android版第三方库编译总体思路: 对于新手小白来说搞明白上面的总体思路图很有必…