昆明理工大學上機安排3-符號計算_第1頁
昆明理工大學上機安排3-符號計算_第2頁
昆明理工大學上機安排3-符號計算_第3頁
昆明理工大學上機安排3-符號計算_第4頁
昆明理工大學上機安排3-符號計算_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、符號計算學習要點MATLAB的符號數學工具箱(Symbolic Math Toolbox)將符號運算結合到MATLAB的數值運算環境中。符號數學工具箱是以Maple軟件內核為符號運算的引擎,當MATLAB進行符號運算時,就轉入Maple去計算并將結果返回到MATLAB的命令窗口。符號數學工具箱與其它工具箱不同,它不針對特殊專業或專業分支,而適用于廣泛的用途;它使用字符串來進行符號分析,而不是數值分析。它涉及微積分、簡化、復合、求解代數方程及微分方程等,有豐富的線性代數工具,支持Fourier,Laplace,z變換及逆變換。符號計算是數字運算的自然擴展,其特點包括: 不受計算誤差的困擾; 計算

2、可以給出完全正確的封閉解或任意精度的數值解; 計算的指令比較簡單,所需要的時間較長。自然科學理論分析中的公式、關系式及其推導是符號計算要解決的問題。數值計算與符號計算的區別:MATLAB數值計算的對象是數值,而符號計算的對象則是非數值的符號字符串。例:下面的代數方程的的根推導說明了符號計算的特點:(以下例子要在計算機上運行,分析其結果;有些程序可能標點符號是在中文狀態下輸入的,請復制時改為英文狀態下的標點) 一 符號對象的創建函數sym()和命令syms創建符號常量、變量、函數以及表達式,函數class()檢驗符號對象類型。sym函數的用處之一是創建單個的符號變量。這種創建方式不需要在前面有任

3、何說明,使用非常快捷。正因如此,此創建過程中,包含在表達式內的符號變量并未得到說明,也就不存在于工作空間。syms函數與sym相反,它需要在具體創建一個符號表達式之前,將這個表達式所包含的全部符號變量創建完畢。1 符號對象的生成符號計算工具箱定義了一種新的MATLAB數據類型,叫做符號對象。在MATLAB內部,符號對象的數據存儲格式是符號字符串。sym函數用于創建符號對象,包括符號常量、符號變量和符號表達式。【調用格式】 f = sym(arg) 把數值、字符串或者表達式arg轉換為符號對象f f = sym(argn, flagn) 把數值或者數值表達式argn轉換為flagn格式的符號對象

4、f = sym('argv', flagv) 把字符串'argv'按照flagv的格式轉換為符號對象syms argv1 argv2 . 定義argv1、argv2等為符號對象syms arg1 arg2 . flagv 定義arg1、arg2等為flagv格式的符號對象【說明】 1. 對于數值或者數值表達式argn,flagn可以取以下值: 'd' 最接近的十進制浮點精度表示'e' 帶估計誤差的有理表示'f' 十六進制浮點數表示'r' 最接近的有理表示,MATLAB的缺省表示方法2. 對于字符串變

