當前位置:編程學習大全網 - 編程語言 - 誠請計算機高手幫忙!!!!!!!!!!!!

誠請計算機高手幫忙!!!!!!!!!!!!

1.1 計算機代數系統的發展歷史

什麽是計算機代數系統? 從歷史的角度來看\COMPUTE” 的涵義是\數值的計算". 數值

計算的涵義不僅僅是數的算術計算, 還包括其它復雜的計算, 例如: 數學函數的計算、求多項式

的根、矩陣的計算、矩陣特征值的計算等等. 數值計算的壹個本質的特征是它不能保證絕對的

準確, 原因在於, 在數值計算的過程中我們是用浮點數進行計算的, 對於簡單的問題, 我們可以

用紙和筆手工計算, 對於復雜的問題, 就需要用計算器或計算機進行計算. 然而, 對計算機來說,

要想絕對精確的表達壹個浮點數幾乎是不可能的, 在計算的過程中必然會產生誤差.

數學的計算除了數值計算以外還有另壹個重要的分枝, 我們稱之為符號計算或代數計算. 簡

單的講, 就是對代表數學對象的符號進行計算. 這些符號可以代表整數、有理數、實數、復數或

代數數, 也可以代表其它的數學對象如多項式、有理函數、矩陣、方程組, 或者其它抽象的數學

對象如群、環、域等等. 對於這些抽象的數學符號, 我們通常是手工計算的, 這也是數學家傳統

的工作方式. 然而隨著計算機技術的發展, 以及對符號算法的深入研究, 用計算機代替人工進行

符號計算已經成為可能.

從二十世紀六十年代以來, 符號計算這個研究領域獲得了極大的發展. 壹系列符號計算算

法的提出為現代計算機代數系統奠定了理論基礎. 比較著名的算法包括: 計算多項式理想的

Grobner 基算法、多項式分解的Berlekamp 算法、計算有理函數積分的Risch 算法.

在二十世紀六十年代, 比較流行的計算機程序語言是FORTRAN 和ALGOL. 這兩種語言

主要是用來作數值計算的, 至今FORTRAN 依然是數值計算領域的標準語言之壹. 然而FORTRAN 語言和ALGOL 語言並不適合於編寫符號計算軟件. 六十年代初出現的LISP 語言為符

號計算軟件提供了合適的語言環境, 因此早期的符號計算軟件都是用LISP 語言編寫的. 其中最

著名的符號計算系統是REDUCE, REDUCE 系統是由Stanford 大學的Tony Hearn 開發的基

於LISP 語言的交互式符號計算系統, 最初的目的是用來進行物理計算. 到了二十世紀七十年代

初, 由麻省理工學院的Joel Moses, Willian Martin 等人開發的MACSYMA 系統誕生了, 它是那

個時代功能最強大的符號計算系統. 它的功能除了標準的代數計算以外, 還包括極限的計算、符

號積分、解方程等. 事實上, 許多符號計算的標準算法都是由麻省理工學院的研究小組提出的.

由G. Collins 和R. Loos 開發的SAC/ALDES 系統是另外壹種類型的符號計算系統, 它的

前身是G. Collins 在IBM 編寫的PM 系統(它是壹個處理多項式的符號計算系統). SAC 是壹

個非交互的系統, 它是由ALDES(ALgebraic DEScription) 語言編寫的模塊組成的, 並且帶有壹

個轉換程序, 可以把結果轉換成FORTRAN 語言. 到了1990 年, H. Hong 用C 語言重寫了SAC

系統, 形成了新的SACLIB 系統. 這個系統提供了完整的C 語言源代碼, 可以自由的從國際互

聯網上下載.

在二十世紀七十年代的第四個通用的符號計算系統是muMATH. 它是由Hawaii 大學的

David Stoutemyer 和Albert Rich 開發的第壹個可以在IBM 的PC 機上運行的計算機代數系統.

1

2 第壹章Maple 系統簡介

它所使用的開發語言是LISP 語言的壹個子集稱為muSIMP.

進入二十世紀八十年代, 隨著個人PC 機的普及, 計算機代數系統也獲得了飛速的發展. 在

這個時代推出的計算機代數系統大部分是用C 語言編寫的, 比較著名的系統包括Maple, Mathematica, DERIVE 等. 有關Maple 的特點我們將在後面介紹, 這裏, 我們簡單介紹壹下DERIVE

