MATLAB8.X程序設(shè)計(jì)及典型應(yīng)用第五章_第1頁(yè)
MATLAB8.X程序設(shè)計(jì)及典型應(yīng)用第五章_第2頁(yè)
MATLAB8.X程序設(shè)計(jì)及典型應(yīng)用第五章_第3頁(yè)
MATLAB8.X程序設(shè)計(jì)及典型應(yīng)用第五章_第4頁(yè)
MATLAB8.X程序設(shè)計(jì)及典型應(yīng)用第五章_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第五章符號(hào)計(jì)算MATLAB的符號(hào)運(yùn)算是憑借一些列恒等式和數(shù)學(xué)定理,通過(guò)推理和演繹獲得的解析結(jié)果。與數(shù)值計(jì)算相比,符號(hào)計(jì)算存在以下的特點(diǎn):(1)運(yùn)算以推理方式進(jìn)行,因此不受截?cái)嗾`差和累計(jì)誤差問(wèn)題的影響;(2)符號(hào)計(jì)算給出的解可以是完全正確的封閉解,當(dāng)封閉解不存在時(shí)給出任意精度的數(shù)值解;(3)符號(hào)計(jì)算的速度比較慢。MATLAB最初主要以解決自然科學(xué)領(lǐng)域中的數(shù)值計(jì)算和數(shù)據(jù)分析問(wèn)題出現(xiàn)的。為了解決MATLAB在符號(hào)運(yùn)數(shù)學(xué)方面的不足,1993年MathWorks公司從加拿大的滑鐵盧(Waterloo)大學(xué)購(gòu)入了符號(hào)數(shù)學(xué)軟件Maple的使用權(quán),首次開發(fā)了符號(hào)數(shù)學(xué)工具箱(SymbolicMathToolbox)。當(dāng)要求MATLAB進(jìn)行符號(hào)運(yùn)算時(shí),它就請(qǐng)求Maple去計(jì)算并將結(jié)果返回到MATLAB窗口。

MATLAB采用重載(Overload)技術(shù),使得用來(lái)構(gòu)成符號(hào)表達(dá)式的運(yùn)算符和基本函數(shù),無(wú)論在形狀、名稱以及使用方法上,都與數(shù)值計(jì)算完全相同。MATLAB常用函數(shù)中除了angle()、atan2()、log2()、log10()只能用于數(shù)值運(yùn)算外,其余的都可以用于符號(hào)運(yùn)算。同時(shí),符號(hào)運(yùn)算沒(méi)有邏輯操作符,關(guān)系運(yùn)算中也只有是否“等于”的概念。

第五章符號(hào)計(jì)算本章主要介紹MATLAB符號(hào)數(shù)學(xué)工具箱的主要功能,包括:符號(hào)對(duì)象的創(chuàng)建和符號(hào)自變量的確定、符號(hào)表達(dá)式的轉(zhuǎn)換和操作、符號(hào)微積分以及符號(hào)方程的求解。本章的主要內(nèi)容有:符號(hào)對(duì)象的創(chuàng)建及其操作符號(hào)對(duì)象和數(shù)值對(duì)象的轉(zhuǎn)換符號(hào)表達(dá)式的極限、級(jí)數(shù)求和以及符號(hào)微積分符號(hào)代數(shù)方程和符號(hào)微分方程的求解第五章符號(hào)計(jì)算5.1符號(hào)對(duì)象的創(chuàng)建和符號(hào)自變量的確定

5.1.1符號(hào)對(duì)象的創(chuàng)建

符號(hào)對(duì)象是一種數(shù)據(jù)結(jié)構(gòu),包括符號(hào)常量、符號(hào)變量。MATLAB規(guī)定:任何包含符號(hào)對(duì)象的表達(dá)式或方程,將承襲符號(hào)對(duì)象的屬性,即這樣的表達(dá)式或方程也一定是符號(hào)對(duì)象。正如在數(shù)學(xué)表達(dá)式中所用到的變量必須實(shí)現(xiàn)賦值一樣,在進(jìn)行符號(hào)運(yùn)算前,首先要對(duì)基本的符號(hào)對(duì)象進(jìn)行定義。定義符號(hào)對(duì)象的指令有兩個(gè):sym()和syms,格式如下:?sym(常量,參數(shù))

?把常量按參數(shù)的格式要求創(chuàng)建為符號(hào)常量。參數(shù)有4種選擇:'d'―返回最接近的十進(jìn)制數(shù)值表示符號(hào)量'e'―最接近的帶有機(jī)器浮點(diǎn)誤差的有理數(shù)格式表示符號(hào)量'f'―最接近的浮點(diǎn)格式表示符號(hào)量‘r’―有理數(shù)格式(系統(tǒng)默認(rèn)格式)表示符號(hào)量,可表示為p/q,p*q,10^q,p/q,2^q和sqrt(p)形式之一。

有時(shí)也會(huì)有形式如sym('常量',參數(shù))定義常量的方法。?sym(‘變量’,參數(shù))?把變量定義為符號(hào)對(duì)象。其中參數(shù)用來(lái)設(shè)置限定符號(hào)變量的數(shù)學(xué)特性,有3種選擇:positive―正的實(shí)數(shù)符號(hào)變量real―實(shí)數(shù)符號(hào)變量unreal―非實(shí)數(shù)的符號(hào)變量如果不限定參數(shù)的數(shù)學(xué)特性可省略。用戶如果要同時(shí)創(chuàng)建多個(gè)符號(hào)變量,可以使用syms函數(shù),調(diào)用格式有兩種:?syms(‘變量1’,‘變量2’,…,參數(shù))?syms變量1變量2…參數(shù)?創(chuàng)建變量1、變量2等多個(gè)符號(hào)變量。參數(shù)的含義同sym。注意:第一種方式創(chuàng)建符號(hào)變量時(shí),變量間必須用逗號(hào)隔開。第二種方式創(chuàng)建符號(hào)變量時(shí)變量間只能用空格隔開。5.1.1符號(hào)對(duì)象的創(chuàng)建【例5-1】創(chuàng)建符號(hào)常量,并比較其與數(shù)值類和字符串類的差別clear; a1=pi+2*cos(3)%創(chuàng)建一個(gè)數(shù)值a2=sym('pi+2*cos(3)')%創(chuàng)建一個(gè)符號(hào)常量a3='pi+2*cos(3)'%創(chuàng)建一個(gè)字符串whos%檢查所創(chuàng)建的各變量的信息在指令窗中運(yùn)行exm5_1.m后,結(jié)果為:a1=1.1616a2=pi+2*cos(3)a3=

pi+2*cos(3)NameSizeBytesClassAttributesa11x18doublea21x1146syma31x1122char【說(shuō)明】:符號(hào)常量表示的符號(hào)類數(shù)字總被MATLAB準(zhǔn)確記錄和運(yùn)算,但數(shù)值類數(shù)字運(yùn)算時(shí)會(huì)引入截?cái)嗾`差。盡管變量a2和a3顯示的內(nèi)容完全相同,但它們屬于不同的數(shù)據(jù)類型,運(yùn)算方法也不一樣,且符號(hào)常量占據(jù)的存儲(chǔ)空間較大。【例5-1】創(chuàng)建符號(hào)常量,并比較其與數(shù)值類和字符串類的差別編寫文件名為exm5_2的腳本文件:cleara21=sym(pi+2*cos(3),'d')%返回最接近的32位的十進(jìn)制數(shù)值a22=sym(pi+2*cos(3),'e')%返回最接近的帶有機(jī)器浮點(diǎn)誤差的有理值a23=sym(pi+2*cos(3),'f')%返回該符號(hào)值最接近的浮點(diǎn)表示a24=sym(pi+2*cos(3),'r')%返回該符號(hào)值最接近的有理數(shù)型在指令窗中運(yùn)行exm5_2.m后,結(jié)果為:a21=1.1616076603889022855753410112811a22=5231415826478174*2^(-52)a23='1.295f1ea02745e'*2^(0)a24=5231415826478174*2^(-52)【例5-2】數(shù)值類常量轉(zhuǎn)換為符號(hào)常量后的不同表示方法實(shí)例

