天天看點

MATLAB之符号計算

第六部分 符号計算

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,分别表示正數、實數和負實數。

例.做符号計算:

MATLAB之符号計算

式中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表達式
MATLAB之符号計算
‘1/(3*x^n)’
MATLAB之符号計算
y=’1/sqrt(6*x)’
MATLAB之符号計算
‘cos(x^3)-sin(3*x)’
MATLAB之符号計算
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為通分後的分母

例:求符号表達式

MATLAB之符号計算

的分子和分母

>> 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) %符号表達式除運算

例.給定符号表達式

MATLAB之符号計算

MATLAB之符号計算

,請給出兩個符号表達式進行加,減,乘,除運算的結果

>> 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)

例.給定表達式

MATLAB之符号計算

和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,

MATLAB之符号計算

和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的右極限

例.求

MATLAB之符号計算

的左右極限

>> 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求一階微分

例.使用符号運算計算

MATLAB之符号計算
>> 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

例.分别計算表達式

MATLAB之符号計算

MATLAB之符号計算

對α的積分

>> 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)      

例.求解

MATLAB之符号計算
>> 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 矩陣的列空間

繼續閱讀