Matlab基礎(5)——符号運算
文章目錄
- Matlab基礎(5)——符号運算
- 建立符号表達式
- 符号矩陣運算
- 符号運算
- 代入/計算結果
符号運算是數值計算的擴充,在運算過程中以符号表達式或符号矩陣為運算對象,實作了符号計算和數值計算的互相結合,使應用更靈活。
建立符号表達式
建立符号表達式,需要先建立符号變量,再使用它們編寫表達式。
使用關鍵字
syms
建立符号變量:
syms a b c % 一次可以建立多個變量,變量之間隻能用空格銜接
syms A [3 4] % 建立符号矩陣
% A =
%
% [ A1_1, A1_2, A1_3, A1_4]
% [ A2_1, A2_2, A2_3, A2_4]
% [ A3_1, A3_2, A3_3, A3_4]
syms 'A%d%d' [2 2] % 可以通過占位符%d來改變預設格式
% A =
%
% [ A11, A12]
% [ A21, A22]
syms M 3 % 3階方陣
% M =
%
% [ M1_1, M1_2, M1_3]
% [ M2_1, M2_2, M2_3]
% [ M3_1, M3_2, M3_3]
先将變量建立好,才能将含有該變量字元串轉化為符号表達式
syms x
str = 'x^3+2*x+1'; % 不識别2x,即*不可省略
S = eval(str); % 将字元串轉化為符号表達式
% S =
%
% x^3 + 2*x + 1
也可以通過多項式部分提到的函數
ploy2sym(p)
,将系數向量轉化為符号表達式
P = [1 2 2 1];
S = poly2sym(P);
% S =
%
% x^3 + 2*x^2 + 2*x + 1
可以通過函數
sym(A)
将矩陣轉化為符号表達式
sym
格式。隻有符号表達式可以與符号表達式計算,數值表達式無法直接與符号表達式進行計算。
A = ones(2,3);
S = sym(A) % 2*3 sym
% S =
%
% [ 1, 1, 1]
% [ 1, 1, 1]
使用
sym()
函數處理數值表達式時,應從盡量小的機關入手,以免産生精度上的誤差,如
>> 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預設符号屬于複數,在使用
'
求轉置時,會自動求出共轭轉置。是以若隻想求轉置,應該使用
.'
syms 'A%d%d' [2 3]
% A =
%
% [ A11, A12, A13]
% [ A21, A22, A23]
B = A.'
% B =
%
% [ A11, A21]
% [ A12, A22]
% [ A13, A23]
行列式
syms 'A%d%d' 2
% A =
%
% [ A11, A12]
% [ A21, A22]
d = det(A)
% d =
%
% A11*A22 - A12*A21
求逆
inv(A); % A必須是方陣,結果用A中元素表示
求秩
rank(A); % 傳回一個整數
其他
函數 | 說明 |
| 求矩陣的逆,結果用中的元素表示 |
| 求矩陣的秩,傳回一個整數 |
| 求特征值、特征向量 |
| 奇異值分解 |
| Jordan标準形運算 |
符号運算
因式分解
使用函數
factor(S)
實作
S = poly2sym([1 3 2]); % S = X^2+3*x+2
factor(S)
% ans =
%
% [ x + 2, x + 1]
也可用于質因數分解
S = sym(276);
factor(S) % [2 2 3 23]
表達式展開
syms x
S = eval('(x+1)*(x+2)');
expand(S) % x^2 + 3*x + 2
也可以用于三角函數、指數函數、對數函數的展開
syms x y
S = eval('sin(x+y)');
expand(S) % cos(x)*sin(y) + cos(y)*sin(x)
表達式化簡
syms x
S = eval('sin(x)^2+cos(x)^2');
simplify(S) % x+1
syms x y
S = eval('1/x+1/y');
[n, d] = numden(S)
% n - 分子 n=x+y
% d - 分母 d=x*y
代入/計算結果
syms F m a Ff
str = 'Ff+F';
S = eval(str);
S = subs(S,F,a*m) % 用a*m代換F
% S =
%
% Ff + a*m
res = subs(S,[a m Ff],[2 10 15]) % 分别給[a m Ff]指派為[2 10 15]
% res =
%
% 35