編寫文件名為exm5_3的腳本文件:clear;clc;x=sym('a','real');%創(chuàng)建實(shí)數(shù)符號(hào)變量x<1>y=sym('b','real');%創(chuàng)建實(shí)數(shù)符號(hào)變量y<2>z=x+y*ireal(z)%求z的實(shí)部y=sym('b','unreal');%消除b的實(shí)數(shù)特性z=x+y*ireal(z)在指令窗中運(yùn)行exm5_3.m后,結(jié)果為:z=a+i*bans=az=a+i*bans=a+1/2*i*b-1/2*i*conj(b)【例5-3】創(chuàng)建符號(hào)變量實(shí)例。對(duì)于復(fù)數(shù)變量b,MATLAB認(rèn)為其實(shí)部是1/2*b+1/2*conj(b)。如果用戶對(duì)所定義的符號(hào)變量的數(shù)學(xué)特性不加說(shuō)明,MATLAB認(rèn)為所定義的變量都是復(fù)數(shù)變量。用戶一旦定義了符號(hào)變量的數(shù)學(xué)特性,比如符號(hào)a為實(shí)數(shù),即便用戶利用clear清除了工作空間中的符號(hào)變量a,當(dāng)用戶再次定義符號(hào)a時(shí),MATLAB總默認(rèn)其為實(shí)數(shù),除非用戶重新定義其特性,或者重啟MATLAB。腳本文件中的<1><2>兩條語(yǔ)句也可以用一條語(yǔ)句symsxy'real'代替,功能相同。【說(shuō)明】MATLAB創(chuàng)建符號(hào)表達(dá)式的方法有兩種:一是直接創(chuàng)建表達(dá)式;二是先逐個(gè)創(chuàng)建表達(dá)式中的各個(gè)變量,然后生成表達(dá)式。編寫文件名為exm5_4的腳本文件:clear%方法一:直接創(chuàng)建表達(dá)式y(tǒng)1=sym('a*x^2+b*x+c')whos%方法二:逐個(gè)創(chuàng)建表達(dá)式中的變量,產(chǎn)生表達(dá)式clearsymsabcx;y2=a*x^2+b*x+cwhos。

【例5-4】創(chuàng)建符號(hào)表達(dá)式

。在指令窗中運(yùn)行exm5_4.m后,結(jié)果為:y1=a*x^2+b*x+cNameSizeBytesClassAttributesy11x1146symy2=a*x^2+b*x+c

NameSizeBytesClassAttributesa1x1126sym

b1x1126symc1x1126sym

x1x1126symy21x1146sym【例5-4】創(chuàng)建符號(hào)表達(dá)式

