文章目录

  • 1. 符号定义
    • 1.1 sym函数介绍
      • 1.1.1 定义单个符号
      • 1.1.2 定义多个符号
      • 1.1.3 保留真实数据
    • 1.2 syms函数介绍
      • 1.2.1 定义不同变量
      • 1.2.2 定义多行符号
  • 2. 代换符号
    • 2.1 代换表达式中的符号
    • 2.2 控制替换后的精度
  • 3. 其他函数
    • 3.1 因式分解
    • 3.2 展开表达式
    • 3.3 合并同类项
    • 3.4 化简
    • 3.5 通分
    • 3.6 嵌套分解
    • 3.7 求反函数
    • 3.8 复合函数

1. 符号定义

1.1 sym函数介绍

1.1.1 定义单个符号

sym 函数能够定义单个的符号变量,如下所示:

a = sym('a')

运行后的显示为:

a =

a

1.1.2 定义多个符号

当需要定义多个变量时,则可以在后面写上需要变量的行数与列数,其可以生成多行多列的变量矩阵。

A = sym('a',[2 4])

打印出的结果如下

A =

[ a1_1, a1_2, a1_3, a1_4]
[ a2_1, a2_2, a2_3, a2_4]

当想调用对应的符号时用矩阵元素的索引即可

f = A(1,3) * 8

f =

8*a1_3

sym 还支持自定义生成的变量的形式,

A = sym('a_%d_%d',[2 4])

生成的符号就是a_1_1 的形式。

1.1.3 保留真实数据

使用sym 函数能够将数据的值进行精确的保留,不必要担心计算机计算的误差等问题。
例如,当计算 1123467∗34\frac{1}{123467} * \frac{3}{4}1234671​∗43​ 时,我们想要的是准确的分数形式,但是直接输入的话会导致答案成为浮点形式,这时使用 sym函数就能避免这种情况。
直接输入如下:

answer = 1 / 1234567 * (3 / 4)

输出为

answer =

6.0750e-07

使用sym函数转换后:

answer2 = 1 / sym(1234567) * (3 / 4)

输出为

answer2 =

3/4938268

该答案为分式形式的准确解。
注意:在使用sym函数进行精度保留时,不能将其写为sym(1/1234567) ,写成这种形式时会优先计算1/1234567再将其转为分式,精度已经得到了损失。

1.2 syms函数介绍

1.2.1 定义不同变量

syms函数能够很快的定义多个不同的变量,变量之间只需要使用空格隔开就行,形式如下:

syms a b c d

使用whos命令查看所有变量为

Name     Size     Bytes Class     Attributes

a             1x1            8  sym
b             1x1            8  sym
c             1x1            8  sym
d             1x1            8  sym

1.2.2 定义多行符号

syms 同样可以定义多行多列的数据类型,形式如下

syms a [4 3]

以上代码定义了一个4*3的符号,等价于a=sym('a', [4 3]),符号全部存储在a当中,需要使用时只需要使用诸如a(1,3)的索引即可。

2. 代换符号

使用符号定义了一个符号函数后,往往需要将符号函数中的一些符号代换成其他符号或者数值类型,这种情况下一般使用 subs 函数。

2.1 代换表达式中的符号

subs 函数的一般形式如下

subs(S, old, new)

其参数的含义是在符号表达式 S 中,利用 new 中的符号或数值替换 old 中的符号。
其示例如下

syms a b c x y
f = a * x^2 + b * y + c;%原表达式
syms m
f1 = subs(f, [x y], [sin(x) log(y)]) %符号替换符号
f2 = subs(f, [a b], [2 3]) %数值替换符号
f3 = subs(f, a, 1: 4) %多数值替换符号

输出如下:

f1 =

a*sin(x)^2 + c + b*log(y)

f2 =

2*x^2 + c + 3*y

f3 =

[ x^2 + c + b*y, 2*x^2 + c + b*y, 3*x^2 + c + b*y, 4*x^2 + c + b*y]

2.2 控制替换后的精度

使用数值对表达式进行了替换后,往往需要对精度做一定的控制与保证,这个时候就需要使用vpa 函数了。
控制精度的方法有两种,一是用 digits 函数+ vpa 函数,一种是直接用 vpa 函数。

方式一digits+vpa
digits函数规定了精度的保留位数 ,默认是32位,vpa函数对数值进行计算。如digits(10)代表精度保留为有效数字10位,digits函数使用后必须要配合vpa函数使用。


计算 π∗e2\pi * e^2π∗e2 的值,保留50位有效数字。

digits(50); %保留50位精度
y = str2sym('pi * exp(2)'); %将字符串转为sym形式
vpa(y)

输出如下:

ans =

