計算機代數系統-Maple教程(一至六章)_第1頁
計算機代數系統-Maple教程(一至六章)_第2頁
計算機代數系統-Maple教程(一至六章)_第3頁
計算機代數系統-Maple教程(一至六章)_第4頁
計算機代數系統-Maple教程(一至六章)_第5頁
已閱讀5頁,還剩143頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第一章Maple基礎

1初識計算機代數系統Maple

1.1Maple簡介

1980年9月,加拿大Waterloo大學的符號計算機研究小組成立,開始了符號計算在計算機上實現

的研究項目,數學軟件Maple是這個項目的產品。目前,這仍是一個正在研究的項目。

Maple的第一個商業版本是1985年出版的。隨后幾經更新,到1992年,Windows系統下的Maple2面

世后,Maple被廣泛地使用,得到越來越多的用戶。特別是1994年,Maple3出版后,興起了Maple熱。

1996年初,M叩le4問世,1998年初,Maple5正式發行。目前廣泛流行的是Maple7以及2002年5月

面市的Maple8o

M叩le是一個具有強大符號運算能力、數值計算能力、圖形處理能力的交互式計算機代數系統

(ComputerAlgebraSystem)o它可以借助鍵盤和顯示器代替原來的筆和紙進行各種科學計算、數學推理、

猜想的證明以及智能化文字處理。

Maple這個超強數學工具不僅適合數學家、物理學家、工程師,還適合化學家、生物學家和社會學

家,總之,它適合于所有需要科學計算的人。

1.2Maple結構

Maple軟件主要由三個部分組成:用戶界面(Iris)、代數運算器(Kernel)、外部函數庫(External

library),用戶界面和代數運算器是用C語言寫成的,只占整個軟件的一小部分,當系統啟動時;即被

裝入,主要負責輸入命令和算式的初步處理、顯示結果、函數圖象的顯示等。代數運算器負責輸入的編

譯、基本的代數運算(如有理數運算、初等代數運算等)以及內存的管理。Maple的大部分數學函數和過

程是用Maple自身的語言寫成的,存于外部函數庫中。當一個函數被調用時,在多數情況下,Maple會

自動將該函數的過程調入內存,?些不常用的函數才需要用戶自己調入,如線性代數包、統計包等,這

使得Maple在資源的利用上具有很大的優勢,只有最有用的東西才留駐內存,這保證了M叩le可以在較

小內存的計算機上正常運行。用戶可以查看Maple的非內存函數的源程序,也可以將自己編的函數、過

程加到Maple的程序庫中,或建立自己的函數庫。

1.3Maple輸入輸出方式

為了滿足不同用戶的需要,M叩le可以更換輸入輸出格式:從菜單“QptionsIInputDisplay和Qut

Display下可以選擇所需的輸入輸出格式。

Maple7有2種輸入方式:Maple語言(MapleNotation)和標準數學記法(StandardMathNotation)?Maple

語言是利結構良好、方便實用的內建高級語言,它的語法和Pascal或C有一定程度的相似,但有很大

差別。它支持多種數據操作命令,如函數、序列、集合、列表、數組、表,還包含許多數據操作命令,

如類型檢驗、選擇、組合等。標準數學記法就是我們常用的數學語言。