。盡管這兩種方式都可以創(chuàng)建符號(hào)表達(dá)式,且創(chuàng)建的表達(dá)式?jīng)]有差別,但從工作空間變量查詢結(jié)果可知:第一種方法只創(chuàng)建了符號(hào)表達(dá)式,并沒(méi)有創(chuàng)建表達(dá)式中的各個(gè)變量。第二種方法則創(chuàng)建了各個(gè)符號(hào)變量。因此在第一種方法中盡管表達(dá)式創(chuàng)建了,當(dāng)遇到表達(dá)式中的某個(gè)符號(hào)變量時(shí),MATLAB必須要重新創(chuàng)建該符號(hào)變量。【說(shuō)明】5.1.2符號(hào)表達(dá)式中符號(hào)自變量的確定當(dāng)符號(hào)表達(dá)式中存在多個(gè)符號(hào)變量時(shí),例如“",中a、b、c、x都是變量,顯然,選擇不同的自變量,方程的求解結(jié)果也截然不同。MATLAB確定符號(hào)表達(dá)式中的自變量有3條原則:(1)小寫字母i和j不能作為自變量。(2)符號(hào)表達(dá)式中如果有多個(gè)字符變量,則按照以下順序選擇自變量:首先選擇x作為自變量;如果沒(méi)有x,則選擇在字母順序中最接近x的字符變量;如果與x相同距離,則在x后面的優(yōu)先。(3)大寫字母比所有的小寫字母都靠后。確定自變量的函數(shù)是findsym,格式如下:?findsym(S,n)?確定符號(hào)表達(dá)式S中的n個(gè)自變量。n為按順序得出符號(hào)變量的個(gè)數(shù),當(dāng)n缺省時(shí),給出S中所有的符號(hào)變量。編寫文件名為exm5_5的腳本文件:clearsymsabmxtwXYk=sym('2+cos(3)');n=sym('c*sqrt(alpha)+y*sin(delta)');f=k*x*Y+a*n*X-w^2+t^m;f_all=findsym(f)%找出表達(dá)式中所有的自由變量f_1=findsym(f,1)%找出表達(dá)式中一個(gè)自由變量f_2=findsym(f,2)%找出表達(dá)式中二個(gè)自由變量f_5=findsym(f,5)%找出表達(dá)式中五個(gè)自由變量

【例5-5】函數(shù)findsym()應(yīng)用實(shí)例。在指令窗中運(yùn)行exm5_5.m后,結(jié)果為:

f_all=X,Y,a,alpha,c,delta,m,t,w,x,yf_1=xf_2=x,yf_5=x,y,w,t,m【說(shuō)明】findsym()指令確定的變量本著“自由”和“獨(dú)立”的原則,由于n不是“獨(dú)立”的,所以變量n不能做自變量。k為常量,不“自由”,所以它也不能做自變量。findsym()指令首先對(duì)符號(hào)變量的第一個(gè)字母比較,再比較其余的?!纠?-5】函數(shù)findsym()應(yīng)用實(shí)例?!纠?-6】符號(hào)表達(dá)式組成的矩陣中函數(shù)findsym()應(yīng)用實(shí)例編寫文件名為exm5_6的腳本文件:clearsymsacxvyB=[a*c,sin(x)+y;exp(-v),log(a)]findsym(B,1)在指令窗中運(yùn)行exm5_6.m后,結(jié)果為:B=[a*c,sin(x)+y][exp(-v),log(a)]ans=x5.2符號(hào)表達(dá)式的基本操作