23.213404357363387236150345896006882480062932649056

有效数字位数为50位。

方式二vpa
vpa 函数有还有一种格式如下

vpa(E, D)

其中 E 为传入的要计算的值, D 为要保留的精度。


计算 f(x)=cos1+sin1f(x) = cos1+sin1f(x)=cos1+sin1 的值,保留50位有效数字。

syms x
f(x) = cos(x) + sin(x);
y = vpa(f(1), 50)

上述代码计算 f(1)f(1)f(1) 的值,设定精度为50,结果为

y =

1.3817732906760362240534389290732756033548734814163

3. 其他函数

3.1 因式分解

符号表达式中使用 factor函数对符号表达式进行因式分解,调用格式如下

factor(E)

其中 E 为符号表达式.


化简 f=x3+x2−x−1f=x^3+x^2 - x - 1f=x3+x2−x−1

syms x
f = x^3 + x^2 - x - 1;
f1 = factor(f)

输出为

f1 =

[ x - 1, x + 1, x + 1]

3.2 展开表达式

使用 expand函数对符号表达式进行展开,调用格式如下

expand(E)

其中 E 为符号表达式.


展开函数 f=(x+y)4f=(x + y)^4f=(x+y)4

syms x y
f= (x + y)^4;
f1 = expand(f)

输出为

f1 =

x^4 + 4*x^3*y + 6*x^2*y^2 + 4*x*y^3 + y^4

3.3 合并同类项

使用 collect函数对符号表达式进行展开,其调用格式有两种

collect(E)

将符号表达式 E 中各sym变量前的系数进行合并。

collect(E, v)

将符号表达式 E 中的 v 的同幂项系数进行合并。


将函数 f=−axe−cx+be−cxf=-axe^{-cx} + be^{-cx}f=−axe−cx+be−cx的同类项进行合并。
注意,该题下如果不指定合并的项数,那么其将不会进行合并,因为没有除了数值外相同的sym 项,比如下面的代码

syms a b c x
f = -a * x * exp(-c * x) + b * exp(-c * x)
f1 = collect(f)

输出为

f1 =

(-a*exp(-c*x))*x + b*exp(-c*x)

不能说没有变化,只能说变了不如没变。

该题要想合并必须指定合并的项,

syms a b c x
f = -a * x * exp(-c * x) + b * exp(-c * x)
f1 = collect(f,exp(-c*x))

输出为

f1 =

(b - a*x)*exp(-c*x)

3.4 化简

使用 simplify函数对符号表达式进行化简,调用格式如下

simplify(E)

其中 E 为符号表达式.


化简函数 e1=cos2x+sin2xe_1= cos^2x + sin^2xe1​=cos2x+sin2x 和 e2=ec∗ln(a+b)e_2= e^{c * ln(a + b)}e2​=ec∗ln(a+b)

syms x a b c;
e10 = sin(x)^2 + cos(x) ^2;
e1 = simplify(e10);
e20 = exp(c * log(a+ b));
e2 = simplify(e20);

输出为

e1 =

1
e2 =

(a + b)^c

除此之外,也可用simple 函数进行化简,simple会对符号表达式进行不同的尝试,并返回长度最短的形式。其调用格式如下:

[R,HOW] = simple(E)

其中 E 为符号表达式, R为化简结果,HOW为化简方法。

3.5 通分

使用 numden函数对符号表达式进行通分,调用格式如下

[N,D] = numden(E)

其中 E 为符号表达式, N为通分后的分子,D为通分后的分母。


对函数 f=xky+ypxf = \frac{x}{ky} + \frac{y}{px}f=kyx​+pxy​ 进行通分。

syms k p x y
f = x / ( k * y) + y / ( p * x);
[n, d] = numden(f);
f1 = n / d;

输出为

f1 =

(p*x^2 + k*y^2)/(k*p*x*y)

3.6 嵌套分解

使用 horner函数对符号表达式进行嵌套类型的分解,调用格式如下

horner(E)

其中 E 为符号表达式。


将 f=−ax4+bx3−cx2+x+df = -ax^4+bx^3-cx^2+x+df=−ax4+bx3−cx2+x+d 转为嵌套形式的表达式。

syms a b c d x
f = -a * x^4 + b * x^3 - c * x^2 + x + d;
f1 = horner(f)

输出为

f1 =

d - x*(x*(c - x*(b - a*x)) - 1)

3.7 求反函数

使用 finverse函数对符号表达式进行嵌套类型的分解,调用格式如下

g = finverse(E, v)

其中 E 为符号表达式, v 为指定的自变量,单变量为 xv 可以省略。


求函数 f=ax+bf = ax+bf=ax+b 的反函数。