啟動Maple,會出現新建文檔中的“[>”提示符,這是Maple中可執行塊的標志,在“>”后即可

輸入命令,結束用“;”(顯示輸出結果)或者“:”(不顯示輸出結果)。但是,值得注意的是,并不是說

Maple的每行只能執行一句命令,而是在一個完整的可執行塊中健入回車之后,Maple會執行當前執

行塊中所有命令(可以是若干條命令或者是一段程序)。如果要輸入的命令很長,不能在一行輸完,可以

換行輸入,此時換行命令用"shift+Enter”組合鍵,而在最后一行加入結束標志或“:”,也可在

非末行尾加符號完成。

M叩le7有4種輸出方式:Maple語言、格式化文本(CharacterNotation)>固定格式記法(Typeset

Notation)標準數學記法(StandardMathNotation)。通常采用標準數學記法。

M叩le會認識一些輸入的變量名稱,如希臘字母等。為了使用方便,現將希臘字母表羅列如"輸

入時只需錄入相應的英文,要輸入大寫希臘字母,只需把英文首字母大寫:

a0y8£7eIK2A

alphabetagammadeltaepsilonzetaetathetaiotakappalambdamu

VO71parV。ZwCD

nuxiomicronPirhosigmatauupsilonphichipsiomega

有時候為了美觀或特殊需要,可以采用Maple中的函數或程序設計方式控制其輸出方式,如下例:

>forito10do

printf(ni=%+2dandiA(l/2)=%+6.3fn,i,eval(sqrt(i)));

od;

i=+landiA(l/2)=+1.000i=+2andiA(l/2)=+1.414i=+3andi八(1⑵=+1.732i=+4andiA(l/2)=+2.000i=+5and

iA(l/2)=+2.236i=+6andiA(l/2)=+2.449i=+7andiA(l/2)=+2.646i=+8andiA(l/2)=+2.828i=+9and

iA(l/2)=+3.000i=+10andiA(l/2)=+3.162

+2d的含義是帶符號的十進位整數,域寬為2。顯然,這種輸出方式不是我們想要的,為了得到更

美觀的輸出效果,在語句中加入換行控制符“\n”即可:

>forito10do

printf(ni=%+2dandiA(l/2)=%+6.3f\nn,i,eval(sqrt(i)));

od;

i=+landiA(1/2)=+1.000

i=+2andi八(1/2)=+1.414

i=+3andiA(1/2)=+1.732

i=+4andiA(1/2)=4-2,000

i=+5andiA(l/2)=+2.236

i=+6andiA(1/2)=4-2,449

i=+7andiA(l/2)=+2.646

i=+8andiA(1/2)=4-2.828

i=+9andiA(1/2)=4-3.000

i=+10andiA(l/2)=+3.162

再看下例:將輸入的兩個數字用特殊形式打印:

>niceP:=proc(x,y)

printf(Hvalueofx=%6.4f,valueofy=%6.4fM,x,y);

endproc;

niceP:=proc(x,y)printf(nvalueofx=%6.4f,valueofy=%6.4F',x,y)endproc

>niceP(2.4,2002,204);

valueofx=2.4000?valueofy=2002.2040

1.4Maple聯機幫助

學會尋求聯機幫助是掌握一個軟件的鑰匙。Maple有一個非常好的聯機幫助系統,它包含了90%以

上命令的使用說明。要了解M叩le的功能可用菜單幫助“Help”,它給出Maple內容的瀏覽表,這是一

種樹結構的目錄表,跟有…的詞條說明其后還有子目錄,點擊這樣的詞條后子目錄就會出現(也可以用

Tab鍵和up,down選定)。可以從底欄中看到函數命令全稱,例如,我們選graphics—,出現該條的子

目錄,從中選2D…,再選plot就可得到作函數圖象的命令plot的完整幫助信息。一般幫助信息都有實

例,我們可以將實例中的命令部分拷貝到作業面進行計算、演示,由此可了解該命令的作用。

在使用過程中,如果對一個命令把握不準,可用鍵盤命令對某個命令進行查詢。例如,在命令區輸

入命令”?plot"(或help(plot);),然后回車將給出plot命令的幫助信息,或者將鼠標放在選定的要查詢

的命令的任何位置再點擊菜單中的“旦elp”即可。

2M叩le的基本運算

2.1數值計算問題

算術是數學中最古老、最基礎和最初等的一個分支,它研究數的性質及其運算,主要包括自然數、

分數、小數的性質以及他們的加、減、乘、除四則運算。在應用Maple做算術運算時,只需將Maple當

作一個“計算器”使用,所不同的是命令結束時需加“;”或

在Maple中,主要的算術運算符有"+”(加)、“-"(減卜“*”(乘)、"/”(除)以及""(乘方或騫,

或記為**),算術運算符與數字或字母一起組成任意表達式,但其中“+是最基本的運算,其余

運算均可歸諸于求和或乘積形式。算述表達式運算的次序為:從左到右,圓括號最先,暴運算優先,其

次是乘除,最后是加減。值得注意的是,“人”的表達式只能有兩個操作數,換言之,。人力八。是錯誤的,

而“+”或“*”的任意表達式可以有兩個或者兩個以上的操作數。

Maple有能力精確計算任意位的整數、有理數或者實數、復數的四則運算,以及模算術、硬件浮點

數和任意精度的浮點數甚至于矩陣的計算等等。總之,Maple可以進行任意數值計算。

但是,任何軟件或程序畢竟只是人們進行科學研究的一種必要的輔助,即便它有很多優點,但也有

它的局限性,為了客觀地認識數學軟件、認識Maple,下面通過兩個簡單例子予以說明。

第一個簡單的數值計算實例想說明Maple數值計算的答案的正確性:

>3!!!;

26012189435657951002049032270810436111915218750169457857275418378508356311569473822406785

77958130457082619920575892247259536641565162052015873791984587740832529105244690388811884

12376434119195104550534665861624327194019711390984553672727853709934562985558671936977407

00037004307837589974206767840169672078462806292290321071616698672605489884455142571939854

99448939594496064045132362140265986193073249369770477606067680670176491669403034819961881

45562519559256691883082551494294759653727484562462882423452659778973774089646655399243592

87862125159674832209760295056966999272846705637471375330192483135870761254126834158601294

47566011455420749589952563543068288634631084965650682771552996256790845235702552186222358

13001670083452344323682193579318470195651072978180435417389056072742804858399591972902172

66122912984205160675790362323376994539641914751755675576953922338030568253085999774416757

843528I591346134039460490I269542028838347101363733824484506660093348484440711931292537694

65735433737572477223018153403264717753198453734147867432704845798378661870325740593892421

570969599463055752106320326349320922073832092335630992326750440I7017605720260108292880423

35606643089888710297380797578013056049576342838683057190662205291174822510536697756603029

57404338798347151855260280533386635713910104633641976909739743228599421983704697910995630

33896046758898657957111765666700391567481531159439800436253993997312030664906013253113047

19028898491856203766669164468791125249193754425845895000311561682974304641142538074897281

72337595538066171980140467793561479363526626568333950976000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000000

上述運算結果在IBMPC機(1G,128M)上計算只需要0.01秒,得到如此復雜的結果(1747位),?個

自然的問題是:答案正確嗎?

為了回答這個問題,我們借助于數值分析方法,由Stiring公式

?!?J2加?n"-exp(-n)

可得:720!。2.60091x101746,前三位數字與Maple輸出結果相同,且兩者結果均為1747位。另

外,在720!的計算中,5的因子的個數為:

這些5與足夠多的2相乘將得到178個0,而Maple的輸出結果中最后178位數為零。由此,可以

相信M叩le結果的正確性。

另一個例子則想說明Maple計算的局限性:

(一8產=?(-8)2/6=?

Maple在處理問題時,為了避免失根,從不求算術式的近似值,分數則化簡為既約分數。因此,在

Maple中很容易得到:

(_8片=(一8產6

顯然這是錯誤的。這一點可以從代數的角度予以分析。

不妨設(一8產=4貝I"+8=0,即(x+2)(尤2—2x+4)=0,顯然(—8產有3個結果,-2是其

實數結果。

另一方面,設(一8尸6=x,則f+(_8>=0,g|J:

(x3+8)(--8)=(x+2)(%-2)(x2-2x+4)(x2+2x+4)=0

顯然(-8產6有6個結果,-2、2是其實數結果。

這個簡單的例子說明了Maple在數值計算方面絕對不是萬能的,其計算結果也不是完全正確的,但

是,通過更多的實驗可以發現:Maple只可能丟失部分結果,而不會增加或很少給出完全錯誤的結果(如

上例中Maple的浮點數結果皆為1.000000000+1.732050807/)o這一點提醒我們,在利用Maple或其

他任何數學軟件或應用程序進行科學計算時,必須運用相關數學基礎知識校驗結果的正確性。

盡管M叩le存在缺陷(實際上,任何一個數學軟件或程序都存在缺陷),但無數的事實說明Maple仍

然不失為一個具有強大科學計算功能的計算機代數系統。事實上,Maple同其他數學軟件或程序一樣只

是科學計算的一個輔助工具,數學基礎才是數學科學中最重要的。

2.1.1有理數運算

作為一個符號代數系統,Maple可以絕對避免算術運算的舍入誤差。與計算器不同,Maple從來不

自作主張把算術式近似成浮點數,而只是把兩個有公因數的整數的商作化簡處理。如果要求出兩個整數

運算的近似值時;只需在任意一個整數后加(或“.0”),或者利用“evalf”命令把表達式轉換成浮

點形式,默認浮點數位是10(即:Digits:=10,據此可任意改變浮點數位,如Digits:=20)。

>12!+(7*8A2)-12345/125;

11975048731

25

>123456789/987654321;

13717421

109739369

>evalf(%);

.1249999989

>10!;100*100+1000+10+1;(100+100)*100-9;

3628800

11011

19991

>big_number:=3A(3A3);

big_number:=7625597484987

>length(%);

13

上述實驗中使用了一個變量“big_number”并用“:=”對其賦值,與Pascal語言一樣為一個變量

賦值用的是“:=”。而另一個函數“length”作用在整數上時是整數的十進制位數即數字的長度。“%”

是一個非常有用的簡寫形式,表示最后一次執行結果,在本例中是上一行輸出結果。再看下面數值計算

例子:

1)整數的余(irem)/商(iquo)

命令格式:

irem(m,n);#求01除以n的余數

irem(m,n,'q');#求111除以n的余數,并將商賦給q

iquo(m,n);#求01除以n的商數

iquo(m,n,'r');#求01除以n的商數,并將余數賦給r

其中,m,n是整數或整數函數,也可以是代數值,此時,irem保留為未求值.

>irem(2002,101,'q');#求2002除以101的余數,將商賦給q

83

>q;#顯示q

19

>iquo(2002,101,'r');#求2002除以101的商,將余數賦給r

19

>r:并顯示r

83

>irem(x,3);

irem(x,3)

2)素數判別(isprime)

素數判別一直是初等數論的一個難點,也是整數分解問題的基礎。Maple提供的isprime命令可以

判定?個整數n是否為素數。命令格式:isprime(n);

如果判定n可分解,則返回false,如果返回true,則n“很可能”是素數。

>isprime(2A(2-4)+1);

true

>isprime(2A(2A5)+1);

false

上述兩個例子是一個有趣的數論難題。形如尸"=22”+1的數稱為Fermat數,其中的素數稱為Fermat

素數,顯然,&=3、F|=5、F2=17.F3=257、F4=65537都是素數。Fermat曾經猜想所有的F”都是素數,

但是Euler在1732年證明了F5=641?6700417不是素數。目前,這仍是一個未解決的問題,人們不知道

還有沒有Fermat素數,更不知道這樣的素數是否有無窮多。

3)確定第i個素數(ithprime)

若記第1個素數為2,判斷第i個素數的命令格式:ithprime⑴:

>ithprime(2002);

17401

>ithprime(10000);

104729

4)確定下一個較大(nextprime)/較小(prevprime)素數

當n為整數時,判斷比n稍大或稍小的素數的命令格式為:

nextprime(n);

prevprime(n);

>nextprime(2002);

2003

>prevprime(2002);

1999

5)一組數的最大值(max)/最小值(min)

命令格式:max(xl,x2,…,xn);#求x1,x2,…,Xn中的最大值

min(xl,x2,…,xn);#求x”x2,…,Xn中的最小值

>max(1/5,In(3),9/17,-infinity);

ln(3)

>min(x+1,x+2,y);

min(y,x+1)

6)模運算(mod/modp/mods)

命令格式:emodm;#表達式e對m的整數的模運算

modp(e,m);#e對正數m的模運算

mods(e,m);#e對m負對稱數(即-m)的模運算

、mod'(e,m);#表達式e對m的整數的模運算,與emodm等價

值得注意的是,要計算i=modm(其中i是一整數),使用這種“明顯的”語法是不必要的,因為在

計算模m之前,指數要先在整數(可能導致一個非常大的整數)上計算。更適合的是使用惰性運算符“&八”

即:i&八nmodm,此時,指數運算將由mod運算符智能地處理。另一方面,mod運算符的左面優先比

其他運算符低,而右面優先高于+和■,但低于*和

>2002mod101;

83

>modp(2002,101);

83

>mods(49,100);

49

>mods(51,100);

-49

>2A101mod2002;#同2&A101mod2002;

1124

7)隨機數生成器(rand)

命令格式:

rand();#隨機返回一個12位數字的非負整數

rand(a..b);#調用rand(a..b)返回一個程序,它在調用時生成一個在范圍[a,b]內的隨機數

>rand();

427419669081

>myproc:=rand(1..2002):

>myproc();

1916

>myproc();

1204

注意,rand(n)是rand(0..n-l)的簡寫形式.

2.1.2復數運算

復數是Maple中的基本數據類型。虛數單位i在Maple中用I表示。在運算中,數值類型轉化成復

數類型是自動的,所有的算術運算符對復數類型均適用。另外還可以用Re()、Im()、conjugate)和

argument。等函數分別計算實數的實部、虛部、共輒復數和幅角主值等運算。試作如下實驗:

>complex_number:=(1+2*1)*(3+4*1);

complex_numher:=-5+101

>Re(%);Im(%%);conjugate(%%%);argument(complex_number);

-5

10

-5-10Z

-arctan(2)+兀

值得注意的是上行命令中均以”結束,因此不能將命令中的2個%或3個%(最多只能用3個%)改

為1個%,因為%表示上一次輸出結果,若上行命令改為結束,則均可用1個%。

為了在符號表達式中進行復數運算,可以用函數evalc(),函數evalc把表達式中所有的符號變量都

當成實數,也就是認為所有的復變量都寫成a+4的形式,其中a、b都是實變量。另外還有一些實用

命令,分述如下:

1)絕對值函數

命令格式:abs(expr);

當expr為實數時,返回其絕對值,當expr為復數時,返回復數的模.

>abs(-2002);#常數的絕對值

2002

>abs(l+2*I);#復數的模

A

>abs(sqrt(3)*I*uA2*v);#復數表達式的絕對值

V3u2vI

>abs(2*x-5);#函數表達式的絕對值

|2X-5|

2)復數的幅角函數

