Alex_McAvoy

想要成为渔夫的猎手

Matlab 符号类型

【符号类型(sym)】

符号类型是一种数据结构,封装了存储代表符号表达式的类型,符号表达式可以是单独的变量,也可以是变量和常量的组合,甚至可以是一个函数。

  • var=sym(A,flag)
    • 关于 varvar 是符号对象的名,命名规则与普通变量相同,只是不能超过 31 位
    • 关于 A
      • A 是标量、矩阵、数值表达式:var 将是 A 转换成的符号对象
      • A 是字符串:var 将是该字符串转换成的符号对象
    • 关于 flag:转换成的符号对象应该符合的格式
      • A 为数值时:
        • 'r':默认值,最接近的有理表示形式
        • 'd':最接近的十进制浮点精确表示
        • 'e':带误差估计的有理表示
      • A 为字符串时:
        • 'real':限定 A 为实型符号变量
        • 'positive':限定 A 为正的实型符号变量
    • 说明:由于版本更新问题,日后的版本将移除掉 A 为字符串的情况,因此不建议使用字符串的方式来创建符号变量
  • syms a b c ... flag:创建多个符号对象 a b c ...
    • 创建多个符号对象时,中间用空格间隔
    • 符号对象 a b c ... 只是符号,没有值
    • 格式标志 flagsym(A,flag) 相同

【符号运算中的运算符】

算术运算符

符号运算中的算术运算符与数值运算中的算术运算符操作方法相同

详见:矩阵基础操作-7.矩阵运算与数组运算的对比

关系运算符

在符号运算中,关系运算符只有两个:

  • ==:对运算符两边的符号对象进行比较,若相等返回 1,若不等返回 0(相等比较)
  • ~=:对运算符两边的符号对象进行比较,若不相等返回 1,若相等返回 0(不相等比较)

注:在脚本中使用

逻辑运算符

符号运算中的算术运算符与数值运算中的算术运算符操作方法基本相同:

  • 对于符号方程来说,会返回逻辑值 FALSETRUE
  • 对于符号表达式来说,会返回包含逻辑值的符号表达式
1
2
3
4
5
6
7
8
9
10
11
% 符号方程
>> a=sym(1),b=sym(2)
>> a & b
ans =
TRUE

% 符号表达式
>> syms a b
>> a&b
ans =
a & b

【变量确定】

对于符号对象来说,其可以表示符号变量和符号常量,当需要查找一个符号表达式中的符号变量时,可以利用以下方法:

  • symvar(S):返回符号表达式 S 中的所有符号变量
  • symvar(S,n):返回符号表达式 S 中距离符号 xX 最接近的 n 个符号变量(最近是依据 ASCII 码来判断的)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>> syms a b x y
>> f=sym(a^4+b^3+x^2+y)
>> symvar(f)
ans =
[ a, b, x, y]

>> symvar(f,1)
ans =
x

>> symvar(f,2)
ans =
[x, y]

>> symvar(f,3)
ans =
[x, y, b]

【精度计算】

符号类型最大特点是计算过程中不会出现舍入误差,因此可以得到任意精度的数值解。

在希望计算结果精确时,可以牺牲计算时间与存储空间,利用符号运算来获得足够高的计算精度。

符号运算的结果从形式上来看是数值,但变量类型本质上是字符串,因此要从精确解中得到任意精度的解,需要利用以下函数,来进行精度计算改变默认精度,获得所需精度的数值解。

  • digits(n):调用该函数后,近似解的精度会变为 d 位有效数字,默认值为 32
  • vpa(A,d):将符号解 A 的精度设为有效 d 位有效数字,默认值为 32
  • double(A):将符号变量 S 转为双精度矩阵
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>> syms x
>> f=sym('2*x^2+3*x-4')
>> vpa(f)
ans =
2.0*x^2 + 3.0*x - 4.0
>> s=solve(f)
s =
- 41^(1/2)/4 - 3/4
41^(1/2)/4 - 3/4
>> digits(4);
>> vpa(s)
ans =
-2.351
0.8508
>> vpa(s,6)
ans =
-2.35078
0.850781
感谢您对我的支持,让我继续努力分享有用的技术与知识点!