第六部分 符号計算
1.符号常量和符号變量
建立的這個符号對象可以用class()函數來檢測其資料類型。用sym()函數建立符号變量的一般格式為:
sym(常量) %建立符号常量
sym(常量,參數) %把常量按“參數”指定的格式轉換為符号常量
例:定義符号常量1/3,并判斷變量類型
>> a=1/3;
>> b=sym(1/3); %定義1/3為符号常量
>> c=class(a) %查詢a的常量類型
c =
double
>> d=class(b) %查詢b的常量類型
d =
sym
2.定義符号變量
(1)用sym()函數定義符号變量
格式:
sym(‘varname’,parameter)
sym(expression)
其中,varname表示建立符号變量的名稱;expression表示符号表達式。parameter可以用來設定限定符号變量的數學特性,可以選擇為poasitive、real和unreal,分别表示正數、實數和負實數。
例.做符号計算:
式中a,b,x,y均為符号常量。在符号運算前,應先将變量a,b,x,y定義為符号常量
>> a=sym('a')
a =
a
>> a=sym('a');
>> b=sym('b');
>> x=sym('x');
>> y=sym('y');
>> [x,y]=solve(a*x-b*y-3,a*x+b*y-8,x,y)
x =
11/(2*a)
y =
5/(2*b)
(2)使用syms()函數定義符号常量
格式:
syms(‘arg1’,’arg2’,...,參數) %把字元常量定義為符号常量
syms arg1 arg2 ...參數 %把字元變量定義為符号變量的簡潔形式
(3)預設符号變量
編号 | 符号表達式 | 預設符号變量 | 編号 | 符号表達式 | 預設符号變量 |
1 | a*x^3+b*x+c | x | 4 | 18*a+b | b |
2 | 1/(3+cos(t)) | t | 5 | 2*i | i |
3 | 10*x/y | x |
3.符号表達式
符号表達式例子
符号表達式 | MATLAB表達式 |
‘1/(3*x^n)’ | |
y=’1/sqrt(6*x)’ | |
‘cos(x^3)-sin(3*x)’ | |
M=sym(‘[1,2;3,4]’)a |
例:使用sym ()函數建立符号表達式f=ax+b
>> syms a x b
>> f=a*x+b
f =
b + a*x
4.符号表達式運算
(1)提取分子和分母
文法格式:[N,D]=numden(expression)
N為通分後的分子,D為通分後的分母
例:求符号表達式
的分子和分母
>> syms x y;
>> f=x/y+y/x;
>> [N,D]=numden(f)
N =
x^2 + y^2
D =
x*y
(2)标準代數運算
格式:
sym(expression1)+sym(expression2) %符号表達式加運算
sym(expression1)-sym(expression2) %符号表達式減運算
sym(expression1)*sym(expression2) %符号表達式乘運算
sym(expression1)/sym(expression2) %符号表達式除運算
例.給定符号表達式
和
,請給出兩個符号表達式進行加,減,乘,除運算的結果
>> f='2*x^2+3*x-5'
f =
2*x^2+3*x-5
>> g='x^2-x+7'
g =
x^2-x+7
>> sym(f)+sym(g)
ans =
3*x^2 + 2*x + 2
>> sym(f)-sym(g)
ans =
x^2 + 4*x - 12
>> sym(f)*sym(g)
ans =
(x^2 - x + 7)*(2*x^2 + 3*x - 5)
>> sym(f)/sym(g)
ans =
(2*x^2 + 3*x - 5)/(x^2 - x + 7)
(3)進階運算
a.使用compose()函數實作函數複合
格式:Expression3=compose(expression1,expression2)
例.給定表達式
和g=sin(x),請計算f(g(x))和g(f(x))的結果
>> syms x;
>> syms u v
>> f=1/(1+x^2)
f =
1/(x^2 + 1)
>> g=sin(x)
g =
sin(x)
>> h=1/(1+u^2)
h =
1/(u^2 + 1)
>> k=sin(v)
k =
sin(v)
>> compose(f,g)
ans =
1/(sin(x)^2 + 1)
>> compose(g,f)
ans =
sin(1/(x^2 + 1))
>> compose(h,k,'u','v')
ans =
1/(sin(v)^2 + 1)
b.使用finverse()函數求反函數
格式:finverse(expression1,varname)
varname為自變量,expression為符号表達式。finverse()函數對指定自變量varname的函數expression1(varname)求反函數,當varname省略,則對預設的自由符号變量求反函數
例:求1/x,
和ax+b的逆函數
>> syms a b
>> finverse(1/x)
ans =
1/x
>> finverse(x^2)
ans =
x^(1/2)
>> finverse(a*x+b)
ans =
-(b - x)/a
(4)使用symsun()函數對級數求和
文法格式:
r=symsum(s) %對符号表達式s中的預設符号變量k從0到k-1求和
r=symsum(s,v) %對符号表達式s中的指定符号變量v從0到v-1求和
r=symsum(s,a,b) %對符号表達式s中的指定符号變量v從a到b求和
r=symsum(s,v,a,b) %對符号表達式s中的預設符号變量k從a到b求和
例:求級數1/12+1/22+1/32+1/42+...的和及其前10項的部分和
>> syms k
>> symsum(1/k^2,1,inf)
ans =
pi^2/6
>> double(ans)
ans =
1.6449
5.符号微分和積分
a.符号極限limit
指令格式 | 說明 |
limit(expression,x,a) | 計算符号表達式x→a時,F的極限值 |
limit(expression,a) | 計算符号函數F的極限值,因未指定F的自變量,用該格式時,變量為findsym确定預設自變量,即預設自變量→a |
limit(expression) | 計算符号函數F的極限值,變量findsym确定的預設變量;在未指定目标值時,預設變量趨近于0 |
limit(expression,x,a,’left’) | 計算當x→a時函數F的左極限 |
limit(expression,x,a,’right’) | 計算當x→a時函數F的右極限 |
例.求
的左右極限
>> syms x t;
>> limit(1/x,x,0,'right')
ans =
Inf
>> limit(1/x,x,0,'left')
ans =
-Inf
b.符号微分
指令格式 | 說明 |
diff(f,v,n) | 表示以v為變量,對符号表達式f求n階微分 |
diff(f,v)或diff(f,sym(‘v’)) | 表示以v為自變量,對符号表達式f求一階微分 |
diff(f,n) | 表示根據findsym訓示的預設變量對符号表達式f求n階微分 |
diff(f) | %表示沒有指定微分變量和微分階數,則按findsym訓示的預設變量對符号表達式f求一階微分 |
例.使用符号運算計算
>> f=sym('t^8')
f =
t^8
>> diff(f,8)
ans =
40320
(3)符号積分
指令格式 | 說明 |
int(f,’v’,a,b) | 表示以v為變量,對符号表達式f求a到b的定積分 |
int(f,’v’)或int(f,’v’) | 表示v為自變量,對符号表達式f求不定積分 |
int(f,a,b) | 根據findsym訓示的預設變量對符号表達式f求a到b的定積分 |
int(f) | 按findsym訓示的預設變量對符号表達式f求不定積分。如果f是常數,積分将針對x |
例.分别計算表達式
和
對α的積分
>> syms x x1 alpha u t;
>> int(1/(1+x^2))
ans =
atan(x)
>> int(sin(alpha*u),alpha)
ans =
-cos(alpha*u)/u
6.方程求解
(1)求解代數方程組
格式:
g=solve(equation)
g=solve(equation,var)
g=solve(equation1,equation2,..,equationn)
g=solve(equation1,equation2,..,equationn,var1,var2,..varn)
例.求解
>> syms x
>> f=x^2-1;
>> solve(f)
ans =
1
-1
(2)單個微分方程
格式:
r=dsplve(‘eq1,eq2,...’,’cond1,cond2,...’,’var’)
r=dsplve(‘eq1’,’eq2’,...’,’cond1’,’cond2’,...’,’var’)
例.求解微分方程f’=f+cos(t)
>> dsolve('Df=f+cos(t)')
ans =
sin(t)/2 - cos(t)/2 + C5*exp(t)
(3)微分方程組
例.求解微分方程組x’=y,y’=x
>> A=dsolve('Dx=y','Dy=-x')
A =
y: [1x1 sym]
x: [1x1 sym]
>> A.x
ans =
C6*cos(t) + C7*sin(t)
>> A.y
ans =
C7*cos(t) - C6*sin(t)
7.線性代數和矩陣
(1)符号矩陣的建立
a.用字元串直接建立矩陣
例:
>> A=['[ a,2*b]';'[3*a, 0]']
A =
[ a,2*b]
[3*a, 0]
b.用sym()函數建立矩陣
例:
>> A=sym('[ a,2*b;3*a, 0]')
A =
[ a, 2*b]
[ 3*a, 0]
c.用syms()函數建立矩陣
格式:syms arg1 arg2...參數
A=[]
例:
>> syms a b
>> A=[a,2*b;3*a,0]
A =
[ a, 2*b]
[ 3*a, 0]
d.将數值矩陣轉化成符号矩陣
例.已知數值矩陣[2/3,sqrt(2);5.2,log(3)],試将該矩陣裝換為符号矩陣
>> B=[2/3,sqrt(2);5.2,log(3)]
B =
0.6667 1.4142
5.2000 1.0986
8.符号矩陣相關函數
(1)矩陣變換函數
函數名稱 | 函數功能說明 |
flipud(A) | 将矩陣A上下翻轉 |
fliplr(A) | 将矩陣A左右翻轉 |
flidim(A,dim) | 将矩陣A沿特定dim維翻轉 |
rot90(A) | 将矩陣A逆時針旋轉90度 |
reshape(A,M,N) | 将矩陣A變維成M*N階的 |
(2)矩陣運算函數
函數名稱 | 函數功能說明 | 函數名稱 | 函數功能說明 |
chol | 矩陣的Cholesky分解 | logm() | 矩陣的對數函數 |
cond | 矩陣的條件數 | lu() | 矩陣的LU分解 |
condieg | 對應于特征值的條件數 | svd() | 矩陣的奇異值分解 |
det | 方陣的行列式值 | norm() | 向量矩陣的範數 |
eig | 矩陣的特征值分解 | squtm() | 矩陣的平方根 |
expm | 矩陣的指數函數 | subspace() | 子空間的夾角 |
funm | 計算矩陣的函數值 | jacobian() | 求矩陣的jacobian矩陣 |
inv | 求矩陣的逆矩陣 | jordan() | 求矩陣的jordanb标準型 |
rank | 矩陣的秩 | qr() | 矩陣的QB分解 |
orth | 矩陣的列空間 |