本書基于Mathematica 12.3,全面介紹了Mathematica軟件的高級編程技術(shù),全書分為8章:第1章Mathematica基礎(chǔ),重點闡述Mathematica軟件的入門操作;第2章Wolfram語言經(jīng)典編程,討論類似于C語言等高級語言的Mathematica編程方法;第3章Wolfram語言列表,敘述了Mathematica軟件重要的數(shù)據(jù)類型列表的操作方法;第4章詳細(xì)討論了Wolfram語言內(nèi)置函數(shù)和自定義函數(shù)的用法;第5章模塊編程技術(shù)分析Mathematica軟件四種主要的模塊編程技巧;第6章討論了Wolfram語言字符串和數(shù)據(jù)集;第7章展示了Mathematica軟件強(qiáng)大的繪圖和聲音處理能力;第8章詳細(xì)闡述了Mathematica程序包的設(shè)計方法。Mathematica軟件是能體現(xiàn)計算機(jī)價值的科學(xué)計算軟件,而運(yùn)行于其上的Wolfram語言是**層次的科學(xué)計算語言。本書基于Mathematica 12.3,全面介紹了Mathematica軟件的高級編程技術(shù), 本書可作為高等院校工學(xué)、理學(xué)、藝術(shù)學(xué)和經(jīng)濟(jì)學(xué)等學(xué)科本科生和研究生學(xué)習(xí)Mathematica軟件和Wolfram語言的入門教材,也可作為這些學(xué)科門類下設(shè)專業(yè)本科生和研究生及科研人員用于數(shù)據(jù)分析的參考書。
Mathematica在作者們的學(xué)習(xí)和科研中占據(jù)著核心地位。對于從事教學(xué)和科研的普通高校教師來說,Mathematica軟件是最有價值的軟件,也是教學(xué)和科研工作的強(qiáng)有力助手。除了Mathematica軟件之外,我們還經(jīng)常使用Visual Studio(C#語言)和RAD Studio(C 語言)兩種編程開發(fā)環(huán)境,但都是為Mathematica軟件服務(wù)。在Mathematica軟件環(huán)境下使用Wolfram語言設(shè)計并測試好算法程序后,再借助于C#或C 語言生成可執(zhí)行工程軟件。我們擬通過本書向和我們一樣從事教學(xué)和科研工作的朋友們推薦Mathematica軟件,同時向?qū)Ω呒壋绦蛟O(shè)計和科學(xué)計算感興趣的讀者推薦Wolfram語言。
Mathematica軟件能做什么?在科學(xué)研究上,我們使用Mathematica軟件實現(xiàn)圖像的加密與解密算法、神經(jīng)網(wǎng)絡(luò)算法以及量子計算算法(一類有趣的復(fù)矩陣變換); 在教研活動上,我們在大學(xué)物理、高等數(shù)學(xué)、線性代數(shù)、概率論與數(shù)理統(tǒng)計、復(fù)變函數(shù)、數(shù)學(xué)物理方程、數(shù)學(xué)建模、信號與系統(tǒng)、數(shù)字信號處理、自動控制(還使用了SystemModeler軟件)、數(shù)字圖像處理和神經(jīng)網(wǎng)絡(luò)與機(jī)器學(xué)習(xí)等課程中,均借助Mathematica軟件輔助教研,效果頗佳?傮w來說,Mathematica軟件是一種稱為Wolfram語言的高級計算機(jī)語言的工作平臺,Wolfram語言比其他計算機(jī)語言更容易實現(xiàn)各類算法,且以友好的方式呈現(xiàn)算法結(jié)果。C語言被稱為過程化語言,其按算法的實現(xiàn)流程進(jìn)行程序設(shè)計,即過程化編程。C 和C#語言稱為面向?qū)ο蟮恼Z言,用類(一種數(shù)據(jù)結(jié)構(gòu))將算法的屬性(即數(shù)據(jù))和方法(即函數(shù))封裝起來,增強(qiáng)程序的健壯性。而Wolfram語言是一種函數(shù)式的語言,不同于C語言(由于C語言程序由一個main函數(shù)和其他若干功能函數(shù)組成,C語言也稱函數(shù)化語言),Wolfram語言的函數(shù)式是指這種語言中,程序由函數(shù)實現(xiàn),不但每個函數(shù)均可以獨立運(yùn)行得到相應(yīng)的結(jié)果,而且函數(shù)可以復(fù)合調(diào)用執(zhí)行復(fù)雜的功能。Wolfram語言可視為一種泛函化的語言,并可稱之為數(shù)學(xué)語言或超級語言。
Mathematica軟件誕生于1988年,創(chuàng)始人為科學(xué)家Stephen Wolfram,而運(yùn)行于Mathematica軟件上的程序設(shè)計語言則以這位科學(xué)家的名字命名,稱之為Wolfram語言。目前,Mathematica軟件包括6000多個函數(shù),涉及了物理學(xué)、數(shù)學(xué)、化學(xué)、生物學(xué)、信息科學(xué)、計算機(jī)科學(xué)、藝術(shù)學(xué)、宇宙學(xué)、建筑學(xué)和金融學(xué)等眾多領(lǐng)域,這些函數(shù)的實現(xiàn)方法統(tǒng)稱為Wolfram技術(shù)。Mathematica軟件在系統(tǒng)仿真領(lǐng)域的拓展軟件稱為SystemModeler(SystemModeler軟件支持Modelica建模語言和Wolfram科學(xué)計算語言,為Mathematica軟件的伴侶軟件),Mathematica軟件和SystemModeler軟件被公認(rèn)為科學(xué)計算和建模仿真領(lǐng)域最先進(jìn)的軟件,在全球范圍內(nèi)推動了并繼續(xù)推動著科學(xué)和技術(shù)的創(chuàng)新?梢哉f,Mathematica軟件是最能體現(xiàn)計算機(jī)價值的科學(xué)計算軟件,而Wolfram語言是最高層次的科學(xué)計算語言。
多年來,Mathematica軟件已經(jīng)成為物理學(xué)和數(shù)學(xué)領(lǐng)域的主要科研工具,而現(xiàn)在,Mathematica軟件和Wolfram技術(shù)也被廣泛應(yīng)用于信息科學(xué)、計算機(jī)科學(xué)、生命科學(xué)、社會科學(xué)和金融等學(xué)科領(lǐng)域的數(shù)據(jù)分析和工程計算。本書著眼于Mathematica軟件的基本用法和Wolfram技術(shù)的基本技巧,面向擬使用Mathematica軟件助力其學(xué)習(xí)和研究的大學(xué)生、研究生和科研工作人員。本書是一本自成體系的Mathematica教材。此外,對于初次接觸Mathematica軟件的讀者,推薦《Mathematica科學(xué)計算與程序設(shè)計》(西安電子科技大學(xué)出版社,2021年)作為入門速成教材; 對于信息安全研究人員,推薦《高級圖像加密技術(shù)基于Mathematica》(西安電子科技大學(xué)出版社,2020年)作為學(xué)習(xí)Mathematica軟件應(yīng)用于密碼算法編程的參考書。這兩本教材展示了Wolfram技術(shù)不但以優(yōu)美的形式實現(xiàn)各式各樣的算法,而且還將這些算法的結(jié)果呈現(xiàn)進(jìn)一步升華,助力研究人員深入分析算法的本質(zhì)和內(nèi)涵。
全書基于Mathematica 12.3,共分為9章。第1章為Mathematica基礎(chǔ),介紹了Mathematica軟件的入門操作和基本數(shù)據(jù)類型,為后續(xù)章節(jié)的學(xué)習(xí)奠定基礎(chǔ)。第2章為Wolfram語言經(jīng)典編程,重點分析了經(jīng)典分支語句和循環(huán)語句的實現(xiàn)方法,同時介紹了Mathematica軟件中的關(guān)系運(yùn)算符和邏輯運(yùn)算符,并通過大量實例突出了經(jīng)典編程方法的特點。第3章討論了Wolfram語言中最重要的數(shù)據(jù)類型列表,介紹了列表的構(gòu)造方法和操作技巧。第4章闡述了Mathematica內(nèi)置函數(shù)的用法以及自定義用戶函數(shù)的技巧和方法,重點討論了Map和Apply函數(shù)的用法。第5章詳細(xì)闡述了Wolfram語言模塊編程技術(shù),對比分析了4種模塊編程函數(shù)的用法,并討論了并行編程方法。第6章詳細(xì)介紹了字符串的操作方法,并討論了規(guī)則、關(guān)聯(lián)、數(shù)據(jù)集和模式匹配。第7章結(jié)合科技文獻(xiàn)出版中對圖形的要求,詳細(xì)闡述了Mathematica軟件的二維繪圖、三維繪圖和動畫技術(shù),并討論了Mathematica軟件的聲音處理技術(shù)。第8章深入介紹了自定義程序包技術(shù),討論了編寫程序包并將自定義函數(shù)及其說明文檔添加到Mathematica軟件中的方法,最后敘述了Wolfram自然語言輸入和筆記本程序調(diào)試方法。第9章討論了感知器和BP神經(jīng)網(wǎng)絡(luò)的實現(xiàn)方法,詳細(xì)介紹了借助Wolfram語言實現(xiàn)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)和預(yù)測的程序設(shè)計技巧。
本書由國家自然科學(xué)基金(No. 61762043)、江西省自然科學(xué)基金(No. 20192BAB207022)和江西省教育廳科學(xué)技術(shù)研究重點項目(No. GJJ190249)資助出版,特此鳴謝。
本書由江西財經(jīng)大學(xué)量子計算研究中心信息安全課題組編寫。其中,江西財經(jīng)大學(xué)陳愛國執(zhí)筆第1章、唐穎軍執(zhí)筆第2章、吳文華執(zhí)筆第3章、陳偉執(zhí)筆第4章、熊堂堂執(zhí)筆第6章、張勇執(zhí)筆第7~9章; 濱州學(xué)院胡永生教授執(zhí)筆第5章。全書由張勇統(tǒng)稿、定稿。作者張勇感謝導(dǎo)師陳天麒教授、洪時中教授和汪國平教授對其科研工作和學(xué)術(shù)研究的長期指導(dǎo),他們對科學(xué)的熱愛和對作者的鼓勵是作者從事科研工作的巨大精神支柱; 感謝其愛人賈曉天老師在煩瑣的資料檢索和整理工作方面所做的細(xì)致工作,為其節(jié)省了大量學(xué)習(xí)時間。全體作者感謝Wolfram Research公司楊圣匯老師的悉心指導(dǎo),為本書的寫作清除了技術(shù)困難和障礙; 感謝清華大學(xué)出版社趙凱老師對本書寫作和出版的支持。
本書極力呈現(xiàn)Mathematica軟件對于大學(xué)生和各領(lǐng)域教研人員的重要性,但限于作者們的知識水平,書中難免有缺漏之處,懇請同行專家、學(xué)者和讀者朋友不吝賜教。
免責(zé)聲明: 書中Mathematica和Wolfram Research等是Wolfram公司的注冊商標(biāo)。本書內(nèi)容僅用于教學(xué),嚴(yán)禁任何單位和個人將其應(yīng)用于商業(yè)場合。
作者
2022年2月
于江西財經(jīng)大學(xué)楓林園
源碼
教學(xué)大綱
第1章Mathematica基礎(chǔ)
1.1認(rèn)識Mathematica
1.1.1啟動Mathematica
1.1.2筆記本
1.1.3一個簡單實例
1.2自定義函數(shù)
1.2.1筆記本自定義函數(shù)
1.2.2程序包自定義函數(shù)
1.3全局變量
1.3.1變量名
1.3.2上下文環(huán)境
1.3.3全局參數(shù)
1.4基本數(shù)據(jù)類型
1.4.1Wolfram語言常數(shù)
1.4.2原子數(shù)據(jù)類型
1.4.3浮點數(shù)
1.4.4數(shù)量單位
1.4.5數(shù)制表示
1.5文檔中心
1.5.1幫助文檔
1.5.2插件文檔
本章小結(jié)
第2章Wolfram語言經(jīng)典編程
2.1循環(huán)編程
2.1.1For循環(huán)
2.1.2While循環(huán)
2.1.3NestWhile循環(huán)
2.1.4Do循環(huán)
2.2關(guān)系運(yùn)算符和邏輯運(yùn)算符
2.2.1關(guān)系運(yùn)算符
2.2.2邏輯運(yùn)算符
2.3選擇編程
2.3.1If分支
2.3.2Switch分支
2.3.3Which分支
2.3.4Piecewise函數(shù)
2.4典型實例
本章小結(jié)
第3章Wolfram語言列表
3.1列表構(gòu)造
3.1.1Import函數(shù)
3.1.2Table函數(shù)
3.1.3數(shù)組與矩陣
3.1.4字符列表
3.1.5隨機(jī)數(shù)列表
3.2列表操作
3.2.1列表元素訪問
3.2.2Map和Apply方法
3.2.3向量與矩陣操作
3.2.4集合操作
本章小結(jié)
第4章內(nèi)置函數(shù)與自定義函數(shù)
4.1常用內(nèi)置函數(shù)
4.1.1列表處理
4.1.2基本初等數(shù)學(xué)函數(shù)
4.1.3基本高等數(shù)學(xué)函數(shù)
4.1.4基本矩陣函數(shù)
4.1.5函數(shù)調(diào)用形式
4.2自定義函數(shù)
4.2.1函數(shù)定義
4.2.2函數(shù)選項設(shè)置
4.3純函數(shù)
4.3.1純函數(shù)定義
4.3.2嵌套函數(shù)
本章小結(jié)
第5章模塊編程技術(shù)
5.1Module模塊
5.1.1Module函數(shù)
5.1.2Module模塊實例
5.2Block模塊
5.2.1Block函數(shù)
5.2.2Block模塊實例
5.3With模塊
5.3.1With函數(shù)
5.3.2With模塊實例
5.4Compile模塊
5.4.1配置MinGW64編譯器
5.4.2Compile函數(shù)
5.4.3Compile模塊實例
5.5并行編程
5.5.1并行計算函數(shù)
5.5.2并行處理函數(shù)
本章小結(jié)
第6章字符串與數(shù)據(jù)集
6.1字符串
6.1.1字符串合并與拆分
6.1.2字符串替換操作
6.1.3字符串模式匹配
6.1.4正則表達(dá)式
6.1.5字符串變換函數(shù)
6.2規(guī)則與關(guān)聯(lián)
6.2.1規(guī)則
6.2.2關(guān)聯(lián)
6.3數(shù)據(jù)集
6.4模式匹配
本章小結(jié)
第7章圖形與聲音
7.1二維繪圖
7.1.1Plot函數(shù)
7.1.2DiscretePlot函數(shù)
7.1.3ListPlot函數(shù)
7.1.4ListLinePlot函數(shù)
7.1.5Graphics函數(shù)
7.1.6PolarPlot函數(shù)
7.1.7ParametricPlot函數(shù)
7.1.8ContourPlot函數(shù)
7.1.9BarChart函數(shù)
7.1.10PieChart函數(shù)
7.1.11Show函數(shù)
7.1.12GraphicsGrid函數(shù)
7.2三維繪圖
7.2.1Plot3D函數(shù)
7.2.2DiscretePlot3D函數(shù)
7.2.3ParametricPlot3D函數(shù)
7.2.4RevolutionPlot3D函數(shù)
7.2.5SphericalPlot3D函數(shù)
7.2.6ListPlot3D函數(shù)
7.2.7ContourPlot3D函數(shù)
7.2.8ListContourPlot3D函數(shù)
7.2.9ListSurfacePlot3D函數(shù)
7.2.10Graphics3D函數(shù)
7.3動畫
7.3.1Animate函數(shù)
7.3.2Manipulate函數(shù)
7.4圖像處理基礎(chǔ)
7.4.1圖像轉(zhuǎn)換為矩陣
7.4.2矩陣轉(zhuǎn)換為圖像
7.5聲音
本章小結(jié)
第8章Mathematica程序包
8.1歐幾里得算法
8.2程序包
8.3Wolfram Workbench開發(fā)
8.3.1Wolfram Workbench安裝
8.3.2創(chuàng)建程序包
8.3.3創(chuàng)建測試文檔
8.3.4創(chuàng)建幫助文檔
8.4自然語言
8.5程序調(diào)試
本章小結(jié)
第9章神經(jīng)網(wǎng)絡(luò)
9.1數(shù)據(jù)預(yù)處理
9.1.1數(shù)據(jù)歸一化
9.1.2數(shù)據(jù)白化
9.1.3協(xié)方差均衡
9.1.4數(shù)據(jù)還原
9.1.5數(shù)據(jù)預(yù)處理模塊程序
9.2感知器
9.2.1感知器原理
9.2.2感知器實例
9.2.3Wolfram實現(xiàn)方法
9.3BP神經(jīng)網(wǎng)絡(luò)
9.3.1BP算法
9.3.2BP神經(jīng)網(wǎng)絡(luò)實例
9.3.3Wolfram實現(xiàn)方法
本章小結(jié)
附錄AMathematica筆記本目錄管理和顯示樣式
參考文獻(xiàn)