一、MATLAB符号计算概述
MATLAB符号计算是通过集成在MATLAB中的符号数学工具箱(Symbolic Math Toolbox)来实现的
这个工具箱是建立在Maple基础上,当进行MATLAB符号运算时,他就会请求Maple软件去计算并将结果返回给MATLAB
其主要功能包括
- 符号表达式的计算与复合、化简
- 符号矩阵的运算
- 符号微积分
- 符号函数画图
- 符号代数方程求解
- 符号微分方程求解
- 支持符号运算并返回指定的精度结果
二、符号对象和符号表达式
符号数学工具箱中定义了一个新的数据类型,叫做sym类
sym类的实例就是符号对象,它是一种数据结构,可以用来存储代表符号的字符串的复杂数据结构
符号表达式是符号变量或常量的组合,在某些情况下,符号变量和符号常量也可以被认为是符号表达式,其创建方式仍是使用函数sym
1.符号对象的创建命令
作为符号对象的符号常量、符号变量、符号函数及符号表达式,可以使用函数命令sym()、syms()规定和创建,利用class()函数可以测试建立的操作对象为何种操作对象类型
1.函数命令sym()
- variable = sym(A, flag)
- S = sym(‘A’, flag)
命令公式是由A来创建一个符号对象varable,其类型为sym。若A(不带单引号)是一个数字、数值矩阵或数学表达式,则输出结果是将数值结果对象转换成的符号对象。若A(带单引号)是一个字符串,输出结果则是将字符串转换成的符号对象
flag为转换符号对象的格式
A不带引号时
- d:最接近的十进制浮点精确表示
- e:带(数值计算时)估计误差的有理表示
- f:十六进制浮点表示
- r:为默认值时,最接近有理表示的形式
A带引号时
- positive:限定A为正的符号变量类型
- real:限定A为实型符号变量类型
2.函数命令syms()
- syms a b c flag
该命令可以建立3个或多个符号变量。flag同上
2.符号对象的创建
1.创建符号常量
1 2 3 4 5 |
>> r = sym(2/3,'d') r = 0.66666666666666662965923251249478 |
2.创建符号变量
1 2 3 4 5 6 7 8 9 10 11 |
>> y = sym('x','positive') y = x >> class(y) ans = sym |
3.创建符号表达式
符号表示式分为两类:不带等号的称为符号函数,带等号的称为符号方程
1 2 3 4 5 6 7 8 9 10 11 |
>> f = sym('a*x^4 + b*x^3 + c*x^2 + d*x + e') 警告: Support of strings that are not valid variable names or define a number will be removed in a future release. To create symbolic expressions, first create symbolic variables and then use operations on them. > In sym>convertExpression (line 1536) In sym>convertChar (line 1441) In sym>tomupad (line 1198) In sym (line 177) f = a*x^4 + b*x^3 + c*x^2 + d*x + e |
警告内容为:在将来的版本中,将删除无效变量名或定义数字的字符串的支持。要创建符号表达式,首先创建符号变量,然后在它们上使用操作。
1 2 3 4 5 |
>> e = sym('x^2 = 1') e = x^2 == 1 |
1 2 3 4 5 6 7 8 9 10 11 12 |
>> syms a b c d e x >> f = a*x^4 + b*x^3 + c*x^2 + d*x + e f = a*x^4 + b*x^3 + c*x^2 + d*x + e >> class(f) ans = sym |
4.创建符号矩阵
1 2 3 4 5 6 7 8 |
>> syms x y; >> m = [1, 2+x 1; 2+x, 1, 3+y; 3+y, 1,0] m = [ 1, x + 2, 1] [ x + 2, 1, y + 3] [ y + 3, 1, 0] |
注意,此处MATLAB不会自动补全矩阵,例子中的0元素需要手动输入,不输入则会报错
3.符号计算中的运算符与函数
与数值计算中作用相同
1.算术运算符号
+、 -、 *、 /、 \、 ^
.* 、 ./ 、 .\ 、 .^
‘ .’
2.关系运算符
==
~=
3.指数、对数函数
sqrt、 exp、 expm
log2、 log10
4.三角函数、双曲函数及其反函数
除atan2函数只能用于数值计算之外,其他的三角函数、双曲函数及其反函数都可用,且用法、作用一致
5.复数函数
共轭(conj)、实部(real)、虚部(imag)、模(abs),与数值计算一致
6.矩阵代数函数
符号计算中,常用的矩阵代数函数有:diag、 triu、 tril、 inv、 det、 rank、 rref、 null、 colspace、 poly、 expm、 eig、 svd
除svd函数之外,其余函数与数值计算一致
4.符号表达式的变量确定
findsym函数可以帮助用户查找一个符号表达式中的符号变量
- findsym(S)
- findsym(S, N)
返回符号表达式中所有符号变量;N为需要返回符号变量的个数,其返回顺序符合定义顺序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>> syms a b c d e x >> f = a*x^4 + b*x^3 + c*x^2 + d*x + e f = a*x^4 + b*x^3 + c*x^2 + d*x + e >> findsym(f,2) 警告: FINDSYM will be removed in a future release. Use SYMVAR instead. > In sym/findsym (line 27) ans = x,e |
警告内容:FIFSEM将在将来的版本中被删除。用SimVar代替。
5.符号精度计算
符号计算的显著特点是:由于计算过程中不会出现舍入误差,因此可以得到任意精度的数值解
若需要得到精确结果,需要牺牲计算时间与储存空间,用符号计算来获得足够高的计算精度
- digits(d):调用该函数后的近似解的精度变成d位有效数字。d默认值为32位
- vpa(A,d):求符号解A的近似值,该近似解的有效位数由d决定
- double(A):把符号矩阵或任意精度表示的矩阵A转换为双精度矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
>> sym x; >> f = sym(' 2*x^2 + 3*x -4'); >> s = solve(f) s = 41^(1/2)/4 - 3/4 >> digits(4); >> vpa(s) ans = 0.8508 >> vpa(s,6) ans = 0.850781 |
转载请注明:燕骏博客 » MATLAB自学笔记(十九):符号对象和符号表达式
赞赏作者微信赞赏支付宝赞赏