命令格式:argument(x);#返回復數x的幅角的主值

>argument(64-ll*I);

>argument(exp(4*Pi/3*I));

2

-371

3)共麗復數

命令格式:conjugate(x);#返回X的共甄復數

>conjugate(6+8*I);

6-8/

>conjugate(exp(4!5:Pi/3*I));

_;+)萬

2.1.3數的進制轉換

數的進制是數值運算中的一個重要問題。而在Maple中數的進制轉換非常容易,使用convert命令

即可。

命令格式:convert(expr,form,arg3,...);

其中,expr為任意表達式,form為一名稱,arg3,可選項。

下面對其中常用數的轉換予以概述。而convert的其它功能將在后敘章節詳述。

1)基數之間的轉換

命令格式:

convert(n,base,beta);#將基數為10的數n轉換為基數為beta的數

convert(n,base,alpha,beta);#將基數為alpha的數字n轉換為基數為beta的數

>convert(2003,base,7);#將10進制數2002轉換為7進制數,結果為:(5566

[1,6,5,5]

>convert([1,6,5,5],base,7,10);#將7進制數5561轉換為10進制數

[3,0,0,2]

>convert(2002,base,60);#將十進制數2002轉換為60進制數,得33(分鐘)22(秒)

[22,33]

2)轉換為二進制形式

