第6章 符號運算_第1頁
第6章 符號運算_第2頁
第6章 符號運算_第3頁
第6章 符號運算_第4頁
第6章 符號運算_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第6章符號運算科學計算可分為兩類:一類是純數(shù)值的計算,例如求函數(shù)的值,以及方程的數(shù)值解等等;另一類計算是符號運算,又稱代數(shù)運算,這是一種智能化的計算,處理的是符號。符號可以代表整數(shù)、有理數(shù)、實數(shù)和復數(shù),也可以代表多項式、函數(shù),還可以代表數(shù)學結(jié)構(gòu),如集合、群的表示等等。我們在數(shù)學的教學和研究中進行的數(shù)學運算多為符號運算。MATLAB中的符號數(shù)學工具箱(SymbolicMathToolbox)集成了豐富的符號運算功能?;镜姆枖?shù)學工具箱包含100多個MATLAB函數(shù),包括的內(nèi)容有:微積分、線性代數(shù)、化簡代數(shù)表達式、方程求解、特殊的數(shù)學函數(shù)、變量精度算法和數(shù)學變換等等?!緦W習目標】掌握對符號變量的定義和基本操作。掌握對符號表達式的定義和基本操作。掌握符號矩陣的生成和運算方法。了解符號微分、符號積分運算方法。掌握符號方程的求解方法。6.1符號變量、符號表達式和符號方程的生成符號數(shù)學工具箱定義了MATLAB的一個新的數(shù)據(jù)類型:符號對象(symbolicobject),其類型名標識為“sym”。符號對象內(nèi)部的儲存內(nèi)容是字符串,用來表示符號變量、符號表達式以及矩陣等等。生成符號變量和符號表達式的函數(shù)是sym和syms。6.1.1使用sym函數(shù)生成符號變量和符號表達式sym函數(shù)可以生成單個的符號數(shù)值、符號變量和符號表達式。格式為:S=sym(x)它生成了一個符號對象S。x可以是字符、字符串、表達式或字符表達式等等。如果x是一個數(shù)值,則得到該數(shù)值的符號表示。如果x是一個字符串,則可生成一個符號變量或符號表達式。例如,>>sqrt(2)ans=1.4142>>aa=sqrt(sym(2))ans=2^(1/2)sqrt(2)是對數(shù)值2進行開方運算;而在式aa=sqrt(sym(2))中,將2用sym命令轉(zhuǎn)化為符號對象,這樣,就得到了使用字符串形式表示的“根號2”。可使用double命令獲取符號對象aa對應(yīng)的數(shù)值運算結(jié)果。>>double(aa)ans=1.4142如果表達式里面的元素都定義為符號對象,則表達式之間還可以按代數(shù)規(guī)則進行運算。比如:>>sym(2)/sym(5)+sym(1)/sym(3)ans=11/15【例6-1】使用sym函數(shù)創(chuàng)建符號變量和符號表達式。分別輸入以下語句:x=sym('x')y=sym('hello')z=sym('(1+sqrt(5))/2')f=sym('a*x^2+b*x+c')f-a返回結(jié)果依次為:x=xy=helloz=(1+sqrt(5))/2f=a*x^2+b*x+c???Undefinedfunctionorvariable'a'.本例中,雖然符號表達式a*x^2+b*x+c創(chuàng)建成功并將其賦予變量f,但并沒有定義符號變量a,因此系統(tǒng)不能進行f-a運算,給出了錯誤信息。6.1.2使用syms函數(shù)定義符號變量和符號表達式syms函數(shù)可以一次創(chuàng)建多個符號變量,調(diào)用格式為:symsvar1,var2,var3...

,變量名之間的間隔也可以是空格?!纠?-2】使用syms函數(shù)定義符號變量和符號表達式。輸入以下語句:symsabcxf=a*x^2+b*x+cf-a返回結(jié)果為:f=a*x^2+b*x+cans=a*x^2+b*x+c-a與例6-1相比,本例中f-a運算成功。6.1.3符號方程的生成方程與函數(shù)的區(qū)別在于函數(shù)是由數(shù)字和變量組成的代數(shù)式,而方程則是包含了函數(shù)的等式,在MATLAB中,生成符號方程的方法與使用sym函數(shù)生成符號表達式類似。【例6-3】用sym生成符號方程:

