Matlab系列教程5-符号运算,包括符号表达式的创建,符号矩阵运算,符号运算及带入求值的基本操作。
符号运算是数值计算的扩展,在运算过程中以符号表达式或符号矩阵为运算对象,实现了符号计算和数值计算的相互结合,使应用更灵活。
创建符号表达式
创建符号表达式,需要先创建符号变量,再使用它们编写表达式。
使用关键字syms
创建符号变量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| syms a b c syms A [3 4]
syms 'A%d%d' [2 2]
syms M 3
|
先将变量创建好,才能将含有该变量字符串转化为符号表达式
1 2 3 4 5 6
| syms x str = 'x^3+2*x+1'; S = eval(str);
|
也可以通过多项式部分提到的函数ploy2sym(p)
,将系数向量转化为符号表达式
1 2 3 4 5
| P = [1 2 2 1]; S = poly2sym(P);
|
可以通过函数sym(A)
将矩阵A转化为符号表达式sym
格式。只有符号表达式可以与符号表达式计算,数值表达式无法直接与符号表达式进行计算。
1 2 3 4 5 6
| A = ones(2,3); S = sym(A)
|
使用sym()
函数处理数值表达式时,应从尽量小的单位入手,以免产生精度上的误差,如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| >> sym(1/1234567) ans = 7650239286923505/9444732965739290427392 >> 1/sym(1234567) ans = 1/1234567
>> sym(exp(pi)) ans = 6513525919879993/281474976710656 >> exp(sym(pi)) ans = exp(pi)
|
符号矩阵运算
转置
Matlab默认符号属于复数,在使用'
求转置时,会自动求出共轭转置。因此若只想求转置,应该使用.'
1 2 3 4 5 6 7 8 9 10 11 12 13
| syms 'A%d%d' [2 3]
B = A.'
|
行列式
1 2 3 4 5 6 7 8 9 10
| syms 'A%d%d' 2
d = det(A)
|
求逆
求秩
其他
函数 |
说明 |
inv(A) |
求矩阵的逆,结果用A中的元素表示 |
rank(A) |
求矩阵的秩,返回一个整数 |
eig(A) |
求特征值、特征向量 |
svd(A) |
奇异值分解 |
jordan(A) |
Jordan标准形运算 |
符号运算
因式分解
使用函数factor(S)
实现
1 2 3 4 5
| S = poly2sym([1 3 2]); factor(S)
|
也可用于质因数分解
表达式展开
1 2 3
| syms x S = eval('(x+1)*(x+2)'); expand(S)
|
也可以用于三角函数、指数函数、对数函数的展开
1 2 3
| syms x y S = eval('sin(x+y)'); expand(S)
|
表达式化简
1 2 3
| syms x S = eval('sin(x)^2+cos(x)^2'); simplify(S)
|
分式通分
1 2 3 4 5
| syms x y S = eval('1/x+1/y'); [n, d] = numden(S)
|
代入/计算结果
通过函数subs(S,old,new)
实现,返回值仍是sym
类型。
1 2 3 4 5 6 7 8 9 10 11 12 13
| syms F m a Ff str = 'Ff+F'; S = eval(str); S = subs(S,F,a*m)
res = subs(S,[a m Ff],[2 10 15])
|