Julia高性能科學計算(第2版)( 簡體 字) | |
作者:徐國棟,李琦 | 類別:1. -> 程式設計 -> 綜合 |
出版社:電子工業出版社 | 3dWoo書號: 52533 詢問書籍請說出此書號! 有庫存 NT售價: 395 元 |
出版日:3/1/2020 | |
頁數:240 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121381775 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1 章 介紹和安裝 ·············.1
1.1 什么是Julia 及為什么要使用Julia ·········.2 1.2 安裝Julia ··············.4 1.2.1 在Windows 系統上安裝Julia ········.4 1.2.2 在macOS 系統上安裝Julia ·········.9 1.2.3 運行Julia 腳本 ···········.13 1.2.4 安裝Gurobi···········.13 1.2.5 安裝CPLEX ···········.15 1.3 安裝IJulia·············.17 1.4 包管理 ···············.20 1.5 幫助 ··············.22 第2 章 簡單線性規劃·············.24 2.1 線性規劃問題 ············.25 2.2 寫線性規劃問題的其他方式 ·········.29 2.3 寫線性規劃問題的另一種方式 ··········.31 2.4 混合整數線性規劃問題 ··········.32 第3 章 Julia 語言基礎 ·············.35 3.1 向量、矩陣和數組 ···········.35 3.2 元組 ··············.40 3.3 索引和范圍 ··············.42 3.4 打印信息 ·············.45 3.5 集合、字典和循環 ···········.47 3.6 函數 ··············.50 3.7 變量的作用域 ············.52 3.8 隨機數生成 ··············.55 3.9 文件讀/寫 ·············.59 3.10 繪圖 ···············.63 3.10.1 PyPlot 包············.64 3.10.2 在PyPlot 中避免使用第三方字體······.68 第4 章 數值方法選題·············.70 4.1 曲線擬合 ·············.70 4.2 數值微分 ·············.75 4.3 數值積分 ·············.78 4.4 自動微分 ·············.80 第5 章 單純形法 ·············.84 5.1 單純形法簡介 ············.84 5.2 查詢所有基本可行解 ············.87 5.3 使用JuMP 包 ············.93 5.4 表格式的樞軸旋轉 ···········.93 5.5 單純形法的實現 ·············.95 5.5.1 initialize(c,A,b) ···········.97 5.5.2 is_optimal(tableau) ··········.99 5.5.3 pivoting!(tableau) ···········.100 5.5.4 創建模型 ···········.104 5.6 后面的步驟 ············.110 第6 章 網絡優化問題·············.111 6.1 最小費用網絡流問題 ··········.111 6.2 運輸問題 ·············.121 6.3 最短路徑問題 ············.127 6.4 實現Dijkstra 算法 ············.132 第7 章 內點法 ··············.138 7.1 仿射尺度算法 ············.138 7.2 原路徑跟蹤算法 ···········.144 7.3 評述 ··············.149 第8 章 非線性優化問題 ············.151 8.1 無約束優化 ············.151 8.1.1 線性搜索 ···········.151 8.1.2 無約束優化 ···········.153 8.1.3 盒約束優化 ···········.154 8.2 非線性優化 ············.155 8.3 其他求解器 ············.156 8.4 混合整數非線性規劃 ··········.161 第9 章 蒙特卡洛方法·············.163 9.1 概率分布 ·············.163 9.2 隨機線性規劃 ············.165 9.3 估算簡單路徑的數目 ··········.172 第10 章 拉格朗日松弛 ············.181 10.1 拉格朗日松弛介紹 ············.181 10.1.1 下界與上界 ···········.182 10.1.2 次梯度優化 ···········.183 10.1.3 總結 ············.184 10.2 p-中位問題 ·············.184 10.2.1 讀取數據文件 ··········.186 10.2.2 最優化求解p-中位問題 ········.188 10.2.3 拉格朗日松弛應用 ·········.189 10.2.4 求解下界 ···········.189 10.2.5 求解上界 ···········.193 10.2.6 更新拉格朗日乘子 ·········.195 第11 章 互補問題 ·············.208 11.1 線性互補問題(LCP) ··········.208 11.2 非線性互補問題(NCP) ·········.216 11.3 混合互補問題(MCP) ···········.220 第12 章 最優化求解器中的參數 ··········.221 12.1 設置CPU 時間限制 ··········.221 12.2 設置最優化間隙公差 ··········.222 12.3 熱啟動 ·············.223 12.4 Big-M 與積分容差率 ···········.224 12.5 關掉求解器的輸出 ············.225 12.6 其他求解器參數 ···········.226 Julia 像C 一樣快,像MATLAB 一樣方便,并且像Python 一樣通用。在Julia 開發者,特別是JuMP 包開發者的大力支持下,Julia 為運籌學及相關領域的高性能科學計算提供了一個強大的工具——JuMP。本書對Julia 語法基礎及其標準庫、編程技巧、數值優化、優化求解、計算機科學計算都有所涉及,它可以作為計算機科學計算的入門圖書使用;本書作者是美國南佛羅里達大學副教授Changhyun Kwon,他為了方便學生的研究、學習寫下本書,所以本書也可以作為高校研究生和教師的有用的參考書。
推薦序1
Julia 語言(以下簡稱Julia)作為一門在MIT(Massachusetts Institute of Technology,麻省理工學院)開源框架協議下開發的高性能計算語言,至今也不過十年左右的歷史。Julia 在開發之初就有相當大的野心:它要像C 語言(以下簡稱C)一樣快速,同時要有如同Ruby 的動態性;要具有Lisp 般的元編程能力而又有MATLAB 那樣的數學符號輸入;要像Python 般通用、像R 般在統計分析上得心應手、像Perl 般自然地處理字符串、像MATLAB 般強大的線性代數運算能力、像Shell 般具有“膠水語言”的進程管理能力,它要易于學習而又不讓真正的黑客感到無聊;還有,它應該是交互式的,同時又是編譯型的…… 最終,Julia 選擇了更適合科學工作者思維和編程習慣的多重派發作為其面向對象的核心特性。隨著2018 年8 月Julia 1.0 版本的發布,這門編程語言也進入了一個嶄新的階段。雖然上一段的“野心”里提到的很多目標還沒有完美地實現, Julia語言目前也沒有完全成熟,并且還有很長的路要走(類似Python 的2.0 版本階段),但是它已經在科學計算、數學規劃、數值優化、機器學習、交互性編程設計等多個方面有了很多成熟的應用。當然,這并不是說你隨便寫一段Julia 代碼就真的能達到和C++相當的速度。Julia 這門語言的特色是,它給你提供了充分優化的空間 和(達到高性能代碼的)相對容易的編程體驗。 這也正是這本中譯版的《Julia 高性能科學計算》能給你帶來幫助的地方。如果你是一位對Julia 編程感興趣的編程初學者,可能對Python 或MATLAB 有一點經驗但經驗并不豐富,那么希望你對Julia 在1.0 版本之后對科學計算、運籌優化的具體實現感興趣。這本書里豐富的實例和Kwon 教授的代碼及講解將能循序漸進地帶你入門。尤其是Julia 是一門開源語言,目前還沒有像MATLAB 社區這樣系統和規范的官方文件,這就顯得Kwon 教授在自己學習和使用Julia 后分享的這個教程更加地難能可貴了。 最后談一點我自己使用Julia 的心得。我是從2015 年開始使用這門語言的,當時還是0.3 版本,處在非常初期的階段。雖然有各種各樣的問題,但是在琢磨package相應的.jl 源碼,包括在Julia 英文和中文社區與諸多Julia 語言的先行者切磋交流之后,我便無法自拔地愛上了這門語言。我曾經是一位MATLAB 重度用戶,Python/C++開發者,但現在已經很少使用這些語言了在我的日常研究中,倒是天天在用Julia。 歡迎嘗試、學習、使用Julia 這門潛力無限的編程語言。 覃含章 2020 年1 月于美國劍橋 推薦序2 Julia 是我最喜歡的語言:它是一門以科學計算為主要服務目標的語言,同時兼顧了易用性和高性能。2018 年,在Julia 1.0 發布之后,其就因為宏大的目標而頗受關注。作為一名科研工作者,我和我身邊的老師在長期的實踐中使用Julia 解決了很多實際的數值問題,它無疑在一定程度上解決了科學計算中的兩語言問題。 與此同時,Julia 社區也是目前為止我所知道的對科學計算最友好的社區,在這個社區里聚集著多個科學研究領域的專家,其中很大的一個分支就是以JuMP 為代表的數學優化社區。JuMP 作為一個優秀的開源項目也已經在數學優化領域里頗具規模,它的作者在2016 年獲得了INFORMS Computing Society(這是一個研究計算機、人工智能,以及與之相關的運籌學和管理學的社團。它的目的是幫助運籌學和管理學研究協會的成員提高計算機技術和人工智能技術)獎。JuMP 也已經成為NumFOCUS 官方支持的項目,同時圍繞著這樣一個開源項目,社區里也聚集了一批數學優化專家。 Julia 中文社區一直缺乏優秀的書籍和資料將Julia 社區的優勢引入中國,我很高興能夠看到這樣一本專業書籍被翻譯成中文。在閱讀本書的過程中,作為一個運籌學的門外漢,我也學到了一些運籌學的知識。更重要的是本書將會在傳授運籌學知識的同時講解如何具體地通過使用JuMP 來應用相關的算法。它很適合對Julia 還不太熟悉且對運籌學感興趣的朋友。希望這樣一本中譯本圖書能夠幫到中文世界里對運籌學和Julia 感興趣的朋友。 羅秀哲 2020 年2 月于滑鐵盧 前 言 寫作本書的主要目的是“幫助我自己”。我是一位運籌學教授,每天都做著構建數學優化模型、開發解決問題的算法、用計算機編程語言執行這些算法、用數據做實驗等工作。這期間會用到人類語言、數學語言和計算機語言這3 種語言。我的學生和我需要在這3 種語言之間進行跳轉,我們需要在這3 種語言之間進行“翻譯”。 當有學生因這類“翻譯”任務向我求助時,我通常把自己之前的“翻譯”作為例子,或者查找網上可能有幫助的資源給他。如果學生的數學基礎不錯,有足夠的計算機編程經驗,對數學計算的工作原理理解得很好,那么他學起來就會比 較容易,我每天的研究和教學任務也會進行得比較順利。 但不盡如人意的是,很多搞運籌學的研究生需要花很長時間去學習如何“翻譯”。寫作本書就是為了讓我能夠更好地幫助他們。 我既不是計算機科學家,也不是軟件工程師。所以,本書并沒有教授最好的“翻譯”方法,而是講解在運籌學和管理學的研究和開發工作中,如何完成一些常見的任務。這只是“一種翻譯”,并且很可能不是最好的“翻譯”。但閱讀本書后,讀者應該能夠學會用這樣或那樣的方式去搞定任務。 本書教些什么 本書不只是關于數值計算方法的教科書、Julia 編程綜合介紹書、數值優化的教科書、優化求解完全手冊,也不只是計算機科學和工程的入門書——本書對這些內容都有所涉及。 本書首先會講解如何安裝Julia 語言。然后講一些語法、Julia 的標準庫、Julia編程技巧、一些數值方法、優化模型、蒙特卡洛方法、算法和一些優化解決方案。 本書絕不是以上提到的各個領域的完整的教科書,也不該被單獨當作教科書來使用。在我看來,最好把本書與其他運籌學和管理學的主要教科書和參考書一起使用。本書的讀者需要熟悉或愿意從其他參考文獻中自學優化理論和算法。當然,我在書中提供了相關領域的我所知的最好的參考資料。 閱讀本書后,讀者就有了一些寫代碼的經驗,就應該能夠檢索和閱讀更多網上的技術文檔了。本書將幫助你邁出學習運籌學和管理學計算的第一步——這事實上是一本計算機入門圖書。 本書怎么用 本書無疑對研究生及他們的導師完成研究任務會有很大的幫助。低年級研究生可以把本書當作可選優化求解器和算法的輔導書,也可以當作學習指南。當研究生在學習各種課程時,本書將會是學習如何解決特定優化問題和實現算法的好起點。最后,本書也將會是他們做論文研究的有用參考書之一。 高年級研究生可以把本書作為參考文獻。例如,當需要為他們的問題執行拉格朗日松弛法時,他們可以參考本書的對應章節學習如何執行。 我同時還希望,本書可以作為運籌學、分析學、線性規劃、非線性規劃、數值優化、網絡優化、管理學及運輸工程的補充教科書。對運籌學專業和管理學專業來說,數值方法和計算機計算工具是必修的課程,老師可以根據自己的主要關注點,將本書作為初級或中級教科書。 高級程序員需注意 如果你已經熟悉計算機計算和至少一種計算機編程語言,我認為本書可能對你意義不大。網上有很多資源可以讓你學習Julia 語言并很容易地跟進最新進展。但如果你希望學得更快,遇到的問題更少,本書將對你有所幫助。 我在學Julia 之前有MATLAB 和Java 的編程經驗。學習Julia 并不難,相反它令人激動又很有趣。我們只需要一些好的“借口”去學習和使用Julia。閱讀第1章可以了解這些“借口”。 參考資料說明 本書提供了大量的參考資料以方便讀者更好地了解書中提到的相關技術及工具。為了保證參考資料相關鏈接能夠實時更新,特將“參考資料”文檔放于博文視點官方網站,讀者可在http://www.broadview.com.cn/38177 頁面進行下載。 致謝 我誠摯地感謝Julia 開發者的辛勤努力。Julia 是一門美麗的語言,我非常喜歡。它完全改變了我每天的計算生活。我也很感激JuMP 和其他相關軟件包的開發者。自從有了JuMP,我不再需要去尋找更好的模型語言了。 Changhyun Kwon 于美國弗羅里達州 坦帕 |