5、量名argv,flagv可以取以下“限定”項: 'positive' “正實數”符號變量'real' “實數”符號變量'unreal' “非實數”符號變量3. syms是sym函數的簡化書寫方式,各符號對象之間只能用空格分開。2 符號常量用sym函數可以定義符號常量對象,包括符號標量對象和符號常量數組對象,定義符號常量對象的同時也可以指定數值常量的表示方法。例 符號常量的定義 >>a=1/3, sqrt(5), pi+sqrt(2); %定義數值數組>>s1=sym(1/3, sqrt(5), pi+sqrt(2), &#

6、39;d'); %用十進制方式表示符號常量>>s2=sym(1/3, sqrt(5), pi+sqrt(2); %用最接近的有理方式表示符號常量 >>s3=sym('1/3, sqrt(5), pi+sqrt(2)'); %絕對準確的符號數值表示,輸入為字符串3 符號變量與符號表達式1. 定義符號變量和符號表達式例 符號變量和符號表達式的定義 >> x = sym('x', 'real'); %定義實數符號變量x>> sym y real; %定義實數符號變量y >> z=x+i

7、*y; %定義符號表達式對象z >> conj(z) %符號變量求共軛復轉置>>f = z*conj(z); %符號表達式對象>> f=simple(f) %符號表達式對象化簡f = x2+y2 例 符號變量與符號矩陣>> syms a b c; %定義符號變量a,b,c >> A=a,b,c; b,c,a; c,a,b ; %定義符號矩陣A >> sum(A(:,1); %求矩陣A第一列的元素的和>> sum(A(1,:)=sum(A(:,2) %符號對象的關系運算>> det(A); %矩陣求行

8、列式>> syms alpha beta; %定義符號變量alpha和beta >> A(1,3)=beta; %矩陣元素賦值>> A=subs(A,a,alpha) %符號表達式的替換操作,矩陣A中的a用alpha代替以上例子可以看出:元素是符號對象的矩陣叫做符號矩陣;符號表達式是由以下部分組成的符號對象:a.符號常量;b.符號變量;c.符號運算符;d.專用函數。4 符號表達式中自變量的確定在數學表達式或者數學函數中,一般都含有自變量。為了便于進行數學運算,通常要顯示指定表達式中的自變量,如果不指定自變量,MATLAB會根據上下文關系,識別表達式中默認的自

9、變量(獨立自由的符號變量)。識別表達式中自變量的基本原則是:按照字母表中靠近小寫字母x的順序識別,最靠近字母x的變量被第一個識別為自變量。MATLAB還提供了自變量識別函數findsym。【調用格式】 findsym(exp) 識別表達式exp中所有的自由符號變量findsym(exp, n) 識別表達式exp中最靠近x的n個獨立自由變量【說明】 1. 表達式可以是符號矩陣,此時變量識別是對整個矩陣進行的。 2. 函數識別的是“獨立的”“自由的”符號變量,符號常量或者非獨立的符號變量無法被識別。3. 識別次序是按照靠近x的遠近進行的,區分大小寫,總認為大寫字母距離x的距離大于所有小寫字母。例

10、符號表達式中自變量的識別 >> syms a b x X Y; %定義符號變量 >> k=sym(2.5); >> z=sym('c*sqrt(alpha)+y*sin(beta)'); %定義符號表達式對象(變量)z >> exp=a*z*X+k*Y+bx %定義符號表達式變量exp exp = a*(c*alpha(1/2)+y*sin(beta)*X+5/2*Y+bx >> findsym(exp) %自動識別所有自由獨立變量,k為常量,z為非獨立 >>findsym(exp,3) %識別exp中前3

11、個靠近x的獨立自由變量5 符號數學函數在MATLAB中,可以定義表示數學函數的符號對象,既能建立具有詳細運算關系的函數,又能建立抽象數學函數。定義符號數學函數有2種方法: 1. 用符號表達式 2. 用函數M文件(在函數M文件中用符號變量作為輸入變量) 例 用符號表達式定義符號數學函數 >> syms x y z %定義函數自變量>> r = sqrt(x2 + y2 + z2); %定義函數r >> t = atan(y/x); %定義函數t >> f = sin(x*y)/(x*y); %定義函數f 例 用函數M文件來定義符號數學函數,下列代碼

12、定義了函數sin(x) =sinc(x)/x。創建M函數文件如下:function z = sinc(x) %SINC 符號函數% sin(x)/x 數學計算公式% 接受符號變量作為輸入變量if isequal(x,sym(0) %如果自變量值為符號0,則函數值為1 z = 1; else z = sin(x)/x; end 例 建立抽象的符號數學函數 (可用help命令查看subs、limit函數的用法)>> f = sym('f(x)') %建立抽象函數f(x) >> syms x h; >> df = (subs(f, x, x+h)

13、-f)/h %建立抽象函數df,表示f(x)的導數表達式df = (f(x+h)-f(x)/h >> g=subs(df, 'f', 'sin') %建立sin(x)的導數函數的定義 g = (sin)(x+h)-(sin)(x)/h >> limit(g,h,0) %根據導數定義,求sin(x)的導數 ans = cos(x)二 符號計算符號計算有:代數運算、函數運算、微積分運算、極限運算、級數求和、方程(組)求解等。A 代數運算符號對象的基本代數運算符號對象的基本代數運算和普通數值變量一樣,可以使用算術運算符、關系運算符(僅能用=和!

14、=),其運算符的定義和數值運算相同。例 符號矩陣的基本代數運算,查看結果>>syms t; >>G = cos(t), sin(t); -sin(t), cos(t); >>A = G*G; %符號矩陣的乘法>>A = simple(A); %化簡為最簡表達式>>I = G'. *G; %符號數組乘法>>I = simple(I); %化簡為最簡表達式>>F= cos(t), -sin(t); sin(t), cos(t); >>(F+G)/2; %符號矩陣加法和符號矩陣與標量的除法B 函數

15、運算數值計算使用的函數基本上也可以用于符號計算,包括三角函數(atan2除外)、指數函數、對數函數(log2、log10除外)、復數函數(angle除外)、線性代數函數和矩陣函數。例 符號矩陣的函數運算,運行下面語句 查看結果(去掉分號)>>H = hilb(3) ; %生成3×3的希爾伯特數值矩陣>>H = sym(H); %將數值矩陣轉為符號常數矩陣>>inv(H); %符號矩陣求逆>>det(H) %符號矩陣求行列式的值>>syms s >>H(1,1) = s; %將符號元素賦值為符號變量s,使矩陣變為非

16、奇異矩陣>>Z = det(H) %帶有符號變量的符號矩陣求行列式的值>>sol = solve(Z) %求行列式的根>>H = subs(H,s,sol); %將矩陣行列式的根代入符號矩陣,使矩陣變為奇異矩陣>>det(H); %奇異矩陣的行列式值>>inv(H); %奇異矩陣求逆>> eig(H); %符號矩陣的特征值C 符號表達式分解、展開與化簡 MATLAB提供了符號表達式的因式分解、展開和化簡函數。【調用格式】 collect(expr, v) 合并符號表達式expr中符號對象v的同類項系數expand(expr

17、) 對表達式expr進行多項式、三角函數、指數對數等函數展開factor(expr) 對符號表達式expr做因式分解horner(expr) 把多項式expr分解為嵌套形式n,d=numden(expr) 提取表達式最小分母公因子d和相應的分子多項式n simplify(expr) 用多種恒定變換對表達式expr進行綜合化簡simple(expr) 把expr化簡為最簡表達式【說明】上述表達式expr可以是符號矩陣,此時函數對符號矩陣的每個元素進行相應操作。例 符號表達式的展開和分解>>f=sym ('(x3-6*x2+10*x-5)+(x-1)'); %定義原始的

18、符號表達式 >> fc=collect(f); %符號表達式合并同類項>> ff=factor(f); %符號表達式因式分解>> fh=horner(f); %符號表達式的嵌套分解 >> fe=expand(fh); %符號表達式的展開 >> factor(1025); %正整數的質數分解,10255×5×41例 寫出矩陣 各元素的分子多項式和分母多項式 >> syms x; >> A=1/4, 1/(2*x-1)+1/(x+1); 2/(x2-1), 3*x+2; >> n,d

19、=numden(A); %提取表達式最小分母公因子d和相應的分子多項式n >> pretty(simplify(n./d); 例 化簡 解:用simplify進行多次化簡也得不到最簡結果,用simple化簡可以得到最簡結果>> syms x; >> f= (1+3/x+3/x2+1/x3)(1/3); >> sfy1=simplify(f); >> sfy2=simplify(sfy1); >> sp1=simple(f); >> sp2=simple(sp1) D 符號表達式的置換操作MATLAB提供了子表達

20、式的置換函數。通常在這幾種情況下使用子表達式的置換函數:第一,符號計算結果中多次出現同一個表達式,為了閱讀方便,可以把這個表達式用符號變量來置換;第二,可以用符號常量對象置換表達式中的自變量,實現表達式求值;第三,通過置換某些表達式可以生成新的表達式。 1.自動置換函數【調用格式】 RS,vn=subexpr(S,vn) 用符號變量vn置換S中的子表達式,并重寫S為RS。RS,vn=subexpr(S, 'vn') 例 對一元三次方程 的符號解進行子表達式的置換。 >> t = solve('a*x3+b*x2+c*x+d = 0'); >&g

21、t; r,s = subexpr(t,'s')2.通用置換函數【調用格式】 RS=subs(S, old, new) 用new置換S中old,生成RS 【說明】(1) old是被替換的子表達式,可以是符號變量,也可以是字符串表達式。(2) new是替換old的值,可以是符號常量、符號變量、符號表達式,也可以是數值。(3) 如果要替換多個子表達式,則old和new為細胞數組。例 通用置換函數。>> syms a x; >> f=a*cos(x)+1;>> f1=subs(f, 'cos(x)', sym('y')

22、; %用符號變量替換>> f2=subs(f, a, x, 3, sym('pi/4') %用符號常量替換, >> f3=subs(f, a, x, 3, pi/4); %用雙精度數替換>> f4=subs(f, a, x, 0:3, 0:pi/3:pi); %用雙精度數組替換>> f5=subs(f, x , sym('exp(-t)') %用符號表達式替換 E 符號函數的反函數【調用格式】 g = finverse(f, v) 求指定自變量為v的函數f(v)的反函數g(v) g = finverse(f) 求函

23、數f對缺省的自變量(由findsym確定)的反函數g 例 求 的反函數。>> syms x; f=(x2+1)(1/2); >> g=finverse(f);F 符號函數的復合函數【調用格式】 fg = compose(f, g, x, y, z) 對f (x)和g (y)求復合函數fg (z)= f (g (y)|y=z fg = compose(f,g) 對f ()和g ()求復合函數fg = (f g (),自變量由findsym確定例 求復合函數。>> syms x y z t u; >> f = 1/(1 + x2); g = sin(

24、y); h = xt; p = exp(-y/u); >> compose(f,g); >> compose(f, g, t); >> compose(h, g ,x, z) >> compose(h, g, t, z); >> compose(h, p, x, y, z); >> compose(h, p, t, u, z) G 符號微分和雅可比矩陣求導數、高階導數、偏導數是常見的數學運算,MATLAB提供這方面的符號微分函數。【調用格式】df= diff(f, v, n) 求 ,即求函數f (v)對的n階導數R = j

25、acobian(f,v) 求多元向量函數f (v)的雅可比矩陣,即 例 ,求 , 和>> syms a t x; >> f=a, t2; t*sin(x), log(x); >> dfx=diff(f,x) %矩陣f對x的一階導數,也可寫為diff(f) >> df2t=diff(f,t,2); %矩陣f對t的二階導數>> dfxt=diff(diff(f,x),t) 例 ,求其雅可比矩陣>> syms x y z; >> f = x*y*z; y; x+z; >> v=x,y,z; >>

26、; R = jacobian(f,v) H 函數極限函數的極限是通過導數來定義的,limit函數用于求函數極限。【調用格式】 limit(f, x, a) 求 limit(f, x, a, 'right') 求 limit(f, x, a, 'left') 求 例 求極限運算。>> limit(sin(x)/x,x,0); >> limit(1/x,x,0,'right'); >> limit(1/x,x,0,'left'); >> limit(sin(x+h)-sin(x)/h,h

27、,0) %sin(x)導函數的定義>> v = (1 + a/x)x, exp(-x); >> limit(v,x,inf)I 符號積分 int函數用于求定積分、不定積分和多重積分的符號解。【調用格式】 S= int(f, v) 求不定積分f (v)dv,符號計算結果不帶積分常數S= int(f, v, a, b) 求定積分 rsums(f, ra, rb) 用Riemann和求符號函數f (x)在ra,rb區間上的近似積分【說明】 1. 當f為矩陣時,將對矩陣的每個元素做積分運算。2. v缺省時,積分對findsym確認的變量進行。3. 積分上下限a和b可以是任何數值

28、和表達式4. rsums函數繪制求積分的曲線,根據用戶的選擇來確定最終的近似積分值例 計算 >> syms a t; >> f=exp(t), t4; 1, sin(a*t); >> int(f,t) 例 求多重積分 >> syms x y z; >> V=int(int(int(x2+y2+z2, z, sqrt(x*y), x*y), y, sqrt(x), x2), x, 1, 2) >> vpa(V) J 符號級數求和 symsum函數實現符號級數的求和運算。【調用格式】s= symsum(f, v, a, b)

29、求 ,a和b為整數,b可以取無窮大例 計算 和 >> syms t k x; >> f1=t,k2; >> f2=xk/sym('k!'); >> simple(symsum(f1, t, 0, t) >> simple(symsum(f2 ,k, 0, inf) K 符號代數方程組的解代數方程包括線性、非線性和超越方程等,solve函數用于符號代數方程求解。【調用格式】 g = solve('eq1', 'eq2' ,., 'eqn', 'var1',

30、'var2' ,., 'varn') g = solve(exp1, exp2 ,., expn, var1, var2 ,., varn) 【說明】1. 'eq1', 'eq2' ,., 'eqn'是字符串表達式的方程,或者是字符串表達式,如果它們是不含等號的字符串表達式,則相當于方程'eqi0' 2. 'var1', 'var2' ,., 'varn'是用字符串表示的方程中的變量名3. exp1, exp2 ,., expn只能是符號表達式,不能是

31、帶有等號的表達式方程。4. var1, var2 ,., varn只能是符號變量。5. 返回值g是一個結構體數據,方程組的解用g.var1,g.var2,. ,g.varn表示。6. 在無法求得解析解的時候,給出數值解。 例 方程組 ,分別求其關于y,z和關于u,v,w的解>> s1=solve('u*y+v*z2+w=0','y+z+v=0','y','z'); %方程組關于的解,從結果來看方程有2組解:s1 = y: 2x1 sym z: 2x1 sym >> y=s1.y;z=s1.z; %方程組關于

32、u,v,w的解,2個方程3個變量,方程有無窮多組解,其中w為自由變量,>> s2=solve('u*y+v*z2+w=0','y+z+v=0','u','v','w'); >> u=s2.u; v=s2.v;w=s2.w;L 符號微分方程的解【調用格式】 g = dsolve('eq1', 'eq2' ,., 'eqn', 'cond1', 'cond2', . , 'condn', 'v

33、') 【說明】1. 'eq1', 'eq2' ,., 'eqn'是微分方程,只能用字符串形式。微分方程是函數必須的輸入變量。2. 'cond1', 'cond2' ,., 'condn'是初始條件,也只能用字符串形式。3. 'v'定義了微分方程的獨立變量名(微分方程解中的自變量名),只能用字符串形式。默認的獨立變量名為t。4. 微分方程字符串中,Dny表示y的n階導數,Dy表示y的一階導數。5. 返回值g是一個結構體變量,要引用其成員才能得到方程的解。例 求微分方程組 的解。

34、>> s=dsolve('Dx=y,Dy=-x'); >> x=s.x x = -C1*cos(t)+C2*sin(t) >> y=s.y y = C1*sin(t)+C2*cos(t)例 求微分方程 的解y(x),初始條件為y (0) =0, y (1)= 1>> s=dsolve('x*D2y-3*Dy=x2', 'y(0)=0, y(1)=1', 'x') s = 4/3*x4-1/3*x3 例 求微分方程y”+y2=1 的解,初始條件為y (0) =0 >> y

35、= dsolve('(Dy)2 + y2 = 1','y(0) = 0') y = sin(t) -sin(t)M 積分變換MATLAB的符號計算支持積分變換,對傅氏變換、拉氏變換和Z變換都提供了相應的符號計算函數。1 傅立葉變換及其反變換【調用格式】 Fw = fourier(ft, t, w) 求時域函數ft的傅氏變換Fw ft = ifourier(Fw, w, t) 求頻域函數Fw的傅立葉反變換ft 【說明】:ft是以時間t為自變量的時域函數;Fw是以角頻率w為自變量的頻域函數;輸入參數t和w可以省略。例 求函數 的傅氏變換F (w) >>

36、syms t; >> ft= exp(-t2); >> Fw=fourier(ft) Fw = pi(1/2)*exp(-1/4*w2) 例 求函數 的傅氏變換F (w),其中x是參數。>> syms t w x; ft=exp(-(t-x)*sym('heaviside(t-x) '); >> Fw= simple(fourier(ft, t, w) %fourier(ft) 和fourier(ft, t)都會產生歧義Fw = 1/(1+i*w)/exp(i*x*w) 【說明】MATLAB的Maple提供了一些特殊函數,這些函數不是MATLAB的函數,因此不能在MATLAB中直接調用,必須用函數syms生成

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論