和Mathematica.

DERIVE 是muMATH 的後繼版本, 它是第壹個在PC 機上運行的符號計算系統.DERIVE

具有友好的菜單驅動界面和圖形接口, 可以很方便的顯示二維和三維圖形. 它唯壹的缺陷是沒

有編程功能, 直到1994 年DERIVE 的第三版問世時, 才提供了有限的編程功能. 現在DERIVE

的大部分功能都被移植到由HP 公司和Texas 公司生產的圖形計算器上.

Mathematica 是由Stephen Wolfram 開發的符號計算軟件,Mathematica 系統的計算能力非

常強, 它的函數很多, 而且用戶自己可以編程. 它的最大優點是, 在帶有圖形用戶接口的計算機

上Mathematica 支持壹個專用的Notebook 接口. 通過Notebook 接口, 我們可以向Mathematica

核心輸入命令, 可以顯示Mathematica 的輸出結果, 顯示圖形、動畫、播放聲音. 通過Notebook,

我們可以書寫報告、論文, 甚至整本書. 事實上, 有關Mathematica 的論文, 軟件, 雜誌大部分都

是用Notebook 寫的, 並且在Internet 網絡上廣泛傳播.Mathematica 的另壹個重要特點是它具

有Mathlink 協議, 通過Mathlink, 我們可以把Mathematica 的核心與其它高級語言連接, 我們

可以用其它語言調用Mathematica, 也可以在Mathematica 中調用其它語言編寫的程序. 到現

在為止, 能夠與Mathlink 連接的語言包括C 語言,Excel,Word 等. 事實上Notebook 就是通過

Mathlink 與Mathematica 核心相連接的.

上面我們介紹的軟件都是通用的符號計算系統, 其它通用的符號計算系統還有IBM 公司

的Thomas J. Watson 研究中心開發的AXIOM, 它的前身稱為SCRATCHPAD.

除了上述通用的符號計算系統以外, 還有壹些在某個領域專用的符號計算系統. 例如: 用於

高能物理計算的SCHOONSCHIP, 用於廣義相對論計算的SHEEP 和STENSOR. 在數學領域

中用於群論的Cayley 和GAP, 用於數論的PARI, SIMATH 和KANT. 在代數幾何和交換代數

領域中常用的系統是CoCoA 和Macaulay. 還有專門計算Lie 群的Lie 等等.

1.2 計算機代數系統的網絡資源

進入二十世紀九十年代以來, 隨著國際互聯網的迅速發展, 符號計算系統的發展變的更加

迅速和開放. 從國際互聯網上可以獲取各種符號計算系統, 以及其他數學軟件的相關信息. 有些

新的符號計算系統甚至提供源代碼. 有些數學軟件還有新聞組或討論組, 通過討論組, 用戶可以

彼此交流信息、解答問題. 廠家也可以及時發現軟件的問題, 進行修改. 下面我們介紹壹些常用

數學軟件的網絡資源, 以及主要研究機構的地址.

Mathematica 的網絡資源:

et.mcs.kent.edu

Macaulay2

Magma

MuPad bine(4*cos(x)^3,trig);

cos(3 x) + 3 cos(x)

解方程

用Maple 來解簡單的方程是毫無問題的, 即使是很復雜的方程,Maple 也可以用數值計算的

方法來處理.

> solve(x^2-3*x=2,x);

31 31

2+

2

p17, 2 . 2

p17

> glsys:=f2*x+3*y+z=1,x-y-z=4,3*x+7*z=3g:

> solve(glsys);

..24 97 ..43

fz =

41 ;x =

41;y =

41 }

> fsolve(fx^2+y^2=10,x^y=2g,fx,yg);

fx =3:102449071;y = :6122170880}

矩陣計算

Maple 還有許多命令可以處理矩陣和向量, 不過需要調用線性代數軟件包linalg. 還有壹

點特別的是, 作矩陣的乘法需要壹個特殊的算子&*.

> with(linalg):

Warning, new definition for norm

Warning, new definition for trace

> a:=matrix([[2,3],[1,4]]);

> inverse(a),det(a);

a :=

. ..

23

14

. ..

2..

4 ..3

