MATLAB 符号表达式与运算全面详细讲解

这篇具有很好参考价值的文章主要介绍了MATLAB 符号表达式与运算全面详细讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 函数能够将数据的值进行精确的保留,不必要担心计算机计算的误差等问题。
例如,当计算 1 123467 ∗ 3 4 \frac{1}{123467} * \frac{3}{4} 123467143 时,我们想要的是准确的分数形式,但是直接输入的话会导致答案成为浮点形式,这时使用 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函数使用。


计算 π ∗ e 2 \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 ) = c o s 1 + s i n 1 f(x) = cos1+sin1 f(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 = x 3 + x 2 − x − 1 f=x^3+x^2 - x - 1 f=x3+x2x1

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 ) 4 f=(x + y)^4 f=(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 = − a x e − c x + b e − c x f=-axe^{-cx} + be^{-cx} f=axecx+becx的同类项进行合并。
注意,该题下如果不指定合并的项数,那么其将不会进行合并,因为没有除了数值外相同的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 为符号表达式.


化简函数 e 1 = c o s 2 x + s i n 2 x e_1= cos^2x + sin^2x e1=cos2x+sin2x e 2 = e c ∗ l n ( a + b ) e_2= e^{c * ln(a + b)} e2=ecln(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 = x k y + y p x f = \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 = − a x 4 + b x 3 − c x 2 + x + d f = -ax^4+bx^3-cx^2+x+d f=ax4+bx3cx2+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 = a x + b f = ax+b f=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))文章来源地址https://www.toymoban.com/news/detail-491734.html

到了这里,关于MATLAB 符号表达式与运算全面详细讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 正则表达式之ip地址匹配(详细讲解)

    在练习之前,需要大家知道一些基本知识,如果有一定基础的可以跳过该步骤,直接往下看。 正则表达式-字符类 正则表达式-逻辑运算符 正则表达式-预定义字符 正则表达式-数量词 题目要求:使用正则表达式匹配192.11.23.69 须知:ip地址的范围为0.0.0.0-255.255.255.255 接下来我们直

    2024年01月17日
    浏览(42)
  • 初始C语言(6)——详细讲解表达式求值以及其易错点

     第一章 “C“浒传——初识C语言(1)(更适合初学者体质哦!)  第二章 初始C语言(2)——详细认识分支语句和循环语句以及他们的易错点   第三章 初阶C语言(3)——特别详细地介绍函数  第四章 初始C语言(4)——详细地讲解数组的内容以及易错点  第五章 初

    2024年02月12日
    浏览(37)
  • Golang通过栈实现表达式运算(中缀表达式转后缀表达式解析语法)

    需求背景:将string表达式数组 [title == AUSU ( header == Wecome || brand != AC68U )] 解析并使用ES查询得到运算结果。 分析:带有括号的表达式,需要根据优先级解析,可将中缀表达式转换为后缀表达式,去除括号

    2024年02月14日
    浏览(48)
  • qt lamda表达式及捕获变量列表符号说明及示例

    最近发现很多人都喜欢用Lamda表达式了,至于他们到底知不知道自己用的是什么意思,那就另说了。 虽然我个人并不太喜欢,因为很多地方没法像以前信号和槽那样清晰了,而且很多生成UML的软件估计也不支持解析转成对应的序列图啥的。 但是这个lamda写法确实挺方便的。用

    2024年02月12日
    浏览(34)
  • JS正则验证密码 英文大小写+数字+特殊符号 的表达式。

    我处理的密码策略如下: 包括大写字母、小写字母、数字和符号,这 4 种字符中的 3 种 可以使用四种类型的字符:大写字母、小写字母、数字和密码。 字符数至少为 8位 使用的符号是“!@;:”(实际上,可以根据自己的情况来指定,我省略了它,因为它可变) 生成的正则

    2024年02月07日
    浏览(96)
  • Matlab错误:表达式无效。请检查缺失的乘法运算符、缺失或不对称的分隔符或者其他语法错误。要构造矩阵,请使用方括号而不是圆括号。

    错误:表达式无效。请检查缺失的乘法运算符、缺失或不对称的分隔符或者其他语法错误。要构造矩阵,请使用方括号而不是圆括号。 原因:选中了matlab右侧工作区的变量空间,叉掉去即可。  

    2024年02月16日
    浏览(63)
  • 运算符、表达式和内置对象

    一、实验目的 1.会使用IDLE编辑器编写简单数据类型; 2.掌握常量、变量的表示方式和简单操作; 3.掌握Python语言中基本的输入和输出方法; 4.掌握Python语言的各种运算符以及这些运算符的表达式; 5.掌握字符串类型的格式化方法; 6.能综合应用所学基础知识编写一些基本的程

    2024年02月07日
    浏览(63)
  • 1.4. 运算符与表达式

    在 Java 中,运算符是用于执行特定操作的符号,而表达式是由变量、常量和运算符组成的一段代码,用于计算值。本节将介绍 Java 中的常用运算符和表达式的使用。 1.4.1. 算术运算符 Java 支持以下算术运算符: 加法( + ) 减法( - ) 乘法( * ) 除法( / ) 取模(求余数)(

    2024年02月06日
    浏览(55)
  • 3.3 运算符和表达式

    几乎每一个程序都需要进行运算,对数据进行加工处理,否则程序就没有意义了。要进行运算,就需规定可以使用的运算符。C语言的运算符范围很宽,把除了控制语句和输入输出以外几乎所有的基本操作都作为运算符处理,例如将赋值符“=”作为赋值运算符、方括号作为下

    2024年02月11日
    浏览(46)
  • c语言运算符表达式

    算数运算符: 用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(–)共七种。 加加在后,先计算表达式的结果在计算变量的值 a++; 加加在前,先计算变量的值在进行表达式的计算 ++a; int a=10; 将10赋值给整型变量a //a+=3;等同于 a=a+3;

    2024年02月08日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包