《新編MATLAB自學(xué)一本通》課件第9章 符號計算_第1頁
《新編MATLAB自學(xué)一本通》課件第9章 符號計算_第2頁
《新編MATLAB自學(xué)一本通》課件第9章 符號計算_第3頁
《新編MATLAB自學(xué)一本通》課件第9章 符號計算_第4頁
《新編MATLAB自學(xué)一本通》課件第9章 符號計算_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2025/4/30主要內(nèi)容符號對象和符號表達(dá)式

符號微積分符號方程求解

2025/4/30符號計算特點1.計算精確2.可應(yīng)用范圍有限

符號計算基于數(shù)學(xué)公式、定理并通過一系列推理、演繹得到方程的解或者數(shù)學(xué)表達(dá)式的值。對操作對象不進(jìn)行離散化和近似化處理。

實際科研和生產(chǎn)中遇到的問題絕大多數(shù)都無法獲得精確的符號解,這時我們不得不求助數(shù)值計算。3.對待符號計算態(tài)度

用其來完成公式推導(dǎo)和解決簡單的對計算時效性要求不高的問題,綜合符號計算和數(shù)值計算各自的優(yōu)點,視問題特點混合使用符號計算和數(shù)值計算。2025/4/30第一節(jié)符號對象和符號表達(dá)式

2025/4/30一、符號對象的創(chuàng)建

運行下列代碼,體會符號對象的創(chuàng)建方法和特點。>>a=sym('5');>>b=sym('b');>>symscde;>>whos

從以上代碼運行結(jié)果可以看出,要生成一個符號對象,可以利用

sym以及syms函數(shù),sym可以生成單個符號對象,而syms可以生成多個符號對象,符號對象的運算是完全精確的,沒有舍入誤差。2025/4/30二、符號表達(dá)式確定一個符號表達(dá)式中的符號變量可以用findsym函數(shù):

創(chuàng)建了符號對象,我們就可以創(chuàng)建各種各樣的符號表達(dá)式。譬如,創(chuàng)建符號變量a,b,c后如下都是符號表達(dá)式: z1=a+b+c; z2=sin(a+b+c); z3=a^b*gamma(c); findsym(expr) findsym(expr,n)

第一種用法是確認(rèn)表達(dá)式expr中所有自由符號變量,第二種用法是從表達(dá)式expr中確認(rèn)出距離x最近的n個符號變量。這個最近距離指的是變量第一個字符和x的ASCII碼值之差的絕對值,差絕對值相同時,ASCII碼值大的字符優(yōu)先。

2025/4/30三、運算符 MATLAB采用了重載(Overload)技術(shù),使得用來構(gòu)成符號表達(dá)式的運算符,無論在拼寫還是在使用方法上,都與數(shù)值計算中的算符完全相同。譬如“+”,“-”,“*”,“\”,“/”,“^”等 符號對象的比較中,沒有“大于”、“大于等于”,“小于”,“小于等于”的概念,而只有是否“等于”的概念,即“==”與“~=”。如果要判斷兩個符號數(shù)值的大小一般來說有兩種辦法,一種是利用double將其轉(zhuǎn)化成數(shù)值型的,另一種是利用sort+“==”或“~=”,譬如下面代碼:2025/4/30三、運算符>>a=sym('2');>>b=sym('3');>>double(a)<double(b)ans=1>>sa=sort([b,a])sa=[2,3]>>a==sa(1)ans=1

從上述代碼可以看出,上述兩種方法都間接實現(xiàn)了判斷大小。2025/4/30四、符號計算與數(shù)值計算結(jié)合利用符號計算得到結(jié)果時,有時需要將其轉(zhuǎn)化成數(shù)值型的以便后續(xù)數(shù)值計算利用。通過符號計算得到一個表達(dá)式時,想把它轉(zhuǎn)化成關(guān)于其中某個變量的數(shù)值函數(shù)。

>>formatlong>>a=vpa(pi,30)a=3.14159265358979323846264338328>>a1=double(a)a1=3.141592653589793>>a2=eval(a)a2=3.1415926535897932025/4/30四、符號計算與數(shù)值計算結(jié)合>>a3=single(a)a3=3.1415927>>a4=int8(a)a4=3>>whosNameSizeBytesClassAttributesa1x1118syma11x18doublea21x18doublea31x14singlea41x11int8

上述是對符號數(shù)值對象向數(shù)值對象轉(zhuǎn)化的討論,很多時候我們需要求符號表達(dá)式在不同的參數(shù)值下的具體值,說通俗點就是如何把具體的參數(shù)代入符號表達(dá)式。這時候可以利用eval和subs函數(shù)或者轉(zhuǎn)化成匿名函數(shù)2025/4/30四、符號計算與數(shù)值計算結(jié)合【例9.1-2】已知 ,求其二階導(dǎo)數(shù)在 處的值。>>symsxf=sin(x^x/x^2/exp(x));d2f=diff(f,x,2);%利用符號計算求f(x)的二階導(dǎo)數(shù)>>%第一種方法:利用subs函數(shù)求d2f在x=1時的值。d2fx1=subs(d2f,x,1)d2fx1=2.20822025/4/30四、符號計算與數(shù)值計算結(jié)合>>%第二種方法:x賦值1后,利用eval函數(shù)求d2f在x=1時的值x=1;eval(d2f)ans=2.2082>>%第三種方法:將d2f轉(zhuǎn)化成匿名函數(shù),求其在x=1時的值F=eval(['@(x)',vectorize(char(d2f))]);F(1)ans=2.2082

2025/4/30第二節(jié)符號微積分

2025/4/30一、極限、導(dǎo)數(shù)和級數(shù)的符號計算