命令格式:convert(n,binary);

其功能是將十進制數n轉換為2進制數。值得注意的是,數可以是正的,也可以是負的,或者是整

數,或者是浮點數,是浮點數時情況較為復雜。

>convert(2002,binary):

11111010010

>convert(-1999,binary);

-11111001111

>convert(1999.7,binary);

.11111001111011

3)轉換為十進制形式

其它數值轉換為十進制的命令格式為:

convert(n,decimal,binary);#將一個2進制數n轉換為10進制數

convert(n,decimal,octal);#將一個8進制數n轉換為1()進制數

convert(string,decimal,hex);#將一個16進制字符串string轉換為10進制數

>convert(l1111010010,decimal,binary);

2002

>convert(-1234,decimal,octal);

-668

>convert(M2A.CH,decimaLhex);

42.75000000

4)轉換為16進制數

將自然數n轉換為16進制數的命令格式為:convert(n,hex);

>convert(2002.hex);converl(1999?hex);

7D2

7CF

5)轉換為浮點數

命令格式:convert(expr,float);

注意,convert/float命令將任意表達式轉換為精度為全局變量Digits的浮點數,且僅是對evalf的調

用。

>convert(1999/2002,float);

.9985014985

>convert(Pi,float);

3.141592654

2.2初等數學

