前言:
IDL(Interactive Data Language)是一個直譯互動式的電腦語言,在科學和工程上已經有廣泛的應用,尤其在醫學和遙測方面。其指令語法簡單易懂,接近人類的思考方式,其計算和繪圖功能強大,可幫忙解決複雜的工作需求,所以深受科學家和工程師的喜愛。它與學習其它電腦語言一樣,基本的概念和技巧易學,但要廣泛、深入且精通,則需要不斷地研讀和練習。台灣的IDL 使用者不多,主要的原因是市面上的IDL書籍大部分是以英文書寫,而IDL 內建的線上查詢系統也是英文版,在語言的隔閡下,學生的學習效果自然下降,作者在此動機下,才提筆撰寫。因學校工作繁忙,無法全時撰寫,歷經數年,才得以完成。
本書的作者於 1989 年進入美國阿拉斯加大學費爾班克分校的地球物理研究所攻讀博士學位。在學期間,師事 Dr. Daniel Weimer ,學習太空衛星資料分析和研究地球極區上空電離層的對流電場,Dr. Weimer 是 IDL 的專家,開始帶領作者進入 IDL 的殿堂,作者因此開始感受到IDL程式撰寫的簡單性和方便性,也深深地感受到IDL強大資料處理和繪圖功能的震撼,從此離不開IDL。博士畢業後,在台灣做博士後副研究員,到日本當研究講師,然後前往美國做研究員,最後回到母校國立中央大學太空科學所任教,也都使用IDL進行做太空物理研究。因 IDL 是跨電腦平台,在做工作單位轉換時,不需要學習新的程式語言,節省許多寶貴的時間。回台灣後,開授「高等程式設計」和「太空資料分析與模式化」二門課程,為課程教學需要,開始研讀與 IDL相關的書籍和線上查詢系統,在教學相長的作用下,讓作者更深入了解 IDL 的概念和運作方式。在此感謝 Dr. Weimer 對作者在 IDL 方面的啟發和教導。
本書是根據作者長期使用 IDL 的經驗和參考 IDL 的線上查詢系統撰寫而成,編排方式盡量簡單易懂,並附上大量的範例,讓讀者快速地從範例中學習IDL指令的語法和關鍵字的運用,以期在最短的時間內達到學習的效果和工作的需求。而且,本書的大部分章節會配置至少一個表格,簡單扼要地敘述每個章節的內容。進階的讀者可以只參閱表格內的重點,回憶曾經學習過的指令和語法。初學者則需要詳細閱讀各章節的內容,然後實際地操作練習,以掌握正確的使用方法。本書章節的編排是參照洪維恩教授編著的《Matlab 7 程式設計》書籍而訂定,本書作者認為洪教授的書籍編排簡單明瞭且有條理,各個章節獨立,讀者可以根據工作需求來參閱特定章節,以節省查詢的時間。
本書將完整地介紹 IDL 的基本概念和實施方式,對於IDL 的專業物件和視窗界面指令,只是做基本的介紹。本書主要是適用於IDL的初學者,如果想成為 IDL 的專業程式設計師,則需要閱讀其它的專業書籍,甚至包括 C 語言撰寫、資料庫管理以及網頁程式設計等主題。在熟悉 IDL 基本的物件和視窗界面之實施方式後,很容易繼續學習進階的物件和視窗界面之實施方式。本書作者相信, IDL 的基本指令精通後,許多複雜的計算和繪圖工作都可完成,進階的指令也是由基本的指令所寫成,直接使用可以節省很多程式撰寫的時間,但會受限於進階指令執行流程的設計和規格,可能不會完全滿足工作的需求。例如ENVI 軟體是IDL 進階的視窗界面,影像處理的功能強大,但必須熟悉ENVI界面的特定運作方式,才能靈活運用,另外ENVI軟體也需要IDL來擴展其現有的功能。市面上也有許多第三者撰寫的 IDL 進階程式,如果剛好符合工作需求,也可以直接拿來使用,但不要太依賴,以後變成都會上網尋找特定程式,並不是自己寫程式來解決工作上的問題。本書作者不是反對使用進階的程式,只是希望讀者能更熟悉且精通基本的指令,遇到特別的工作需求時,可以自己獨立撰寫程式。
從IDL 7.0 版本開始,IDL公司推出新繪圖系統(new graphics),提供一些繪圖函數,可以簡單地繪製複雜的圖形,例如顏色桿、條形圖以及箱型圖等,但在本書中不介紹新繪圖系統,因本書作者相信這些複雜的圖形以IDL傳統的繪圖系統也能做到,只不過比較費時。新繪圖系統是建立在物件的繪圖和傳統的指令語法上,等傳統的繪圖方式熟悉後,再從線上查詢系統去學習新繪圖系統,這些新繪圖指令的掌握可以更得心應手。本書介紹的指令和關鍵字至少可以適用至IDL 6.0 版本,更低的版本也可能適用,但有少部分的指令或關鍵字會發生問題,當這種情況發生時,讀者可以使用線上查詢系統去做確認。在 IDL 中,有些指令所配合的關鍵字很多,本書只列出常用的關鍵字,作者不希望以本書去取代線上查詢系統,希望讀者先熟悉常用的關鍵字,然後再從線上查詢系統擴展至其它特殊需求的關鍵字。對於各個指令的完整關鍵字集,讀者可以查閱 IDL 系統的線上查詢系統,注意的是,有些指令的關鍵字會互相衝突,不能同時使用,或者某一個關鍵字一旦使用,就會讓另一個關鍵字失效。
本書採取不精簡的寫作風格,有些內容會在不同章節中重複介紹,主要是為了各個章節的獨立性和完整性,作者希望讀者在同一章節學到與相同主題相關的IDL觀念和技巧,盡量不要跳到其它章節去學習,以避免分心至其它主題,作者也極力避免重複過多的情況。本書附上的範例眾多,讀者需要反覆練習,直到熟練為止。有些範例針對相同的工作需求,卻以不同方式來實施,一樣都可達到目的,作者希望以這樣的書寫方式,讓讀者不要拘泥於某一種特別的方法,能夠多方嘗試來找出最適當的方法,另外也可傳達「執行方式不只有一種」的概念,讓讀者能夠靈活應用IDL程式語言來幫忙解決工作上的需求。在本書的範例中,如果指令敘述的前面包含提示符號「IDL>」,代表這個指令敘述可以直接輸入,如果沒有包含提示符號,則需要使用文字編輯器把所有的指令敘述鍵入成為一個檔案,然後以指令「.RUN」實施編譯與執行。
對於初學者,作者建議讀者先閱讀第一章的IDL系統之基本操作、第二至四章的三維以下陣列之建立與運算、第六至七章的二維之基本影像繪圖、第十四至十五章的控制指令之運用和副程式之實施、第十六章的一般資料之存取。當讀者熟悉上述章節的內容後,則變成進階使用者,自己可以依據不同的工作需求來選擇適當的章節閱讀,例如需要做三維繪圖的讀者,可繼續閱讀第五章和第八章的三維陣列之建立和繪圖;需要做數學運算的讀者,可跳至第三篇的微積分、線性代數、統計、擬合以及內插的實施;需要做數據訊號處理的讀者,可研讀第二十三至二十四章的時間序列資料之繪製和頻譜之分析;需要做地圖繪製的讀者,可參照第二十五章的地圖之繪製;需要做影像處理的讀者,可參考第二十七至二十八章的數位影像之處理和感興趣區域之分析。專業程式設計師可從第二十九至三十章獲得圖形界面製作和物件繪圖的基本知識和概念。本書提供中英文對照表和英文索引,方便讀者查閱特定內容的位置。本書範例的程式碼可以從網頁 http://www.ss.ncu.edu.tw/~jhshue/idl_programming.html 下載。
有很多人的協助才能讓這本書完成,感謝老婆(李碧惠)的全力支持,讓作者沒有後顧之憂;感謝兒子(許柏祥)提供的封面設計靈感,本書才有簡單而有力的封面;感謝地科領域同事(呂凌霄、黃世任和黃健民)的激勵,作者才沒有半途而廢;感謝助理(齊宇柔)和學生們(吳冠廷、徐稚婷、畢可為、黃冠瀚、陳沛羽、蔡承新、謝文傑、謝怡凱)的校稿,才能讓本書得以完美呈現;感謝中大出版中心(李光華、周惠文、張翰璧、徐幸君)的審查、遠流出版公司(簡玉欣)的排版,以及科協股份有限公司(康念滇)的授權,本書才能順利出版。
本書封面的主插圖是由IDL的物件繪圖製作而成的,包含一個IDL標誌和二個魔術方塊,一個雜亂的魔術方塊代表執行IDL前的工作狀態,另一個整齊的魔術方塊代表執行IDL後的工作狀態,雜亂的魔術方塊掉至IDL標誌後變成整齊的魔術方塊,就像生澀的蘋果掉至牛頓的腦袋上後變成有條理的科學成果。IDL 程式語言的功能強大,可以幫助使用者將雜亂的工作狀態變成整齊的工作狀態,成就豐碩的研發成果。