1.極限【例9.2-1】求下列極限:

>>symsn >>limit(n^(n+1/2)/(exp(n)*gamma(n+1)),n,inf) ans= 1/(2*pi)^(1/2)

MATLAB中g(shù)amma函數(shù)即數(shù)學(xué)上的gamma函數(shù),有如下性質(zhì):gamma(n+1)=n!上述極限即著名的stirling公式,當(dāng)n趨近無窮時:2025/4/30一、極限、導(dǎo)數(shù)和級數(shù)的符號計算

2.求導(dǎo)數(shù)【例9.2-2】 ,求 。本例目的:演示求導(dǎo)運算是對矩陣元素逐個進(jìn)行的。>>symsatx;f=[a,t*log(x);sqrt(t),x^2+3*x];dfdt=diff(f,t)%矩陣f對t的一階導(dǎo)數(shù)dfdx2=diff(f,2)%矩陣f對x的二階導(dǎo)數(shù),由于是x,而f中含有x變量,故x可以省略dfdtdx=diff(diff(f,t),x)%求二階混合導(dǎo)數(shù)2025/4/30一、極限、導(dǎo)數(shù)和級數(shù)的符號計算

dfdt=[0,log(x)][1/(2*t^(1/2)),0]dfdx2=[0,-t/x^2][0,2]dfdtdx=[0,1/x][0,0]Jacobian矩陣求法,見例【例9.2-3】。2025/4/30一、極限、導(dǎo)數(shù)和級數(shù)的符號計算

3.求級數(shù)【例9.2-4】求下列無窮級數(shù): ,>>symskf1=symsum((k-2)/2^k,k,3,inf)A=[1/(2*k+1)^2,(-1)^k/3^k];f2=symsum(A,k,1,inf)

f1=1/2f2=[pi^2/8-1,-1/4]

2025/4/30二、符號積分計算

與數(shù)值積分相比,符號積分具有指令簡單,占用機(jī)時長等特點,因此一般復(fù)雜的積分運算都采用數(shù)值積分函數(shù)來計算。但某些情況下,特別是一些簡單的上下限為函數(shù)的多重積分,用符號積分計算會比調(diào)用數(shù)值積分函數(shù)計算簡單方便許多。求積分的指令如下:

intf=int(f,v) %求以v為自變量的函數(shù)f的不定積分

intf=int(f,v,a,b) %求以v為自變量的函數(shù)f從a到b的定積分 上述調(diào)用格式中v可以省略,v省略時,積分將針對findsym確定的變量來進(jìn)行。a,b作為積分上下限,實際輸入中可以為數(shù)值符號或者字母符號。

2025/4/30二、符號積分計算

【例9.2-5】求>>symsx>>s=int(1/(x*sqrt(x^2+1)),x)s=log(x)-log((x^2+1)^(1/2)+1)【例9.2-6】求 關(guān)于u的不定積分以及不指定積分變量情況下的不定積分。

2025/4/30二、符號積分計算

>>symsxuvf=[x*vv^2;sin(u)*vcos(u*x)];intfu=int(f,u)intf=int(f)

intfu=[u*v*x,u*v^2][-v*cos(u),sin(u*x)/x]

intf=[(v*x^2)/2,v^2*x][v*x*sin(u),sin(u*x)/u]從上面結(jié)果可以看出,在不指定積分變量情況下,int默認(rèn)是對x進(jìn)行積分。

2025/4/30二、符號積分計算

一些簡單的一般區(qū)域上的多重積分也可以利用int函數(shù)來計算,如下:【例9.2-7】求積分:

>>symsxyz>>Result=int(int(int((x+y)/z,z,x*y,2*x*y),y,x,2*x),1,2)Result=(35*log(2))/6%符號積分結(jié)果>>double(Result)%轉(zhuǎn)化成數(shù)值ans=4.043358553266348

2025/4/30第三節(jié)符號方程求解

2025/4/30一、符號代數(shù)方程求解【例9.3-1】求解如下方程:

,>>x=solve('2*sin(3*x-pi/4)=1')%解第一個方程x=(5*pi)/36(13*pi)/36>>x=solve('x+x*exp(x)-10')%解第二個方程x=matrix([[1.6335061701558463841931651789789]])>>double(x)%將符號解形式抓化成數(shù)值解ans=1.6335061701558462025/4/30一、符號代數(shù)方程求解【例9.3-2】求解如下方程組:>>[xy]=solve('1/x^3+1/y^3-28','1/x+1/y-4','x,y')x=11/3y=1/31

2025/4/30一、符號代數(shù)方程求解有的時候直接按照給出的方程組描述待求解的方程組時,solve會給不出解,這時候?qū)υ匠探M進(jìn)行變形往往會有截然不同的結(jié)果【例9.3-3】求下面方程組的解:直接編寫代碼如下無法求解:>>[xy]=solve('x+y-98','x^(1/3)+y^(1/3)-2','x,y')Warning:Explicitsolutioncouldnotbefound.>Insolveat98x=[emptysym]y=[]2025/4/30這時如果我們將原來的問題稍作變形,令 ,,則可以得到下面的求解代碼:>>[uv]=solve('u^3+v^3-98','u+v-2','u,v')u=5-3v=-35>>x=u.^3x=125-27>>y=v.^3y=-27125

2025/4/30二、符號常微分方程求解

1.R2008b之前的dsolve函數(shù) MATLABR2008a是MATLAB采用Maple符號計算內(nèi)核的最后一個版本,以這個版本的dsolve為例,來介紹Maple內(nèi)核下dsolve函數(shù)的用法。語法規(guī)則如下:

r=dsolve('eq1,eq2,...','cond1,con

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論