55

..12

55

3..

, 5

> b:=matrix([[w,x],[y,z]]);

b :=

. ..

wx

. .5

yz

第壹章Maple 系統簡介

> evalm(a+b);

. ..

2+ w 3+ x

1+ y 4+ z

. ..

> evalm(a &* b);

. ..

2 w +3 y 2 x +3 z

w +4 yx +4 z

. ..

極限, 求和與乘積

對於普通的求極限問題, 可以直接用Maple 來計算, 它還可以符號的計算級數的和與積. 當

符號計算不成功時, 還可以作數值計算.

> limit((sqrt(1+x)-1)/x,x=0);

1

2

> limit(x!/x^x,x=infinity);

0

> sum(1/2^n, n=1..infinity);

1

> evalf(product(1+1/x^2, x=1..infinity));

3:676077910

微分與積分

用Maple 來求微分是相當容易的, 使用diff 命令即可以求出數學表達式的微分, 不過求出

的結果可能是相當復雜, 因此通常還要用simplify 命令進行化簡. 求數學表達式的定積分和不

定積分就相對復雜壹些, 需要某些特定的算法. 對於復雜的函數, 求出的結果可能是某些特殊函

數. 對於定積分, 還可以用evalf 求出積分的數值.

> simplify(diff((x-1)/(x^2+1),x));

x2 . 1 . 2 x

. (x2 + 1)2

> diff(sin(x*y),x);

cos(xy) y

> int(1/(1+x+x^2),x);

21

p3 arctan( (2 x + 1) p3)

33

1.3 Maple 的基本功能7

> int(sin(x^2),x=a..b);

1

FresnelS( b p2) p2 pπ .

1

FresnelS(a p2) p2 p

2 pπ 2 pπ

> int(sin(x)/x,x=0..5);

Si(5)

> evalf(%);

1:549931245

微分方程

對於不太復雜的常微分方程,Maple 可以求出它的符號解. 如果妳沒有給初始條件, 或者給

的初始條件或邊界條件不全, 在解的公式中會帶有積分常量.

> deq:=diff(y(x),x)*y(x)*(1+x^2)=x;

deq := ( . y(x)) y(x)(1 + x 2)= x

@x

> dsolve(fdeq,y(0)=0g,fy(x)g);

y(x)= pln(1 + x2), y(x)= ..pln(1 + x2)

> dsolve((y(x)^2-x)*D(y)(x)+x^2-y(x)=0,fy(x)} );

11

x 3 . y(x) x + y(x)3 = C1

33

級數展開

當數學問題比較復雜時, 求出準確解通常是不可能的, 用series 作級數展開是有幫助的.

> series(sin(x),x=0, 10);

11 5 11 10)

x . 6 x 3 +

120 x . 5040 x 7 +

362880 x 9 + O(x

例如在下列微分方程中, 就是用級數方式求出的微分方程級數解.

> Order:=10:

> deq:=diff(y(x),x$2)+diff(y(x),x)+y(x)=x+sin(x );

@2 @

deq :=( y(x))+( y(x)) + y(x)= x + sin(x)

@x2 @x

> sln1:=dsolve(fdeq, y(0)=0, D(y)(0)=0g,fy(x)g,series);

1 3 1 4 1 5 +

1 6 1 7 1 8 +

1 10)

sln1 := y(x)=