初等數學是數學的基礎之一,也是數學中最有魅力的一部分內容。通過下面的內容我們可以領略

Maple對初等數學的駕馭能力,也可以通過這些實驗對Maple產生一些感性認識。

2.2.1常用函數

作為一個數學工具,基本的數學函數是必不可少的,Maple中的數學函數很多,現例舉一二如下:

指數函數:exp

一般對數:k)g[a]

自然函數:In

常用對數:log10

平方根:sqrt

絕對值:abs

三角函數:sin、cos,tan、sec、esc、cot

反三角函數:arcsin、arccos、arctan、arcsec、arccsc>arccot

雙曲函數:sinh>cosh>tanh、sech、csch、coth

反雙曲函數:arcsinh、arccosh、arclanh>arcsech、arccsch>arccoth

貝賽爾函數:BesselRBesselJ>BesselK>BesselY

Gamma函數:GAMMA

誤差函數:erf

函數是數學研究與應用的基礎之一,現通過一些實驗說明Maple中的函數的用法及功能。

1)確定乘積和不確定乘積

命令格式:product(f,k);

product(f,k=m..n);

product(f,k=alpha);

product(f,k=expr);

其中,f—任意表達式,k—乘積指數名稱,m,n—整數或任意表達式,alpha—代數數RootOf,