syms x y a b
y = a * x + b;
g = finverse(y)

输出为

g =

-(b - x)/a

3.8 复合函数

使用 compose函数对两个符号表达式进行复合求解,调用格式如下

compose(f, g)

当 f=f(x)f = f(x)f=f(x)以及g=g(y)g = g(y)g=g(y)时,返回复合函数f(g(y))f(g(y))f(g(y)) 。

compose(f, g, z)

当 f=f(x)f = f(x)f=f(x)以及g=g(y)g = g(y)g=g(y)时,返回复合函数f(g(z))f(g(z))f(g(z)) 。

compose(f, g, t, u ,z)

当 f=f(t)f = f(t)f=f(t)以及g=g(u)g = g(u)g=g(u)时,返回复合函数f(g(z))f(g(z))f(g(z)) 。

MATLAB 符号表达式与运算全面详细讲解相关推荐

  1. python中逻辑运算符and,or的用法以及运算的核心思想——“短路逻辑”超详细讲解

    python中and和or的用法以及运算的核心思想--"短路逻辑"超详细讲解 //本文几乎涵盖了and和or所有知识点,篇幅较长,一点要静下心来看,学无止境. 1.and和or的含 ...

  2. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

  3. Python的零基础超详细讲解(第七天)-Python的数据的应用

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  4. Python的零基础超详细讲解(第五天)-Python的运算符

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  5. 柱底反力求和lisp软件_AutoLISP详细讲解

    AutoLISP 详细讲解 关于 AutoLISP AutoLISP 是由 Autodesk 公司开发的一种 LISP 程序语言( LISP 是 List Processor 的缩 写) . 第一篇关 ...

  6. matlab 符号表达式 系数 小数,matlab符号表达式系数

    1数学符号 matlab符号表达式系数: 数学符号,缺失:matlab表达式系数2838/9 数学符号归类,包含运算符号.比较符号.几何符号.代数符号.常用分数.积分等各种符号. 数学符号 ﹢﹣×÷± ...

  7. 内存超频时序怎么调_电脑内存条专业科普,内存选购、内存品牌、内存安装、内存时序体质、内存超频频率详细讲解...

    有很多兄弟经常问,什么牌子的内存条好啊?我用PS.剪辑软件需要多大内存条?内存条怎么超频啊? 所以,今天我们来详细讲解一下内存条. 一.什么是内存条? 内存条又叫随机存取存储器(英文缩写RAM),是与 ...

  8. C语言答案解析,C语言题库带详细讲解答案解析.doc

    C语言题库带详细讲解答案解析.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

  9. PHP 操作redis 详细讲解

    2019独角兽企业重金招聘Python工程师标准>>> Redis 菜鸟教程学习网址 http://www.runoob.com/redis/redis-install.html 挺 ...

最新文章

  1. 41-高级路由:BGP AS长度:接收一切、最大AS长度、不比较AS长度
  2. 在Python中用Selenium执行JavaScript
  3. tensorflow tf.ConfigProto() (配置tf.Session的运算方式)(allow_soft_placement、inter_op_parallelism_threads等)
  4. Hadoop 2.x 完全分布式HA集群环境搭建
  5. linux内存管理分析 二,linux内存管理分析【二】
  6. 新0-Day漏洞或将给Linux桌面发行版带来浩劫
  7. java开源服务框架_Java框架服务
  8. spring5.x cxf3.4.x 服务端和客户端 非maven版本
  9. python把字符串3des加密_Python干货之六大密码学编程库
  10. php mb开启,windows环境下如何为php开启mb_string函数库功能
  11. GIS案例练习-----------第三天
  12. 09-1.部署 coredns 插件
  13. redis命令行技术文档。命令教程
  14. 使用Exchange 2007搭建多域名邮件系统
  15. 计算机无法打印图片,电脑中打印机可以打印文档却无法打印图片如何解决
  16. 【机器学习】DBSCAN聚类算法
  17. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
  18. 【黑灰产犯罪研究】网络水军
  19. 假设web应用的文档根目录为MyApp,那么可以从哪里找到database.jar文件。
  20. MySQL 必知必会系列(五)

热门文章

  1. ESP-8266 WIFI中继技术交流
  2. opencv---图像基本函数使用
  3. DNS(域名解析协议)详解
  4. 非对称加密算法-DH算法
  5. CSDN图片去掉水印
  6. 2023.1.31 机械系统中应用的零部件
  7. myos1 大学生利用C++构建一个完整的操作系统打印helloworld
  8. 大数据赋能,如何精细化运营?
  9. 2023年4月《中国数据库行业分析报告》正式发布(含精彩内容概览)
  10. hash % n 为什么等于 (n - 1) hash