3 x . 12 x . 120 x 240 x . 5040 x . 20160 x 181440 x 9 + O(x

第壹章Maple 系統簡介

Laplace 和Fourier 變換

Laplace 變換和Fourier 變換是常用的數學變換. 在Maple 中有壹個積分變換的程序包

inttrans 提供了各種積分變換和它們的逆變換.

> with(inttrans):

> laplace(cos(t-a),t,s);

s cos(a) + sin(a)

s2 +1

> invlaplace(%,s,t);

cos(a) cos(t) + sin(a) sin(t)

> combine(%,trig);

cos(t . a)

> alias(sigma=Heaviside):

> f:=sigma(t+1)-sigma(t-1):

> g:=simplify(fourier(f,t,w));

g := 2 I (π Dirac(w) w . I) sin(w)

w

插值與函數擬合

interp命令可以由n 個點出發計算n . 1 階的插值多項式. 在下例中,x 的取值是1 到10,

y 的值是1 到10 之間的10 個隨機數.f 是相應的插值多項式.

> datax:=[seq(i,i=1..10)]:

> datay:=[seq(rand(10)(),i=1..10)]:

> dataxy:=zip((x,y)->[x,y], datax, datay);

dataxy := [[1, 1], [2, 0], [3, 7], [4, 3], [5, 6], [6, 8], [7, 5], [8, 8], [9, 1], [10, 9]]

> f:=interp(datax, datay, x);

17 9 517 11699 7 3719 27323 176741 4 652577 3f :=

51840 x . 40320 x 8 +

60480 x . 2880 x 6 +

17280 x 5 +

5760 x . 3240 x

1816483 2 1669153

+ xx + 293

3360 . 2520

使用數值逼近程序包numapprox 中的pade 命令可以計算壹個給定函數的有理逼近函數,

以及其它類型的逼近函數.

> with(numapprox):

> x0:=solve(x^2=Pi/2)[1];

x0 :=

1 p2 p

2

1.3 Maple 的基本功能9

> f:=pade(tan(x^2), x=x0, [3,3]);

8 10

f := (..17280 19=2 p2 + 10800 %1 7 + 43200 %13 . 7680 %13

12

. 3072 %12 25=2 p2 . 32400 15=2 p2 + 3840 23=2 p2 + 28800 %1 9 + 3072 %13

+ 23040 %12 21=2 p2 + 14400 %12 17=2 p2 . 11520 %1 11) .(

(..11520 11 + 1024 13 . 14400 9 . 10800 7) %13

+ (7680 23=2 p2 . 11520 19=2 p2 + 21600 15=2 p2) %12

+(..7680 12 + 34560 10 + 64800 8) %1)

%1 := x .

1 p2 pπ

2

> evalf(normal(f));

6:(..:4532958122 109 x 2 . :1125313130 109 + :1054184360 109 x 3 + :5353835473 109 x)

((2:x . 2:506628274)

(..:1097168700 109 x 2 + :8958248690 109 x . :1356288866 1010))

圖形

最常用的畫圖命令是plot和plot3d.下面的例子說明了使用在兩個命令的方法.

>plot(sin(x)*exp(1)^(-x/7),x=0..4*Pi);

-0.4-0.200.20.40.60.824681012x>plot3d(sin(x)*exp(1)^y,x=0..2*Pi,y=0..Pi,axes=boxed);

20-1001020

Maple 編程

Maple 不僅可以對數學表達式進行計算, 還可以編程. 他的編程語言和其它的結構化編程

語言很相似.

10 第壹章Maple 系統簡介

> f:=proc(x::nonnegint)

> option remember;

> if x=0 then 0

> elif x=1 then 1

> else f(x-1)+f(x-2) end if

> end proc:

> f(40);

102334155

1.4 Maple 系統的交互使用

Maple 的窗口環境提供了先進的工作區界面, 其擴充的數學功能簡明易用, 用戶可以在其

中展現數學思想, 創建復雜的技術報告, 充分發揮Maple 的功能.

圖1.1: Maple 的窗口環境

A Maple 的工具條

B 內容工具條, 它還包含壹個輸入和編輯文本的區域

C 節的頭部及標題

D Maple 的輸入, 提示符為\>", 顯示為紅色

1.4 Maple 系統的交互使用11

E Maple 的輸出, 既執行Maple 命令的結果, 通常顯示為藍色

F 壹組Maple 命令及其輸出

G Maple 的工作區

H 工作區元素組成的節

I 節的範圍: 用壹個大的方括號\[” 表示

J 省缺的Maple 輸入提示符

K 符號模板, 包含了許多常用的數學符號

L 表達式模板

M 矩陣模板

N 向量模板

Maple 工作區界面

Maple 的圖形界面具有現代應用軟件界面的常見功能, 它支持鼠標操作, 包括剪切和粘貼等

功能, 如果妳已經習慣了這些用法, 那就具備了使用Maple 工作區界面的基本知識. 現在妳可

以執行壹些標準的操作, 例如: 打開文件、保存和打印文件等.

對於Windows 平臺, 只要雙擊Maple 圖標即可啟動Maple. 在Unix 系統下, 可在提示符

之後鍵入xmaple 命令來啟動.Maple 啟動後將開啟壹個新的工作區.

在窗口上端是菜單條, 包括File 和Edit 等菜單項, 菜單條之下是工具條, 其中有若幹用於

經常性操作的快捷按鈕, 如文件打開, 保存和打印等. 工具條之下是內容指示條, 其中有壹些控

件規定當前執行的任務. 再向下是較大的工作區區域, 也就是妳的工作區. 窗口的最下端是狀態

條, 其中顯示系統信息.

作為Maple 用戶界面的壹個組成部分, 工作區是用戶交互的求解問題和把工作寫成文檔的

集成環境. 所謂交互的求解問題, 簡單的說就是輸入適當的Maple 命令, 得到結果. 在工作區中

可以修改命令, 重新執行並獲得新的結果. 除了Maple 命令及其結果以外, 還可以在文檔中加入

許多其他類型信息. 主要包括:

可以加入文本, 用戶能夠逐個字符地控制文本段落.

.

在文本段中, 可以加入數學表達式和Maple 命令.

.

可以加入超連接, 當用鼠標單擊某特定文本區域時, 能跳轉到工作區的其他位置, 或其它文

.

本中.

可以規定文檔的結構, 包括超連接, 節與小節的劃分.

.

在Windows 平臺上, 用戶可以嵌入其他對象, 可借助OLE 2( 對象連接與嵌入標準) 嵌入圖

.

形和表格.

添加標題

在Maple 的工作區中不僅可以作數學計算, 還可以編寫文檔. 首先我們可以給文檔加標題.

具體步驟是: 將光標移到第壹行, 在Insert 菜單的Execution Group 中選擇Region Before

項, 此時在頂部出現壹個新區域. 這個區域包含壹個Maple 輸入的提示符, 這意味著此時是輸入

Maple 命令的狀態. 點擊工具條上的

T 按鈕或從Insert 菜單中選擇Text Input 項, 就把這個

區域變成了文本輸入狀態, 現在就可以輸入文本. 此時在工具條下面又出現了壹個新的文本選

擇工具條, 從中妳可以選擇文本的字體格式等. 如果妳輸入的是文章的標題, 就可以在文本格式

12 第壹章Maple 系統簡介

的下拉菜單中選擇標題格式. 輸入標題後回車, 系統會自動要求妳輸入作者的名字, 輸入完作者

名以後就可以輸入正文了.

添加小標題

對文檔的進壹步加工是把文檔分解為節. 具體作法是首先用鼠標選定相關的區域, 然後點

擊工具條中的. 鍵, 此時就在選定的區域前面出現了壹個小方塊, 下拉壹個大括號, 括住了選

定的區域. 並且在這個區域的第壹條命令之前插入壹個文本區域, 此時妳可以輸入節的標題, 回

車後還可以輸入其他說明文本. 如果需要開始新的壹節, 可以在Insert 菜單中選擇section.

就可以在這壹節之後創建新的壹節.

行內數學表達式

在壹個文檔中有時需要插入數學表達式, 例如下面壹段文字:

Look at the integral . x2 sin(x . a)dx. Notice that its integrand, x2 sin(x . a), depends

on the parameter a.

在其中插入數學公式的方法是: 首先將光標移到相應的位置, 從Insert 菜單中選擇Math Input

項, 然後輸入對應於. x2 sin(x . a)dx 的Maple 代碼, 即Int(x^2*sin(x), x), 註意觀察內容指

示條中的編碼區域, 其中顯示輸入的代碼, 而工作區中則顯示使用標準數學符號的積分表達式.

在數學表達式輸入完成後, 再將輸入狀態變成文本輸入狀態, 就可以繼續輸入其他文本. 這樣就

完成了我們的文檔, 它既可以保存也可以打印.

添加超連接

在Maple 系統中, 用戶可以同時打開多個工作區, 在不同的工作區之間可以通過建立超連

接的方式建立聯系. 建立超連接的方法是: 在壹個工作區中用鼠標選定壹個位置, 在Insert 菜

單中選擇Hyperlink 項. 此時彈出壹個對話框, 它要求用戶輸入聯接的文字和另壹個工作區的

文件名. 填寫完成後單擊OK 鍵就完成了超連接.

建立書簽

在工作區中可以插入書簽, 以便迅速的查找內容. 單擊指向書簽的超連接,Maple 將立即轉

至書簽位置. 建立書簽的方法是: 首先將光標移動到要插入書簽的位置, 從View 菜單中選擇

Edit Bookmark 項. 在彈出的對話框中鍵入壹段文字, 例如\expr command” 作為書簽文本, 單

擊OK 按鈕插入書簽. 當妳移動光標到工作區的任何位置時, 從View 菜單中選擇Bookmark, 再

從彈出的菜單中選擇expr command 項, 就可以跳到妳插入書簽的位置.

此外超連接的方式也可以使用書簽. 具體作法是: 首先按照前面的方法建立書簽, 將光標

移動到建立超連接的位置, 在Insert 菜單中選擇Hyperlink 項. 在彈出的對話框中輸入聯接的

文字, 然後在Book Mark 區域添入妳已經建立的書簽的標記, 例如\expr command", 單擊OK 鍵

就完成了超連接.

幫助系統

前面我們介紹了Maple 的計算和排版方面的能力, 然而這只能是簡介, 在本書中, 我們不可

能詳盡的描述Maple 的所有命令, 因為Maple 包含了數以千計的命令. 為了了解這些命令的使

用方法, 可以使用Maple 軟件帶有的壹個自足的參考手冊, 即Maple 的幫助系統. 借助幫助系

1.5 Maple 的組織結構13

統, 可以按名字或主題查詢Maple 命令及其特點. 此外用戶還可以自行選擇關鍵詞或術語, 來

迅速打開含有這些文字的幫助頁面. 在每個幫助頁面中還提供了超連接, 使用戶可以閱讀相關

的頁面.

在幫助系統中,Maple 提供了三種方法定位信息: 按目錄、按主題和按全文查找. 從Help 菜

單中選擇Contents, 幫助窗口將變為幫助系統的壹個簡單目錄, 用戶可以通過超連接的方式瀏

覽幫助系統. 這就是按目錄的查找方法. 通過這種方法我們可以大致了解Maple V 的基本功

能, 但是要從中找到某個特定的主題還是很困難的. 按主題查找的方法是: 從Help 菜單中選擇

Topic Search, 此時幫助窗口將彈出壹個對話框, 在其中添入需要查找的主題, 點擊OK 鍵, 就可

以閱讀相應的幫助文檔. 如果已經知道希望閱讀的主題詞, 也可以直接從工作區訪問該頁面, 辦

法是在Maple 提示符後鍵入?topic, 回車後就可閱讀相應的頁面.

在大多數Maple 版本中(唯壹的例外是Maple V Realese 4 版本), 進入幫助系統後,Maple

會打開幫助瀏覽器, 通過幫助瀏覽器可以方便地找到妳需要的幫助.

有的時候, 在解決某個數學問題時不知道應該使用Maple 的什麽命令, 但是由數學問題本

身出發, 有理由推測, 在這些命令的幫助頁面應當包含某些特定單詞, 此時就要用到全文查找的

方法. 例如我要解壹個微分方程, 但是不知道應該用什麽命令, 我們可以推測, 在這個命令的幫

助中應該包含solve, di erential 和equation 等單詞, 此時可以在Help 菜單中選擇Full Text

Search, 在彈出的對話框中, 輸入要查找的關鍵詞, 例如solve di erential equation 等, 然後單擊

Search 按鈕, 通知Maple 開始檢索.Maple 將列出匹配的主題, 並附帶數值, 表明匹配的程度, 用

戶可從列表中選擇最感興趣的主題.

此外從Help 菜單中選定Balloon Help 項以後, 當鼠標停留在某個按鈕或菜單上時,Maple

就顯示簡短的說明. 這也是壹個很有用的功能.

1.5 Maple 的組織結構

Maple 是由加拿大Waterloo 大學的符號計算組開發的計算機代數系統. 它可以在各種計

算機上運行, 從超級計算機, 例如Cray Y/MP, 到用於桌面的微型計算機, 例如IBM PC 兼容

機.Maple 既可以在單用戶的操作系統, 例如MS-Windows 上

  • 上一篇:工工程測量技術工作總結報告
  • 下一篇:2×300 MW火力發電廠電氣部分初步設計
  • copyright 2024編程學習大全網