包含k的任意表達式。

>product(kA2,k=1..10);#計算上?關于]]()的連乘

13168189440000

>product*八2,k);#計算々2的不確定乘積

「(一)2

>product(a[k|,k=0..5);#計算a,(i=0..5)的連乘

aoaia24%%

>product(a[k],k=0..n);#計算a,(i=0..n)的連乘

a

kn=0

>Product(n+k,k=0..m)=product(n+k,k=0..m);#計算(計1<)的連乘,并寫出其惰性表達式

>product(k,k=RootOf(xA3-2));#計算x3—2的三個根的乘積

product命令計算符號乘積,常常用來計算一個公式的確實或不確實的乘積。如果這個公式不能求值

計算,Maple返回「函數。典型的例子是:

>product(x+k,k=0..n-1);

r(x+〃)

TuT

如果求一個有限序列值的乘積而不是計算一個公式,則用mul命令。如:

>mul(x+k,k=0..3);

x(x+1)(x+2)(x+3)

2)指數函數

計算指數函數exp關于x的表達式的命令格式為:exp(x);

>exp(1);

>evalf(%);

2.718281828

>exp(1.29+2*1);

-1.511772633+3.303283467I

>evalc(exp(x+I*y));

e'cos(y)+/e"sin(y)

3)確定求和與不確定求和sum

命令格式:sum(f,k);

sum(f,k=m..n);

sum(f,k=alpha);

sum(f,k=expr);

其中,f—任意表達式,k一乘積指數名稱,m,n一整數或任意表達式,alpha—代數數RootOf,expr—

不含k的表達式。

>Sum(kA2,k=l..n)=sum(kA2,k=l..n);

a1711

E4~=5("+1)—5(〃+1)+工〃+大

A=l3266

>Sum(kA3,k=l..n)=sum(kA3,k=l..n);

n

E_/=:i(〃+1)T(i〃+1)3+:i5+1)2

>Sum(kA4,k=l..n)=sum(kA4,k=l..n);

niii1?

£=s("+1尸_,+1)4+R(〃+])3_n_

k?UrJVZ

>Sum(l/k!,k=0..infinity)=sum(1/k!,k=0..infinity);

>sum(a[k]*x[k],k=0..n);

n

ax

Skk

k=0

>Sum(k/(k+1),k)=sum(k/(k+1),k);

1/T=ik+i)

>sum(k/(k+1),k=RootOf(xA2-3));

3

sum函數可計算一個公式的確定和與不確定和,如果M叩le無法計算封閉形式,則返回未求值的結

果。值得注意的是,在sum命令中將f和k用單引號括起來,可避免過早求值。這一點在某些情況下是

必需的。

>Sum('k','k'=0..n)=sum('k','k'=0..n);

G1911

A)222

如果計算一個有限序列的值,而不是計算一個公式,可用add命令。如:

>add(k,k=l..100);

5050

盡管sum命令常常用于計算顯式求和,但在程序設計中計算一個顯式和應該使用add命令。

另外,sum知道各種求和方法,并會對各類發散的求和給出正確的結果,如果要將求和限制為收斂

求和,就必須檢查顯式的收斂性。

3)三角函數/雙曲函數

命令格式:sin(x);cos(x);tan(x);cot(x);sec(x);csc(x);

sinh(x);cosh(x);tanh(x);coth(x);sech(x);csch(x);

其中,x為任意表達式。

值得注意的是三角函數/雙曲函數的參數以弧度為單位。Maple提供了利用常見三角函數/雙曲函數

恒等式進行化簡和展開的程序,也有將其轉化為其它函數的命令convert.

>Sin(Pi)=sin(Pi):

Sin(兀)=0