a*x^2+b*x+c=0。>>e1=sym('a*x^2+b*x+c=0')結(jié)果為:

e1=a*x^2+b*x+c=06.3符號表達式的基本操作用戶可以對符號表達式進行各種操作,包括四則運算、合并同類項、多項式分解和簡化等。6.3.1四則運算符號表達式也與通常的算術(shù)表達式一樣,可以進行加、減、乘、除等四則運算?!纠?-7】符號表達式的四則運算輸入以下語句:symsxyabfun1=sin(x)+cos(y)fun2=a+bfun3=fun1*fun2轉(zhuǎn)換結(jié)果為:fun1=sin(x)+cos(y)fun2=a+bfun3=(sin(x)+cos(y))*(a+b)6.3.2符號多項式的因式分解與展開MATLAB提供了對符號多項式進行因式分解與展開的函數(shù),函數(shù)的調(diào)用格式為:factor(S):對符號多項式S分解因式。expand(S):對符號多項式S進行展開。collect(S):對符號多項式S按照默認變量x合并同類項。collect(S,v):對符號多項式S按變量v合并同類項。horner(f):將一般的符號多項式f轉(zhuǎn)換成嵌套形式?!纠?-8】對表達式f=a^3-1進行因式分解。輸入:f=sym('a^3-1');factor(f)結(jié)果為:ans=(a-1)*(a^2+a+1)如果用syms命令如何定義函數(shù)?【例6-9】展開表達式f=(x+1)^5和f=sin(x-y)輸入:>>symsxy>>f=(x+1)^5;>>expand(f)返回結(jié)果為:ans=x^5+5*x^4+10*x^3+10*x^2+5*x+1>>f=sin(x-y);>>expand(f)返回結(jié)果為:ans=sin(x)*cos(y)-cos(x)*sin(y)【例6-10】符號多項式的同類項合并。(自學)輸入:f=sym('(exp(x)+x)*(x+2)*(y+1)');c1=collect(f)c2=collect(f,y)c3=collect(f,exp(x))返回結(jié)果為:c1=(y+1)*x^2+(exp(x)+2)*(y+1)*x+2*exp(x)*(y+1)c2=(exp(x)+x)*(x+2)*y+(exp(x)+x)*(x+2)c3=(x+2)*(y+1)*exp(x)+x*(x+2)*(y+1)我們分別按不同的變量進行同類項合并,得到了不同的結(jié)果。6.3.3提取有理式的分子和分母(自學)如果符號表達式是一個有理分式或可以展開為有理分式,可利用numden函數(shù)來提取符號表達式S中的分子和分母。其一般調(diào)用格式為:[n,d]=numden(S)該函數(shù)提取符號表達式S的分子(numerator)和分母(denominator),分別將它們存放在n與d中。【例6-12】求有理式f=x/y+y/x分子和分母。輸入:symsxyf=x/y+y/x;[n,d]=numden(f)返回結(jié)果為:n=x^2+y^2d=y*x6.3.4符號表達式的化簡在MATLAB中,使用simplify函數(shù)和simple函數(shù)對符號表達式進行化簡。下面對它們進行分別介紹。1.simplify函數(shù)simplify函數(shù)利用Maple的化簡規(guī)則對符號表達式進行化簡。其中用到大量的代數(shù)恒等式以及大量的函數(shù)恒等式,包括求和、整數(shù)冪、開方、分數(shù)冪、三角函數(shù)、指數(shù)函數(shù)、對數(shù)函數(shù)、貝塞爾函數(shù)、超幾何分布函數(shù)、伽馬函數(shù)等等,力求得到最簡結(jié)果?!纠?-13】用simplify函數(shù)化簡符號表達式。輸入:f=sym('sin(x)^2+cos(x)^2');S=sym('exp(c*log(sqrt(a+b)))');simplify(f)simplify(S)返回結(jié)果為:ans=1ans=(a+b)^(1/2*c)2.simple函數(shù)的使用simple(f)也是一種化簡的函數(shù),它嘗試用多種不同的化簡算法對符號表達式進行化簡,以找到對應(yīng)的最簡形式,其格式如下:[r,how]=simple(f)返回的r為化簡后的符號表達式,how為所采用的簡化方法。如果不指定輸出項r和how,則會輸出嘗試的所有化簡方法名稱及對應(yīng)的化簡結(jié)果。【例6-14】用simple(f)函數(shù)化簡符號表達式14*x^2/(22*x*y)輸入:S=sym('14*x^2/(22*x*y)');[r,how]=simple(S)返回結(jié)果為:r=7/11*x/yhow=simplify6.4符號矩陣的生成和運算6.4.1符號矩陣的生成在MATLAB中,符號矩陣的生成與數(shù)值矩陣的相關(guān)操作很相似。創(chuàng)建符號矩陣的方法有以下幾種:用sym命令直接創(chuàng)建符號矩陣;用類似創(chuàng)建普通數(shù)值矩陣的方法創(chuàng)建符號矩陣;由數(shù)值矩陣轉(zhuǎn)換為符號矩陣。符號矩陣的輸出格式與數(shù)值矩陣有所不同,其每一行用“[]”標記。1.用sym命令直接創(chuàng)建符號矩陣這時sym命令的使用方法與前面創(chuàng)建符號表達式及方程的用法類似。所創(chuàng)建的符號矩陣的元素可以是任何符號對象,且元素的長度允許不同。在輸入格式上,矩陣行之間以“;”分割,各矩陣元素之間用“,”或空格分隔?!纠?-18】用sym函數(shù)創(chuàng)建符號矩陣。>>A=sym('[a,b;c,d]')A=[a,b][c,d]>>B=sym(‘[x+3*x,5*z+6*z;y-y,z/z]’)B=[x+3*x,5*z+6*z][y-y,z/z]2.以數(shù)值矩陣生成方法創(chuàng)建符號矩陣用這種方法創(chuàng)建符號矩陣之前,需要預(yù)先定義所有需要的符號變量?!纠?-19】用生成數(shù)值矩陣的方法創(chuàng)建符號矩陣>>symsxyz>>B=[x+3*x,5*z+6*z;y-y,z/z]B=[4*x,11*z][0,1]3.由數(shù)值矩陣轉(zhuǎn)換為符號矩陣由于數(shù)值型對象和符號型對象分屬于兩個不同的數(shù)據(jù)類型,它們之間不能直接運算,但卻可以相互轉(zhuǎn)換。將數(shù)值對象M轉(zhuǎn)化為符號對象S時,可以應(yīng)用sym函數(shù),格式為:S=sym(M)【例6-20】使用sym函數(shù)將3階Hilbert矩陣轉(zhuǎn)換為符號矩陣。>>h=hilb(3)h=1.00000.50000.33330.50000.33330.25000.33330.25000.2000>>h1=sym(h)h1=[1,1/2,1/3][1/2,1/3,1/4][1/3,1/4,1/5]>>S=rand(2)S=0.81470.12700.90580.9134>>S1=sym(S)S1=[7338378580900475*2^(-53),4575182228323196*2^(-55)][8158648460577917*2^(-53),8226958330713791*2^(-53)]從本例可以看出,不管原來數(shù)值矩陣M是以分數(shù)還是浮點數(shù)形式賦值的,但當它被轉(zhuǎn)化為符號矩陣后,都將以最接近原數(shù)的精確有理式給出。6.4.2符號矩陣的運算(自學)符號矩陣的運算方法與數(shù)值矩陣類似,我們將常見的運算類型概述如下(設(shè)A和B是已存在的兩個符號矩陣):1.A+B、A-B符號陣列的加法與減法。若A與B為同型陣列時,A+B、A-B分別對對應(yīng)元素進行加減;若A與B中至少有一個為標量,則把標量擴大為與另外一個同型的陣列,再按對應(yīng)的元素進行加減。2.A*B,符號矩陣乘法。為線性代數(shù)中定義的矩陣乘法。按乘法定義要求必須有矩陣A的列數(shù)等于矩陣B的行數(shù),或者至少有一個為標量時,方可進行乘法操作,否則將返回一出錯信息。3.A.*B,對應(yīng)元素相乘。A.*B為按參量A與B對應(yīng)的元素進行相乘。A與B必須為同型陣列,或至少有一個為標量。6.5符號微積分微積分是高等數(shù)學的基礎(chǔ),MATLAB的符號數(shù)學工具箱提供了許多關(guān)于微積分計算的功能。6.5.1符號極限limit函數(shù)用來求符號函數(shù)的極限。其格式如下:limit(F,x,a)計算符號表達式F在x→a條件下的極限;limit(F,a)計算符號表達式F中由默認自變量趨向于a條件下的極限;limit(F)計算符號表達式F在默認自變量趨向于0條件下的極限;limit(F,x,a,‘right’)和limit(F,x,a,’left’)計算符號表達式F在x→a條件下的右極限和左極限?!纠?-22】分別計算表達式,,分別輸入下列語句:symsxlimit(sin(x)/x)limit(1/x,x,0,'right')limit(1/x,x,0,'left')返回結(jié)果依次為:ans=1ans=infans=-inf6.5.2符號微分(自學)diff函數(shù)用來求符號微分,其格式如下:diff(S),求符號表達式S對于默認自變量的微分;diff(S,‘v’),求符號表達式S對于自變量v的微分;diff(S,n),求符號表達式S對于默認自變量的n次微分;diff(S,‘v’,n),求符號表達式S對自變量v的n次微分。【例6-23】符號表達式的微分運算。>>S1=sym('6*x^3-4*x^2+b*x-5');>>S2=sym('sin(a)');>>S3=sym('(1-t^3)/(1+t^4)');>>diff(S1)ans=18*x^2-8*x+b

