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

本文详细介绍了MATLAB中如何使用sym和syms函数定义符号变量,包括单个和多个变量的定义,以及如何保留真实数据。此外,还讲解了如何使用subs函数进行符号代换,控制精度的方法,以及factor、expand、collect、simplify、numden、horner、finverse和compose等函数在符号表达式中的应用,展示了各种函数的具体用法和示例。

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</

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值