5.2.1符號(hào)對(duì)象和數(shù)值對(duì)象的轉(zhuǎn)換MATLAB提供了相應(yīng)的指令可以實(shí)現(xiàn)將符號(hào)類數(shù)字轉(zhuǎn)換為數(shù)值類數(shù)字,便于用戶進(jìn)行相關(guān)的數(shù)值計(jì)算和繪制圖像使用。符號(hào)常量可以應(yīng)用函數(shù)double()轉(zhuǎn)換為數(shù)值對(duì)象,其調(diào)用格式為?double(S)?把符號(hào)常量S轉(zhuǎn)換為數(shù)值對(duì)象?!纠?-7】建立符號(hào)常數(shù)矩陣,并轉(zhuǎn)換為數(shù)值矩陣編寫文件名為exm5_7的腳本文件:cleara=sym('[sin(1/2)5/7;sqrt(3)2*log(1/3)]')%建立符號(hào)常數(shù)矩陣sdouble(a)%把a(bǔ)轉(zhuǎn)換為數(shù)值矩陣在指令窗中運(yùn)行exm5_7.m后,結(jié)果為:a=[sin(1/2),5/7][sqrt(3),2*log(1/3)]ans=0.47940.71431.7321-2.19725.2.2符號(hào)數(shù)值的精度控制符號(hào)運(yùn)算與數(shù)值計(jì)算比較,其最大的特點(diǎn)是符號(hào)運(yùn)算是完全準(zhǔn)確的,即在運(yùn)算過(guò)程中不存在截?cái)嗾`差和累積誤差。但這種準(zhǔn)確性是以犧牲計(jì)算速度和增加內(nèi)存為代價(jià)換來(lái)的。為了兼顧計(jì)算速度和精度,節(jié)約內(nèi)存,MATLAB針對(duì)符號(hào)運(yùn)算提供了“變精度”算法。這種“變精度”算法由函數(shù)digits()和vpa()實(shí)現(xiàn)或者由vpa()單獨(dú)實(shí)現(xiàn)。?digits(n)?設(shè)定計(jì)算精度為n位有效位數(shù)。n缺省時(shí)為查看當(dāng)前計(jì)算精度。MATLAB默認(rèn)精度為32位。vpa的格式如下:?t=vpa(x,n)?將x表示為n位有效位數(shù)的符號(hào)對(duì)象t。其中x可以是數(shù)值對(duì)象或符號(hào)對(duì)象,但計(jì)算的結(jié)果t一定是符號(hào)對(duì)象。n缺省時(shí)以MATLAB當(dāng)前給定的精度顯示。指令digits設(shè)置了計(jì)算精度后,隨后的每個(gè)進(jìn)行符號(hào)函數(shù)的計(jì)算都以新精度為準(zhǔn),除非用戶重新設(shè)置,或者重啟MATLAB。設(shè)置的有效位數(shù)增加時(shí),計(jì)算時(shí)間和占用的內(nèi)存也增加。指令vpa(x,n)只對(duì)指定的符號(hào)對(duì)象x按新精度進(jìn)行運(yùn)算,并以同樣的精度顯示計(jì)算結(jié)果,并不改變?nèi)值挠?jì)算精度?!菊f(shuō)明】【例5-8】函數(shù)digits(),vpa()的使用實(shí)例。>>a=sym('2*sqrt(5)+sin(2/3)')%2*sqrt(5)+sin(2/3)字面數(shù)值的完全準(zhǔn)確表達(dá)a=sin(2/3)+2*5^(1/2)>>ar=sym(2*sqrt(5)+sin(2/3))%字面數(shù)值在16位精度下"廣義有理形式"表達(dá)式ar=5731399958792085/1125899906842624>>digits%查看當(dāng)前“十進(jìn)制浮點(diǎn)”表示符號(hào)數(shù)值的有效位數(shù)Digits=32>>a0=vpa(a)%用當(dāng)前的位數(shù)計(jì)算并顯示a0=5.0905057580693164005682337996694>>a1=vpa(a,20)%按指定的20位精度下計(jì)算并顯示a1=5.0905057580693164006>>digits%查看當(dāng)前“十進(jìn)制浮點(diǎn)”表示符號(hào)數(shù)值的有效位數(shù)Digits=32>>digits(15)%改變當(dāng)前的有效位數(shù)為15位>>a2=vpa(a)%按digits指定的15位精度計(jì)算并顯示a2=5.09050575806932>>digits%查看當(dāng)前表示符號(hào)數(shù)值的有效位數(shù)Digits=15【例5-8】函數(shù)digits(),vpa()的使用實(shí)例。5.2.3符號(hào)表達(dá)式的化簡(jiǎn)MATLAB符號(hào)工具箱中提供了許多符號(hào)表達(dá)式的操作指令,實(shí)現(xiàn)對(duì)符號(hào)表達(dá)式的多種化簡(jiǎn)功能,其中最常用的有:。1.合并同類項(xiàng)合并同類項(xiàng)是多項(xiàng)式的基本操作。合并多項(xiàng)式中同類項(xiàng)的指令為collect(),格式如下:?collect(S,v)?合并多項(xiàng)式S中的指定符號(hào)對(duì)象v,其中S是符號(hào)表達(dá)式。v缺省時(shí),MATLAB將以函數(shù)findsym()確定的變量合并多項(xiàng)式S中的同類項(xiàng)。【例5-9】分別按合并表達(dá)式中的同類項(xiàng)

編寫文件名為exm5_9的腳本文件:clear,symsxtf=sym((x^2+x^2*exp(-t)+1)*(x+exp(-t)));f1=collect(f)%合并x的同類項(xiàng)系數(shù)f2=collect(f,exp(-t))%合并exp(-t)的同類項(xiàng)系數(shù)在指令窗中運(yùn)行exm5_9.m后,結(jié)果為:f1=(1+exp(-t))*x^3+(1+exp(-t))*exp(-t)*x^2+x+exp(-t)f2=x^2*exp(-t)^2+(x^2+1+x^3)*exp(-t)+(x^2+1)*xMATLAB實(shí)現(xiàn)符號(hào)多項(xiàng)式因式分解的指令為factor()和hornor(),調(diào)用格式為:?factor(S)?把符號(hào)表達(dá)式S轉(zhuǎn)換成多因式相乘的形式,如果S為正整數(shù),可以實(shí)現(xiàn)因子分解。?hornor(S)?將符號(hào)多項(xiàng)式S因式分解成嵌套形式表示。2因式分解【例5-10】分解因式

編寫文件名為exm5_10的腳本文件:clear;symsxa;f=factor(a^3-x^3)在指令窗中運(yùn)行exm5_10.m后,結(jié)果為:f=(a-x)*(a^2+a*x+x^2)【例5-11】將大整數(shù)102456分解為幾個(gè)素?cái)?shù)的乘積。指令窗中執(zhí)行指令并顯示結(jié)果:>>factor(sym('102456'))ans=(2)^3*(3)^2*(1423)

【例5-12】將表達(dá)式

表示成嵌套形式。

編寫文件名為exm5_12的腳本文件:clearsymsx;f=horner(x^6-5*x^3+4*x^2+4*x-6)在指令窗中運(yùn)行exm5_12.m后,結(jié)果為:f=-6+(4+(4+(-5+x^3)*x)*x)*x2因式分解【例5-13】當(dāng)

取何值時(shí),方程組

有非零解編寫文件名為exm5_13的腳本文件:clear,clc,symst;A=[1-t-24;23-t1;111-t];%創(chuàng)建系數(shù)矩陣B=det(A);C=factor(B)%計(jì)算系數(shù)矩陣對(duì)應(yīng)行列式的值,并進(jìn)行因式分解在指令窗中運(yùn)行exm5_13.m后,結(jié)果為:-t*(t-2)*(t-3)由結(jié)果可知,當(dāng)

取值為0、2、3時(shí),方程組才存在非零解。如果表達(dá)式是一個(gè)有理分式(兩個(gè)多項(xiàng)式之比),或者是可以展開為有理分式(必要時(shí)還需要進(jìn)行表達(dá)式合并、有理化),用戶可以利用MATLAB中的指令numden()提取該表達(dá)式的分子和分母,調(diào)用格式為:?[N,D]=numden(S)?對(duì)理多項(xiàng)式S進(jìn)行分子分母多項(xiàng)式的提取,輸出宗量分別為分子多項(xiàng)式N和分母多項(xiàng)式D。3符號(hào)表達(dá)式中分子多項(xiàng)式和分母多項(xiàng)式的提取分析:由于這四個(gè)表達(dá)式進(jìn)行的是相同的運(yùn)算,將它們組合成數(shù)組,MATLAB只需要執(zhí)行一次指令即可以計(jì)算出全部結(jié)果。編寫文件名為exm5_14的腳本文件:clear,clc,symsxA=[x^21/x^3+1;(2*x^2+1)/x-1/x^21/(x-3)];[n,d]=numden(A)在指令窗中運(yùn)行exm5_14.m后,結(jié)果為:n=

[x^2,3*x^3+1]

[2*x^3+x-1,1]

d=

[1,x^3]

[x^2,x-3]

各個(gè)表達(dá)式有理化后的結(jié)果為:【例5-14】分別提取有理多項(xiàng)式

的分子、分母多項(xiàng)式。

MATLAB實(shí)現(xiàn)符號(hào)多項(xiàng)式展開的指令為expand(),調(diào)用格式為:?expand(S)

?對(duì)符號(hào)表達(dá)式S進(jìn)行多項(xiàng)式、三角函數(shù)、指數(shù)函數(shù)和對(duì)數(shù)函數(shù)等展開?!纠?-15】展開表達(dá)式

,其中n為任意給定的整數(shù).

編寫文件名為exm5_15的腳本文件:clear,clc,symsxyn=input('Pleaseinputn=?');g=(x-y)^n;g=expand(g)在指令窗中運(yùn)行exm5_15.m后,以n=4為例,結(jié)果為:Pleaseinputn=?4g=x^4-4*x^3*y+6*x^2*y^2-4*x*y^3+y^44符號(hào)表達(dá)式的展開【例5-16】展開矩陣

中的各表達(dá)式.編寫文件名為exm5_16的腳本文件:symsalphabetaf=[sin(alpha+beta),sin(alpha-beta);sin(2*alpha),tan(2*beta)]clear,clcexpand(f)在指令窗中運(yùn)行exm5_16.m,結(jié)果為:f=[sin(alpha+beta),sin(alpha-beta)]ans=[cos(alpha)*sin(beta)+cos(beta)*sin(alpha),cos(beta)*sin(alpha)-cos(alpha)*sin(beta)][2*cos(alpha)*sin(alpha),(2*tan(beta))/(tan(beta)^2-1)]該題也證明了函數(shù)運(yùn)算中的正弦函數(shù)、正切函數(shù)的倍角公式以及正弦函數(shù)和余弦函數(shù)的兩角和、差公式。符號(hào)表達(dá)式可以用許多等價(jià)的形式來(lái)表示。為了讓用戶得到最簡(jiǎn)潔的表達(dá)形式,MATLAB提供了兩個(gè)指令進(jìn)行符號(hào)化簡(jiǎn):simplify()和simple(),其調(diào)用格式相同:?simplify(S)或simple(S)?對(duì)符號(hào)表達(dá)式S化簡(jiǎn),輸出最簡(jiǎn)化形式。二者區(qū)別在于對(duì)于較為復(fù)雜的表達(dá)式化簡(jiǎn),不帶輸出宗量的simple()往往給出符號(hào)表達(dá)式的化簡(jiǎn)過(guò)程,而simplify()只給出化簡(jiǎn)后的最簡(jiǎn)形式。5符號(hào)表達(dá)式的化簡(jiǎn)【例5-17】化簡(jiǎn)指令simplify()和simple()使用實(shí)例:化簡(jiǎn)表達(dá)式

。>>symsx;f=2*x/(x^2-x+1)+3/(x+1);>>simple(f)simplify:(5*x^2-x+3)/(x^3+1)radsimp:3/(x+1)+(2*x)/(x^2-x+1)……collect(x):(5*x^2-x+3)/(x^3+1)ans=(5*x^2-x+3)/(x^3+1)>>simplify(f)ans=(5*x^2-x+3)/(x^3+1)【例5-18】化簡(jiǎn)編寫文件名為exm5_18的腳本文件:clear,clc,symsxf=(1/x^3+6/x^2+12/x+8)^(1/3);f1=simplify(f)f2=simplify(f1)g1=simple(f)g2=simple(g1)在指令窗中運(yùn)行exm5_18.m后,結(jié)果為:f1=((2*x+1)^3/x^3)^(1/3)f2=((2*x+1)^3/x^3)^(1/3)g1=(2*x+1)/xg2=2+1/xsimplify()利用各種類型代數(shù)恒等式,包括求和、積分和分?jǐn)?shù)冪、三角、指數(shù)和常用對(duì)數(shù)、Bessel函數(shù)、超幾何函數(shù)和

函數(shù),來(lái)簡(jiǎn)化表達(dá)式;simple()使用幾種不同的簡(jiǎn)化工具,然后選擇在結(jié)果表達(dá)式中含有最少字符的那種形式作為輸出。建議用戶在化簡(jiǎn)過(guò)程中多用幾次化簡(jiǎn)指令。【說(shuō)明】【例5-19】已知矩陣A=,計(jì)算A的平方,以及A中各元素的平方,并化簡(jiǎn)。編寫文件名為exm5_19的腳本文件:clear,symsx;A=[cos(x)sin(x);sin(x)cos(x)];B=simple(A^2)%計(jì)算矩陣A的2次冪C=simple(A.^2)%計(jì)算矩陣A中各元素的2次冪在指令窗中運(yùn)行exm5_19.m后,結(jié)果為:B=[1,sin(2*x)][sin(2*x),1]C=[cos(x)^2,sin(x)^2][sin(x)^2,cos(x)^2]A=

5.3.4符號(hào)表達(dá)式的置換MATLAB符號(hào)數(shù)學(xué)工具箱中提供了用于符號(hào)達(dá)式的置換函數(shù),用于簡(jiǎn)化表達(dá)式的輸出,方便用戶閱讀。?subs(ES,OLD,NEW)?用變量NEW替換符號(hào)表達(dá)式ES中的變量OLD。

?[Y,X]=subexpr(ES,X)?自動(dòng)查找表達(dá)式中最長(zhǎng)的子表達(dá)式,并用符號(hào)變量X來(lái)置換,輸出置換后的符號(hào)表達(dá)式Y(jié)和子表達(dá)式X?!纠?-20】使用置換函數(shù)subs()對(duì)表達(dá)式

進(jìn)行不同的置換操作。>>clear,clc,>>symsabxy>>f=a*sin(x)+b;>>f1=subs(f,'sin(x)',y)%以符號(hào)變量y替換符號(hào)表達(dá)式sin(x)f1=b+a*y>>f2=subs(f,'a',sym('2'))%以符號(hào)常量2替換符號(hào)變量af2=b+2*sin(x)>>f3=subs(f,{a,b},{3,2})%分別以標(biāo)量2、3替換符號(hào)變量a、bf3=3*sin(x)+2>>f4=subs(f,{a,b,x},{2,2,pi/3})%分別以標(biāo)量2、3、pi/3替換符號(hào)變量a、b、xf4=

3.7321

【說(shuō)明】只有當(dāng)符號(hào)表達(dá)式中的符號(hào)變量全部用數(shù)值常量代替后,計(jì)算的結(jié)果為數(shù)值常量。否則仍然為符號(hào)變量或符號(hào)常量?!纠?-21】置換函數(shù)subexpr()的使用實(shí)例:計(jì)算符號(hào)矩陣的逆矩陣。編寫文件名為exm5_21的腳本文件:clearsymsXA=sym('[a11a12a13;a21a22a23;a31a32a33]')%創(chuàng)建符號(hào)矩陣D=inv(A);%計(jì)算符號(hào)矩陣的逆矩陣[Y,X]=subexpr(D,X)%用X置換其中的子表達(dá)式在指令窗中運(yùn)行exm5_21.m后,結(jié)果為:A=[a11,a12,a13][a21,a22,a23][a31,a32,a33]Y=[(a22*a33-a23*a32)/X,-(a12*a33-a13*a32)/X,(a12*a23-a13*a22)/X][-(a21*a33-a31*a23)/X,(a11*a33-a31*a13)/X,-(a11*a23-a21*a13)/X][(a21*a32-a31*a22)/X,-(a11*a32-a31*a12)/X,(a11*a22-a21*a12)/X]X=a11*a22*a33-a11*a23*a32-a21*a12*a33+a21*a13*a32+a31*a12*a23-a31*a13*a22【說(shuō)明】:函數(shù)subexpr()對(duì)子表達(dá)式是自動(dòng)尋找,只有比較長(zhǎng)子表達(dá)式才被置換。對(duì)于較短的子表達(dá)式,即便重復(fù)多次也不會(huì)被置換【例5-21】置換函數(shù)subexpr()的使用實(shí)例

MATLAB符號(hào)計(jì)算工具箱中提供了很多關(guān)于符號(hào)微積分的運(yùn)算函數(shù),用戶只要正確的調(diào)用這些函數(shù)就可以準(zhǔn)確地進(jìn)行符號(hào)微積分的運(yùn)算,減輕了手工運(yùn)算的勞苦,更避免了因疏忽引起的差錯(cuò)5.3符號(hào)微積分5.3.1符號(hào)極限和符號(hào)微分

1.符號(hào)極限MATLAB計(jì)算符號(hào)極限的函數(shù)為limit().其格式如下:?limit(f,x,a)?計(jì)算當(dāng)自變量x趨近于常數(shù)a時(shí),符號(hào)函數(shù)f(x)的極限值(即計(jì)算

)。當(dāng)x缺省時(shí),MATLAB將根據(jù)findsym()找出的第一自由變量作為自變量。當(dāng)a缺省時(shí),MATLAB將認(rèn)為是自變量趨近于0.?limit(f,x,a,'right')?計(jì)算自變量x從右邊趨近于a時(shí),符號(hào)函數(shù)f的極限值(即計(jì)算

)。?limit(f,x,a,'left')?計(jì)算自變量x從左邊趨近于a時(shí),符號(hào)函數(shù)f的極限值(即計(jì)算

)。編寫文件名為exm5_22的腳本文件:clear,clc,symsxtf1=limit(sin(x)/x,x,0)f2_left=limit(cot(x)^(t/log(x)),x,0,'left')f2_right=limit(cot(x)^(t/log(x)),x,0,'right')f3=limit((1+1/(3*x))^x,inf)在指令窗中運(yùn)行exm5_22.m后,結(jié)果為:f1=1f2_left=1/exp(t)f2_right=1/exp(t)f3=exp(1/3)

由執(zhí)行結(jié)果可知

;;;;?!纠?-22】分別計(jì)算

MATLAB中可用來(lái)計(jì)算符號(hào)表達(dá)式微分的指令形式多樣,主要有diff()、jacobian()和taylor(),調(diào)用格式分別為:?dfdtn=diff(f,t,n)?計(jì)算符號(hào)表達(dá)式f對(duì)符號(hào)變量t的n階微分(即計(jì)算).n缺省時(shí)默認(rèn)為計(jì)算一階微分1.t缺省時(shí)按照f(shuō)indsym()找尋的第一自變量求微分。?fj=jacobian(f(t))?計(jì)算多元符號(hào)表達(dá)式f(t)的一階微分雅克比(Jacobian)矩陣。雅可比矩陣定義為向量對(duì)向量的一階微分矩陣:2.符號(hào)微分

?ftlr=taylor(f,n,t,a)?計(jì)算符號(hào)表達(dá)式f(t)在t=a處的(n-1)階泰勒級(jí)數(shù)展開(即計(jì)算

)編寫文件名為exm5_23的腳本文件:

clear,clc,symsaxy;

f=[a,y^3;y*cos(x),log(x)];

dfdx=diff(f)%求矩陣f對(duì)x的一階導(dǎo)數(shù)

dfdy2=diff(f,y,2)%求矩陣f對(duì)y的二階導(dǎo)數(shù)

dfdxdy=diff(diff(f,x),y)%求二階混合導(dǎo)數(shù)

在指令窗中運(yùn)行exm5_23.m后,結(jié)果為:

dfdx=

[0,0]

[-y*sin(x),1/x]

dfdy2=

[0,6*y]

[0,0]

dfdxdy=

[0,0]

[-sin(x),0]【例5-23】已知函數(shù)矩陣,求

、

、

【例5-24】隱函數(shù)求導(dǎo)實(shí)例:(1)設(shè)

,求

分析:根據(jù)隱函數(shù)求導(dǎo)步驟:第一步令

,由指令計(jì)算

,

,第二步由

計(jì)算結(jié)果。編寫文件名為exm5_24_1的腳本文件:clear,symsxy;F=sin(y)+exp(x)-x*y-1;dFdx=diff(F,x)dFdy=diff(F,y)dydx=dFdx/dFdy在指令窗中運(yùn)行exm5_24_1..m后,結(jié)果為:dFdx=exp(x)-ydFdy=cos(y)-xdydx=(exp(x)-y)/(cos(y)-x)即

。編寫文件名為exm5_24_2的腳本文件:clear,clc,symsxyzf=[x+log(y*z);y^2+tan(z);sin(x)+cos(y)];t=[x,y,z];fj=jacobian(f,t)在指令窗中運(yùn)行exm5_24_2..m后,結(jié)果為:fj=[1,1/y,1/z][0,2*y,1+tan(z)^2][cos(x),-sin(y),0](2)設(shè),求f的Jacobian矩陣【例5-25】求

處展開的9階麥克勞林級(jí)數(shù)。編寫文件名為exm5_25的腳本文件:clear,clc,symsxtaylor(log(1+x),8,x,0)在指令窗中運(yùn)行exm5_25..m后,結(jié)果為:ans=x-1/2*x^2+1/3*x^3-1/4*x^4+1/5*x^5-1/6*x^6+1/7*x^75.3.2符號(hào)級(jí)數(shù)/序列求和和符號(hào)積分1.級(jí)數(shù)/序列的符號(hào)求和級(jí)數(shù)或者序列求和是高等數(shù)學(xué)中常見的運(yùn)算,MATLAB實(shí)現(xiàn)函數(shù)為symsum(),格式如下:?Sum=symsum(f,t,a,b)?計(jì)算序列/級(jí)數(shù)在指定變量t取區(qū)間[a,b]中所有整數(shù)時(shí)的和(即計(jì)算

)。如果t缺省時(shí),MATLAB按照f(shuō)indsym()找尋第一自變量。t可以取有限值,也可以是無(wú)窮大。用戶如果不指定t的區(qū)間,MATLAB將按照默認(rèn)計(jì)算區(qū)間

求和。【例5-26】序列/級(jí)數(shù)求和指令symsum()使用實(shí)例:

分別計(jì)算

的值編寫文件名為exm5_26的腳本文件:clear,clc,symsktf1=[t,k^3];f2=[1/(2*k-1)^2,(-1)^k/k];Sum1=simple(symsum(f1))%f1的第一自變量為tSum2=simple(symsum(f2,1,inf))%f1的唯一自變量為k在指令窗中運(yùn)行exm5_26.m后,結(jié)果為:Sum1=[1/2*t*(t-1),k^3*t]Sum2=[1/8*pi^2,-log(2)]【說(shuō)明】在符號(hào)求和運(yùn)算后結(jié)合化簡(jiǎn)指令,可以使輸出結(jié)果簡(jiǎn)潔易讀。

MATLAB實(shí)現(xiàn)符號(hào)積分指令為int(),該函數(shù)即可計(jì)算定積分,也可以計(jì)算不定積分,其調(diào)用格式如下:?S=int(f,v,a,b)?計(jì)算被積函數(shù)f關(guān)于變量v的定積分,積分區(qū)間為[a,b]。v缺省時(shí),MATLAB將以指令findsym()找尋的第一變量作為積分變量。當(dāng)a、b缺省時(shí),為計(jì)算表達(dá)式的不定積分。函數(shù)int()的嵌套使用可實(shí)現(xiàn)多重積分的計(jì)算。2.符號(hào)積分編寫文件名為exm5_27的腳本文件:clear,clc,symsxsymsappositives1=int(a^x*cos(x),0,pi)s2=int(1/x^p,1,inf)在指令窗中運(yùn)行exm5_27..m后,結(jié)果為:s1=-(log(a)*(a^pi+1))/(log(a)^2+1)s2=piecewise([1<p,1/(p-1)],[p<=1,Inf])由結(jié)果可知:

;

;

【例5-27】分別計(jì)算

,其中a、p都為正數(shù)。編寫文件名為exm5_28的腳本文件:clear,clc,symsabxF=[a*x,b*x^2;1/x,tan(x)];disp('TheintegralofFis')disp(int(F))在指令窗中運(yùn)行exm5_28.m后,結(jié)果為:TheintegralofFis[1/2*a*x^2,1/3*b*x^3][log(x),-log(cos(x))]【例5-28】計(jì)算

。分析:該題積分區(qū)域?yàn)閱挝粓A,如果采用直角坐標(biāo),積分區(qū)間可以設(shè)定為

,對(duì)應(yīng)于任意

。如果選用極坐標(biāo),極徑

,極角

。編寫文件名為exm5_29的腳本文件:%直角坐標(biāo)下計(jì)算積分clear,clc,symsxyrthetaS_d=int(int(sin(pi*(x^2+y^2)),y,-sqrt(1-x^2),sqrt(1-x^2)),x,-1,1)%極坐標(biāo)下計(jì)算積分S_p=int(int(r*sin(pi*r^2),r,0,1),theta,-pi,pi)執(zhí)行后的結(jié)果為:Warning:Explicitintegralcouldnotbefound.S_d=int((2^(1/2)*fresnelS(2^(1/2)*(1-x^2)^(1/2))*cos(pi*x^2))/2-(2^(1/2)*fresnelS(-2^(1/2)*(1-x^2)^(1/2))*cos(pi*x^2))/2+(2^(1/2)*fresnelC(2^(1/2)*(1-x^2)^(1/2))*sin(pi*x^2))/2-(2^(1/2)*fresnelC(-2^(1/2)*(1-x^2)^(1/2))*sin(pi*x^2))/2,x=-1..1)S_p=2。

,

【例5-29】計(jì)算

。編寫文件名為exm5_25的腳本文件:clear,clc,symsxyzF=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2);VF=vpa(F,8)%積分結(jié)果用8位有效數(shù)字顯示在指令窗中運(yùn)行exm5_25..m后,結(jié)果為:VF=224.92154【說(shuō)明】與數(shù)值積分比較,符號(hào)積分指令簡(jiǎn)單,但計(jì)算時(shí)會(huì)占用較長(zhǎng)的時(shí)間。當(dāng)積分上下限也為符號(hào)時(shí),MATLAB將給出冗長(zhǎng)的“封閉型”解析解,有時(shí)也會(huì)出現(xiàn)給不出解析解的現(xiàn)象。使用函數(shù)int()嵌套結(jié)構(gòu)時(shí),積分變量的先后次序必須要正確,否則MATLAB將會(huì)給出錯(cuò)誤結(jié)果。如果積分結(jié)果為符號(hào)常數(shù)時(shí),用戶可以結(jié)合指令vpa(),使輸出結(jié)果簡(jiǎn)短易讀?!纠?-30】計(jì)算

。

MATLAB求解代數(shù)方程或代數(shù)方程組的指令為solve(),調(diào)用格式為?S=solve(‘eq’,‘v’)?計(jì)算單個(gè)方程eq=0關(guān)于變量v的解S。eq可以是含等號(hào)的符號(hào)方程。v缺省時(shí)MATLAB將利用指令findsym()找尋第一自由變量作為求解變量。?[y1,y2,…yn]=solve(‘eq1’,‘eq2’,…,‘eqn’,‘v1’,‘v2’,…,'vn')?計(jì)算方程組eq1=0,eq2=0,…,eqn=0關(guān)于變量v1,v2…vn的解y1,y2,…,yn。如果只有一個(gè)輸出宗量,則該輸出宗量類型為構(gòu)架數(shù)組,MATLAB把各個(gè)解分別存放在此構(gòu)架數(shù)組的不同域中,每個(gè)域值為對(duì)應(yīng)域名的變量的解。v缺省時(shí)MATLAB將利用指令findsym()找尋n個(gè)自由變量作為求解變量。【說(shuō)明】當(dāng)代數(shù)方程不存在“封閉型”解析解又無(wú)其他自由參數(shù)時(shí),MATLAB將給出符號(hào)常數(shù)解。5.4符號(hào)方程的求解5.4.1符號(hào)代數(shù)方程的求解【例5-31】分別求解方程

,,編寫文件名為exm5_31的腳本文件:clear,clc,symsabcxs1=solve('(x+2)^x=2','x');%含等號(hào)的方程s1=vpa(s1,6)%輸出5位有效位數(shù)s2=solve('sin(x)','x')%不含等號(hào)的方程,與sinx=0等價(jià)s3=solve('a*x^2+b*x+c')%第一自變量為x在指令窗中運(yùn)行exm5_31.m后,結(jié)果為:s1=0.6983s2=0s3=-1/2*(b-(b^2-4*a*c)^(1/2))/a

-1/2*(b+(b^2-4*a*c)^(1/2))/a注意:如果方程的解為有限個(gè),MATLAB將逐個(gè)輸出其解;當(dāng)方程有無(wú)窮多個(gè)解時(shí),MATLAB只輸出0附近的一個(gè)數(shù)值解。;;

編寫文件名為exm5_32的腳本文件:clears=solve('x^2+2*y+1','x+3*z=4','y*z=-1');disp([blanks(8),'x',blanks(8),'y',blanks(8),'z'])%利用顯示函數(shù)disp(),便于閱讀disp(vpa([s.x,s.y,s.z],6))%結(jié)果顯示有效位數(shù)為6位在指令窗中運(yùn)行exm5_32.m后,結(jié)果為:[

溫馨提示

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

評(píng)論

0/150

提交評(píng)論