>>diff(S1,2)

ans=36*x-8>>diff(S1,'b')ans=x>>diff(S2)ans=cos(a)>>diff(S3)ans=-3*t^2/(1+t^4)-4*(1-t^3)/(1+t^4)^2*t^3>>simplify(diff(S3))ans=t^2*(-3+t^4-4*t)/(1+t^4)^26.5.3符號積分(自學)int函數(shù)用來求解符號積分,其格式如下:int(S),求符號表達式S對于默認自變量的不定積分;int(S,’v’),求符號表達式S對于自變量v的不定積分;int(S,a,b),求符號表達式S對于默認自變量從a到b的定積分;int(S,’v’,a,b),求符號表達式S中自變量v計算從a到b的定積分。6.6符號積分變換(自學)在科學計算和各種工程實際中,常常要用到各種積分變換,比較常見的有Fourier變換、Laplace變換和z變換等。下面分別對他們進行介紹。6.7符號方程的求解6.7.1代數(shù)方程求解MATLAB的符號數(shù)學工具箱提供了solve函數(shù)對代數(shù)方程求解。其格式如下:g=solve(eq),求解代數(shù)方程eq=0,自變量為默認自變量;g=solve(eq,var),求解代數(shù)方程eq=0,自變量為var;g=solve(eq1,eq2,…,eqn,var1,var2,…,varn)),求解符號表達式eq1,eq2,…eqn組成的代數(shù)方程組,自變量分別為var1,var2,…varn。方程組的解將存入結(jié)構(gòu)變量g。【例6-31】求一元二次方程a*x^2+b*x+c=0的根.>>f=sym('a*x^2+b*x+c');>>solve(f)%以x為自變量,求解方程f=0ans=1/2/a*(-b+(b^2-4*a*c)^(1/2))1/2/a*(-b-(b^2-4*a*c)^(1/2))>>solve(f,a)%以a為自變量,求解方程f=0ans=-(b*x+c)/x^2【例6-32】求解由方程x^2-y^2+z=10,x+y-5z=0,2x-4y+z=0構(gòu)成的線性方程組。依次輸入以下語句:sym

溫馨提示

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

評論

0/150

提交評論