005 MATLAB符号微积分

news2024/11/30 5:18:33

前言:

在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

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

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

相关文章

深入实践:从零开始掌握GPT的应用开发

1. 为什么选择GPT? GPT(Generative Pre-trained Transformer)是当下最具影响力的语言生成模型之一,适用于生成文本、分析语言情感、翻译、多任务对话等多种场景。相比传统算法和模型,GPT有以下显著优势: …

WRF-Chem模式安装、环境配置、原理、调试、运行方法;数据准备及相关参数设置方法

大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因素是控制大气污染的关键自然因素。大气污染问题既是局部、当地的,也是区域的,甚至是全球的。本地的污染物排放除了对当地造成严重影响外,同时还会在…

开源项目:纯Python构建的中后台管理系统

来源:Python大数据分析 费弗里 大家好我是费老师,目前市面上有很多开源的「中后台管理系统」解决方案,复杂如「若依」那种前端基于Vue,后端基于Java的框架,虽然其提供了较为完善的一整套前后端分离权限管理系统解决方…

汽车免拆诊断案例 | 2017款捷豹F-PACE车发动机偶尔怠速不稳

故障现象  一辆2017款捷豹F-PACE车,搭载2.0 L GTDi发动机,累计行驶里程约为16万km。车主反映,车辆组合仪表上发动机故障灯点亮(图1),且发动机偶尔怠速不稳。 图1 发动机故障灯点亮 故障诊断 接车后试车…

SQL进阶技巧:非等值连接--单向近距离匹配

目录 0 场景描述 1 数据准备 2 问题分析 ​编辑 ​编辑 3 小结 数字化建设通关指南 0 场景描述 表 t_1 和表 t_2 通过 a 和 b 关联时,有相等的取相等的值匹配,不相等时每一 个 a 的值在 b 中找差值最小的来匹。 表 t_1:a 中无重复值…

泷羽sec-云技术

基础之云技术 声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec…

element ui select绑定的值是对象的属性时,显示异常.

需要声明 value-key"value",如果还不行可能是数据类型不一致数字0和字符串0是不一致的. el-select v-model"value" clearable placeholder"Select" value-key"value" style"width: 240px"><!-- <el-option v-for&…

【ChatGPT大模型开发调用】如何获得 OpenAl API Key?

如何获取 OpenAI API Key 获取 OpenAI API Key 主要有以下三种途径&#xff1a; OpenAI 官方平台 (推荐): 开发者用户可以直接在 OpenAI 官方网站 (platform.openai.com) 注册并申请 API Key。 通常&#xff0c;您可以在账户设置或开发者平台的相关页面找到申请入口。 Azure…

沸点 | 嬴图Powerhouse全面发布:从用户视角看嬴图实时图数据库的成长与价值

嬴图Powerhouse&#xff0c;直译过来就是能量站、动力站&#xff0c;它是嬴图自2019年发布高密度并行图计算引擎以来的一个里程碑&#xff0c;包括对整个产品架构的一个彻底革新&#xff0c;为大量复杂数据进行计算、分析和存储提供了快速和强大的动力支持。目前嬴图的用户正在…

深入理解计算机系统,源码到可执行文件翻译过程:预处理、编译,汇编和链接

1.前言 从一个高级语言到可执行程序&#xff0c;要经过预处理、编译&#xff0c;汇编和链接四个过程。大家可以思考下&#xff0c;为什么要有这样的过程&#xff1f; 我们学习计算机之处&#xff0c;就应该了解到&#xff0c;计算机能够识别的只有二进制语言&#xff08;这是…

Gitee markdown 使用方法(持续更新)

IPKISS 获取仿真器件的名称 引言正文标题换行第一种------在行末尾手动键入两个空格第二种------额外换行一次&#xff0c;即两行中间留一个空行 缩进与反缩进代码块行内代码添加图片添加超链接 加粗&#xff0c;倾斜&#xff0c;加粗倾斜 引言 有些保密性的文件或者教程&…

Element UI 打包探索【1】

目录 第一个命令 第二个命令 node build/bin/iconInit.js node build/bin/build-entry.js node build/bin/i18n.js node build/bin/version.js 总结 最近在接触组件库的项目&#xff0c;所以特意拿来Element UI借鉴学习一下&#xff0c;它算是做前端的同学们离不开的一…

关于IDE的相关知识之一【使用技巧】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide使用技巧的相关内容&#xff01; 关于…

【C语言】字符串字面量的特殊性

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;字符串字面量的定义和存储位置&#x1f4af;字符串字面量的不可修改性&#x1f4af;字符数组与字符串字面量的区别字符数组的定义和可修改性指针与数组的区别 &#x1…

linux(redhat8)如何安装mysql8.0之rpmtar双版本(最新版)(内网)(离线)

一.环境 系统版本&#xff1a;Red Hat 8.5.0-20 Java环境&#xff1a;build 1.8.0_181-b13 MYSQL&#xff1a;8.x版本 二、查看内核版本 #查看内核版本&#xff0c;根据内核版本下载对应的安装包 cat /proc/version 三、安装方式 一、rpm包方式 一、下载安装包 1. 登录网…

Python 中 if __name__ == ‘__main__‘ 有什么作用 ?

Python 以其简单性和可读性而闻名&#xff0c;但是它包含了一小段代码 &#xff1a;if name ‘main’: 经常让新手感到困惑。 理解 name 属性 为了理解 if name ‘main’: 的重要性&#xff0c;我们首先需要理解 name 在 Python 中的含义。Python 中的每个模块都有一个名为…

djinn:1 靶场学习小记

一、测试环境&#xff1a; kail攻击机&#xff1a;Get Kali | Kali Linux 靶场镜像&#xff1a;https://download.vulnhub.com/djinn/djinn.ova 描述&#xff1a; 该机器与 VirtualBox 和 VMWare 兼容。DHCP 将自动分配一个 IP。您将在登录屏幕上看到 IP。您必须找到并读取分…

外卖点餐系统小程序

目录 开发前准备 项目展示项目分析项目初始化封装网络请求 任务1 商家首页 任务分析焦点图切换中间区域单击跳转到菜单列表底部商品展示 任务2 菜单列表 任务分析折扣信息区设计菜单列表布局请求数据实现菜单栏联动单品列表功能 任务3 购物车 任务分析设计底部购物车区域添加商…

内网不出网上线cs

一:本地正向代理目标 如下&#xff0c;本地(10.211.55.2)挂好了基于 reGeorg 的 http 正向代理。代理为: Socks5 10.211.55.2 1080python2 reGeorgSocksProxy.py -l 0.0.0.0 -p 1080 -u http://10.211.55.3:8080/shiro/tunnel.jsp 二&#xff1a;虚拟机配置proxifer 我们是…

ThinkPHP Nginx 重写配置

目录 NGINX 重写 Admin项目隐藏入口文件&#xff0c;且禁用Admin模块&Admin.php 1️⃣配置仅用模块 2️⃣新增admin_xyz.php文件&#xff08;自定义入口文件名&#xff09;&#xff0c;并绑定admin模块 3️⃣配置nginx 重写规则 NGINX 重写 在Nginx低版本中&#xff0…