>coth(1.9+2.1*I);

.9775673582+.03813995737I

>expand(sin(x+y));#展開表達式

sin(x)cos(y)+cos(x)sin(y)

>combine(%);#合并表達式

sin(x+y)

>convert(sin(7*Pi/60),*radical*);

(g/y+0)/5一萬一乜般(在+1)/+正后(后+1)

>evalf(%);

.3583679496

但有趣的是,combine只對sin,cos有效,對tan,cot竟無能為力.

4)反三角函數/反雙曲函數

命令格式:arcsin(x);arccos(x);arctan(x):arccot(x);arcsec(x);arccsc(x);

arcsinh(x);arccosh(x);arctanh(x);arccoth(x);arcsech(x);arccsch(x);

arctan(y,x);

其中,x,y為表達式。反三角函數/反雙曲函數的參數必須按弧度計算。

算子記法可用于對于反三角函數和反雙曲函數。例如,sin@@(-l)求值為arcsin.

>arcsinh(l);

ln(l+VT)

>cos(arcsin(x));

>arcsin(1.9+2.1*I);

.7048051446+1.7386173511

5)對數函數

命令格式:]n(x);#自然對數

log[a](x);#一般對數

loglO(x);#常用對數

一般地,在ln(x)中要求x>0。但對于復數型表達式x,有:

ln(x)=ln(abs(x))+/*argument(x)(其中,一萬<argument(^)<兀)

>ln(2002.0);

7.601901960

>111(3+4*1);

ln(3+4Z)

>evalc(%);#求出上式的實部、虛部

ln(5)+/arctan

>loglO(lOOOOOO);

ln(1000000)

ln(10)

>simplify(%);#化簡上式

6

2.2.2函數的定義

Maple是一個計算機代數系統,帶未知或者已知字母變量的表達式是它的基本數據形式。一個筒單

的問題是,既然表達式中可以包含未知變量,那么它是不是函數呢?試看下面一個例子:

>f(x):=a*xA2+b*x+c;

f(x):=ax2+bx+c

可以看出,Maple接受了這樣的賦值語句,但f(x)是不是一個函數呢?要回答這個問題,一個簡單

的方法是求函數值:

>f(x),f(0),f(1/a);

ax2+bx+c,f(0),

由上述結果可以看出,用賦值方法定義的f(x)是一個表達式而不是一個函數,因為f(x)不能把所定

義的“自變量”或者“參數”轉換成別的變量或表達式。但從賦值“過程”可以看出,Ax)雖然也算是

一個“函數”,但卻是一個沒有具體定義的函數:

>print(f);

proc()optionremember;'procname(args)'endproc

事實上,我們所做的賦值運算,只不過是在函數/■的記憶表(remembertable)中加入了f(x)在x上的

值,當我們把自變量換作0或1/。時,式x)的記憶表中沒有對應的表項,所以輸出結果就是抽象的表達式。

在Maple中,要真正完成一個函數的定義,需要用算子(也稱箭頭操作符):

>f:=x->a*xA2+b*x+c;

f:=xax2+bx+c

>f(x),f(0),f(1/a);

2八lb

ClX+。X+C,C,---1-----FC

aa

多變量的函數也可以用同樣的方法予以定義,只不過要把所有的自變量定成一個序列,并用一個括

號“()”將它們括起來(這個括號是必須的,因為括號運算優先于分隔符“,”)。

>f:=(x,y)->xA2+yA2;

/:=(x,y)x-+y2

>f(1,2);

5

>f:=(x,y)->a*x*y*exp(xA2+yA2);

22

r/\、(X+y)

j:=(x.y)axye

綜上所述,箭頭操作符定義函數的方式一般為:

一元函數:參數->函數表達式

多多函數:(參數序列),函數表達式

無參數函數也許不好理解,但可以用來定義常函數:

>E:=()->exp(1);

E:=()->e

>E();

e

>E(x);

e

另一個定義函數的命令是unapply,其作用是從一個表達式建立一個算子或函數。

定義一個表達式為expr的關于x加函數f的命令格式為:f:=un叩ply(expr,x);

定義一個表達式為expr的關于x,y,…的多元函數f的命令格式由:f:=unapply(expr,x,y,...);

>f:=unapply(xA4+xA3+xA2+x+l,x);

/:=x->x4+x3+x2+X+1

>f(4);

溫馨提示

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

評論

0/150

提交評論