11/22/2006

電腦基礎概論

馮丁樹編著

概述:



一、產生背景:

十九世紀末,由於科技與工商業的發達,人類活動的項目與範圍,不斷增加與擴大,遂造成一個新的『資訊爆發』時代。再加上人類因時間與空間觀念的改變,對於即時與正確情報的需求也愈感迫切。在這種情況下,大量繁雜之資料需經迅速而正確的處理、傳遞或計算,方能滿足人類真正需求。傳統的人工作業方式只能處理較少量且較無時間性的資料,對於大量且需即時處理的資料,已難以滿足,而其方法亦漸不切實際。歐美國家乃殫精竭慮研究發明了電子計算機(俗稱電腦),以作為快速處理或運算大量資料之工具。

電腦的使用,在人類發展史上應屬第二次工業革命。在第一次工業革命中,人類藉著機械與動力之發明,延伸其工作能力;而第二次電腦的革命中,人類則使用計算機延伸其計算能力。由於積體電路技術日新月異,使電腦硬體價格不斷下降,更助長其推廣使用。不僅改變人類的日常活動,而且改變其思想觀念與組織結構。人類從此更離不開電腦的服侍了。在電腦的協助下,可以用最少的人力、時間與資源,但達到最大的工作效益,對講究勤能補拙、勤儉美德的中國人來,電腦正是實踐這些優良傳統的現代工具。目前電腦已不只是資訊工業產品而已,它是『生活』的一部份,在民眾的生活、行政效率與工商業發展等各方面都發生影響。

在軟體發展方面,過去資訊工業剛萌芽時,電腦硬體的價值佔八成,軟體只占二成;但近手來硬體價格逐年下降,而硬體則因不斷成熟的各種應用軟體的開發上市,使得硬體與軟體的價值逆轉為二比八,而中國人是一個具有高度智慧的民族,最適合發展軟體工業。


二、電腦的定義:

電腦之發展是以計算機Computer為基礎,經過長時間之研究發展而開發出來的一種高性能的資料處理裝置。因此在對電腦下定義之前我們必須先對計算機作個詮述。

2-1 計算機( Computer)

計算機一詞有很多種解釋,而就其基本功能而言,它是一種高性能的作業裝置,能接受資料之輸入,並對這些資料按照適當的程序加以處理後,將其結果輸出。


計算機
┌───┐ ┌──────┐ ┌────┐
│ 輸入 ├────┤ 資料處理 ├───┤ 輸出 │
└───┘ └──────┘ └────┘

2-2 電計算機(Electronic Digital Computer)
電腦(Electronic Brain)

電子計算機(俗稱電腦),係由許多具備不同功能之機械,電子設備所組成的一組機器。而其功能乃是利用輸入設備輸入資料(Data),然後將資料儲存在主儲存體(Main Memory)中然後再依使用者的控制(Control),將這些資料經過運算(Arithmetic)或邏輯分析(Logic ),使其產生有用的資訊(Information)後,經由輸出設備輸出資訊,以供使用者參考。

由於它具備了人腦處理問題的模式,一般人慣常稱呼它為電腦(Electronic Brain)。事實上,不管怎樣,一個是學名,而另一個則是俗名,只不過稱呼的場合罷了。

三、電腦的特性:

在基本上,電腦有下列三項功能:
  • 1. 快速且精確的運算能力。
  • 2. 強大而有彈性的記憶能力。
  • 3. 能回答邏輯思考性的問題。

這三點也正是人腦所缺乏的,所以它與人腦配合起來,可發揮神奇的效果。

四、電腦的應用:

電腦的應用範圍非常廣泛。凡是問題的解決方法與程序能被編寫成程式指令者,都可納入電腦處理。有一點值得注意的是,雖然電腦的功能強大,決算速度甚快,但並不是所有的工作都適宜使用電腦處理。有些工作太過份強調用電腦處理時,其效果反而會適得其反。較適合使電腦的事情大多是資料量龐大,強調正確計算或限時者。

科技之進步,已使過去之夢幻逐一成真,未來『秀才不出門,作遍天下事』之美景,將因『通訊到家 』目標之達成而實現。


(一)一般應用:

  1. 無人彈奏能自行演奏的鋼琴。
  2. 坐在家中即能向各中西餐廳點菜的電腦系統。除了點菜之外,其他娛樂方
  3. 面的信息亦可在家獲得立即的提供。
  4. 電腦護膚、理髮、定裝及購買衣服之配衣系統。以縮短女人上街的時間。
  5. 自動考照、換照、補發駕照系統。公路局監理站目前己開始使用此套系統,以縮短考照的時間。
  6. 休閒觀光資訊系統。要到某一個地方若不能先獲該地的資訊,有時其為不便。電腦的連線即可解決此一問題。學電腦的孩子不會變壞,將來電動玩具回到家裡來後,也比較容易管教了。
  7. 醫療保健系統。如行政院衛生署及民總院之職業病防治中心,提供職業病與環境之診斷、醫療及追蹤等並提供有關職業、環境因素對健康影響之諮詣服務等。
  8. 將來專家系統亦可以應用到醫療服務系統上,病人僅需按電腦的所詢問的病徵,即可由電腦獲得有關疾病的名稱及所需之用藥,以取代不耐煩的醫生。
  9. 學術教育資訊系統。學生與老師間的關係愈來愈緊張,利用電腦教學可以減輕這種顧慮。
  10. 衣食住行育樂資訊系統。
  11. 電話系統:影像電話高雄金門間已開放,可直接看到對方,每三分鐘一百元。這對當兵的好男而言未始不是一項福音。中文顥示型無線電叫人系統及大哥大實在方便,但也讓忙的人更加忙碌。整體服務數位網路(IDSN)可利用現有之銅纜提供語音、數據、影像及控制等多樣化之服務。使上述的方便更為顯著,電話恐嚇的案子應愈來愈少了。
  12. 家庭警報系統:竊盜增多,是目前治安之隱憂,利用電腦的控制與預警,可以使個家的安全更有保障。且其間亦可進行各種控制的工作,以彌補人手之不足。

(二)完整的個人及辦公室資訊管理系統

  1. 備忘錄:小型的文書處理系統。
  2. 行程管理/工作計劃/萬年曆/農民曆/鬧鐘:協助查詢過去或安排未來工作上各種約會及計劃。除每日之工作安排之外亦設定每週例行的工作計劃。
  3. 計算機:提供桌上型計算機之功能,具四則運算、記憶式運算、括弧與邏輯運算功能。
  4. 名片夾:將名片或客戶資料建立成名片檔,系統自動提供索引功能,以供快速之更新、查詣及列印。
  5. 資料管理工具:將日常生活上或工作上各種重要資料分類歸檔,以利查詢及更新。可以建立:客戶資料、書籍及剪報資料等管理系統。
  6. 萬用手冊:提供各種常用之資料庫,可供即時之檢索及查詢,包括:國際電話各國國碼及主要城市之區域號碼,主要家之國定假日。


(三)工商業方面之應用

  1. 國防科技方面:如工程的設計、摸擬與控制等作業。實際之過程如炸藥生產自動控制系統,運用電腦執行炸藥危險品生產自動控制。彈道設計、測試自動化系統,藉彈道設計、測試自動化系統運用電腦高速計算與分析能力,以找出最佳的參數。光電追蹤指揮自化系統,執行目標搜索、軌跡預測、追蹤及姿態穩定功能。
  2. 會計、統計方面:如薪資計算、成本分析、實用分析、統計事務...等。其中主要包括總帳會計作業、銀行票據作業及員工薪資作業等。
  3. 管理方面:生產管理、銷售管理、事務管理、人事管理、庫存管理...等。一般餐飲業、商店、工廠、批發、零售及加工業等之作業程序如貨品作業、客戶廠商、進貨作業、應付帳款、支援作業、庫存進出、銷貨作業及應收帳款等。
  4. 預測、分析及調查方面:生產預測、銷售預測、投資分析,財務分析,股票分析等。可提供成本分析、買進賣出判斷、價格排名表及券商大勢分析等。
  5. 金融方面:存放款、匯兌、股市行情分析、保費計算、票據交換...等。
  6. 教育方面:閱卷、圖書管理、電腦教學、成績統計...等。
  7. 交通方面:鐵、公路與航空之訂座、公路監理、港灣...等作業。
  8. 公共行政方面:民意調查、犯罪記錄分析、稅捐計算、選舉..等。
  9. 醫學方面:病歷管理、藥品管理、病患追蹤...等。
  10. 日常生活:微電腦控制家庭用品、家用電腦、電動玩具,...等。其他如
  11. 租屋資訊交換的崔媽媽服務中心、電腦擇偶中心。遊戲程式如電動玩具、三國志、俄羅斯方塊。
  12. 電傳視訊服務:現有之BBS網路、如電信局之電傳系統、農委會之農
  13. 情報導系統、勞委會職訓局之企業/職業訓練活動資訊系統,只要加入其系統,各訓練機構提供的課程研討會、演講會、考察團、職業訓練及檢定、兢賽等資訊活動均能從自已的電腦螢上查到。
  14. 多媒體系統:結合處理不同媒體的能力,包括文字、數據、圖形、靜態畫面、動畫、影像、聲音和特殊音效等,而由電腦微處理器控制做交談式對話的系統產品。

利用電腦影像、音響效果、光碟及中央處理機組成。其功能分:

  1. 多媒體數位化週邊處理裝置及控制軟體。
  2. 多媒體處理工作站。
  3. 多媒體發展系統。

可能用途:簡報系統、展示系統、大型視訊板、影音製作、導覽系統、查詢
系統、教育訓練、銷售促進等等。

  1. 簡報場合:提昇聲音、影像表現力與訴求力。如達文西、展昭
  2. 娛樂場合:提昇聲音及影像品質。屬低中層次之產品,以Video Game使用為主。
  3. 教育訓練場合:提高使用者人機介面品質。


(四)、農業方面之應用:

  1. 作業分析及系統模擬:農機成本分析、農家記帳系統、農機管理系統、農機修護物料管理系統、豬牛等生長及飼料管理系統。植物生長模擬、穀物乾燥模擬、農產物應力分析、風場流動分析,...
  2. 自動控制之應用:曳引機駕駛控制、水平控制、耗油量控制、打滑率控制、收穫機損失控制、脫粒筒轉速控制、田間作業速率控制、播種精度控制、插秧間距控制、溫室控制、乾燥機操作控制、農機作業安全之警示。
  3. 影像處理辨識及光電技術之應用:農漁產品、穀物之顏色選別、大小選別、異物選別、成熟度之辨識。
  4. 機器人之應用:噴藥作業、水果採摘、花卉之盆栽、高級農作物之選別、植物工廠、協助廢棄物之處理。
  5. 人工智慧及專家系統之應用:農機元件之製造、牲畜疾病之檢查與診斷、農機故障之診斷、引擎故障之診斷、農作物產量之預估、市場價格之警報等。
  6. 毛豬拍賣系統:早期毛豬拍賣市場幣端甚多,利用電腦可以自動過磅、買主身份及繳款額度控制、競價過程到成交後之各式報表產生等全部由腦連線控制。台北縣肉品拍賣市場每天要處理數千頭豬隻,平均每六秒即有頭豬成交。
  7. 其他應用:CAI、協助教學、協助農機試驗、檢查動物發情期、懷孕期、倉儲自動化作業等。


(五)、微電腦之一般應用(套裝軟體)----------------------------------------

  1. 文書處理、簡報系統、繪畫系統、排版系統PE II、KS2、慧星一號、天蠍星、WORD STAR、MS WORD、WORD PERFECT 達文西、變影 72、DR HALO、PC PAINT、PAINT BRUSH、MAC PAINT、GEM 雅墨、畢昇、漢通、天工、PAGE MAKER
  2. 速算表、資料庫處理國喬雙子星、LOTUS 1-2-3、EXCELL、 MULTIPLAN、... 慧星二號、DBASE III+、DBASE IV、FOXBASE、RBASE、 ...
  3. 工程繪圖及製造 AUTOCAD、CADKEY、VERSA CAD、MAC DRAW、...
  4. 統計及製表 STATGRAPH、SAS、SPSS、MS CHART、ENTERGRAPHICS
  5. 通訊軟體: PROCOMM、TELIX、CROSSTALK、PCTALK、APPLETALK


討論題目:

1. 什麼是電腦?他的功能如何?
--輸入輸出、大量記憶、快速運算及邏輯運算。

2. 電腦具有之特性:
--有容乃大,容量大佔空間小。
--電光石火,運算速度快。
--孔明神算,精確度高、品質劃一。
--千里一線牽,具備電傳能力。
--恆久忍耐、永不止息,永不疲乏。

3. 電腦的歷史:
--機械時期:1642-1946
--真空管時期:1946-1954 第一代
--電晶體時期:1954-1964 第二代
--積體電路時期:1964--? 第三代
-SSI
-MSI
-LSI
-VLSI 第四代

4. 什麼叫硬體? 什麼叫軟體 ?(韌體?)
--靈魂與軀體
--機體與程式

5. 電腦之基本結構:
--輸入部門
--記憶部門    ─┐
--計算及邏輯部門─┴─中央處理部門
--輸出部門
--控制部門

6. 電腦的分類:
--大型電腦:超級快速電腦
--中型電腦
--小型電腦:迷你級
--微型電腦:個人電腦或家用電腦

7. 中央處理部門:

a. 中央處理機 CPU
--6502、Z80、Z8
--8088、8086
--80286、80386、80486
--68000、68020、68030
b. 唯讀記憶體(ROM)
c. 隨機存取記憶體(RAM)
d. I/O通道
e. 資料、住址及控制用排線
8. 記憶體及資料之儲存
--位元(bit)
--位元組(byte)
--位址(address)


五、電腦的演進:

第八章、 電腦繪圖

第八章、 電腦繪圖




QUICK BASIC 提供相當強之繪圖指令,可在單色色或彩色顯示器上顯示各種形狀、
顏色及圖案。為執行繪圖功能,所用之電腦必須有繪圖能力者,如選用 CGA、EGA 或
VGA等介面,若使用 HERCULES 介面,則必須事先執行 QBHERC.COM 檔。為進行繪圖,
必須先設定螢幕規格及模式,如:

SCREEN n,coloron,apage,vpage

此處 n 值可為 0,1,2,3,7,8,9,10,11,12 或 13。其選擇依所用之監督器及介面而
定。coloron 為顏色之選擇開開,若為零,則僅黑白顯示,非零值則顯示彩色,在 n值
大於 2 時,此參數會被忽略。apage為實際繪製頁,vpage 則表示螢幕顯示頁。通常繪
製與顯示頁相同時,此兩參數均可省略。除 n 值必須存在外,其他參數均可省略,但
若省略中間之參數時,其逗點仍應保留。

式中之 n 值為模式值。n 值為零時屬文字模式,可使用於單色或彩色之螢幕。其
餘依其解析度之不同,可進行繪圖。有些則是文字與圖形混合模式。一般之設定模式分
別如下,其餘則可參考使用手冊。

1. 單色或 Hercules 卡時 n = 0, 3 ( 解析度 720 x 349), 10
2. CGA n = O, 1, 2
3. EGA n = 0, 1, 2, 7, 8, 9, 10
4. VGA n = 0, 1, 2, 7, 8, 9, 10, 11, 12, 13

各模式下之螢幕解析度如下:

n=1,7,13 : 320 x 200 文字 40 x 25
n=2,8 : 640 x 200 文字 80 x 25
n=3 : 720 x 349 文字 80 x 25
n=9,10 : 640 x 350 文字 80 x 25 或 80 x 43
n=11,12 : 640 x 480 文字 80 x 30 或 80 x 60


螢幕像點及座標:
==============

在螢幕上之圖形是由許多光點所組成,此稱之為像素(pixels)。BASIC 中之繪圖指
令主要功能在打開或關閉像點及改變其顏色。

典型之螢幕係由這些像點縱橫排列而成。其像素之數目及排列方法通常由所裝置之
硬體以及在 SCREEN 中所宣告之模式所決定。可打開之像素數目愈多,其所能繪製之圖
像也愈清析。列如,SCREEN 1 之解析度為 300 x 200 點(水平 300 點,垂直 200 點)
,而 SCREEN 2 則為 640 x 200 點。故模式 2 每列為 640 點,為模式 1 之兩倍,其
圖形會顯得更尖銳、更清析。

依據所裝置之系統之差異,可選用其他模式以獲得更高之解析度。其相關特性如上
表所示。只要所裝設之螢幕係屬於上面所列模式中之一種,你即可利用座標之表示方式
來指定某一像素點。一般所用之座標為成對的。在螢幕之左上角為座標原點(0,0)。以
圖 5.1 中所示之螢幕為例,螢幕之右下角座標為 (639,199),右上角為 (639,0),左
下角為 (0,199);而其上中、中央及下中分別為 (320,0)、(320,100)及 (320,199)。
基本上,BASIC 是採用這些螢幕座標作為決定顯示圖形之根據。

有一點值得注意的是,圖像座標與文字模式下所用之座標並不相同。前面曾提及
LOCATE 之定位座標則是以文字模式為基礎的。在螢幕上,標準之文字模式為 80 x 25
個字。故每一個字元所佔之像素為 8 x 8 個。LOCATE 之指令通常對圖型模式之螢幕不
發生任何影響。

畫點、線及框:
============
1. 畫點:

PSET [STEP](x,y),color
PRESET [STEP](x,y),color

一般簡單之圖形可利用 BASIC 之內建指令為之。PSET 與 PRESET 為畫點之指令。
此兩種指令之功能基本上是一樣,尤其當其後面之顏色參數均分別設時為然。在高解析
度繪圖型中,顏色如為 0 代表黑色,1 代表白色(或綠色)。在顏色均未設定之情況,
PSET 會自動設定為前景顏色;而 PRESET 則自動設定為背景顏色。換言之,利用
PSET 可以在螢幕上繪一點,而用 PRESET 則可在螢幕上擦去該點,因為後者將繪製之
顏色設定與背景顏色一樣。

在此兩個指令中,若不用 STEP 時,其 x,y 所表示者為絕對座標,若加上 STEP
則 x,y 所示者為與前一點之相對座標。

2. 畫線與框:

LINE (x1,y1)-(x2,y2)
LINE -[STEP](x2,y2)
LINE [STEP] (x1,y1)-[STEP](x2,y2),color,B[F],style

繪直線時,必須指出起始及終止座標,其間以『-』連接,如第一種型式。若是從
上一次之直線為開始,則可不必將第一點寫出,採用第二種型式即可。與前面畫點之情
況相同,若在座標前加上 STEP,表示該座標為與前一點相對之座標,否則即為絕對座
標。

第三種型式為 LINE 較完整之指令格式,其 color 參數所指為線本身之顏色代號
。有畫線之指令事實上很容易畫框,但在 LINE 指令本身亦提供一簡易繪製方框之方法
。只要在指令後面選 B,則同一指令變成繪製方框之指令,而其兩點座標則分別為方框
之左上角及右下角之座標。若在 B 參數之後加上 F 參數選項,則所繪製之框中,將塗
滿顏色。在選 B 時,其前面之 color 若不選,則其逗點仍應保留。

3. 畫虛線:

利用 LINE 指令亦可將直線繪成虛線顯示。在 LINE 之參數最後一項為 style 所
代表者為不同虛線之代碼。style 為十六位元之整數值,以十六進位表示。其每位元之
值若為零時表示該像素關閉,為 1 時表示打開。例如 style=&HCCCC 時,其二進位表
示法為 1100110011001100,故所得之虛線為二點開二點閉之情況。

畫圓、橢圓與弧:
==============

1. 畫圓:

CIRCLE (x,y),radius
CIRCLE STEP (x,y),radius
CIRCLE [STEP](x,y),radius,color,start,end,aspect

CIRCLE 之指令可繪製一般圓形、橢圓、橄欖形及其他弧形曲線。畫圓時,事先必
須知道兩件事,其一為圓心之座標,其二為半徑。圓心之座標亦分為絕對及相對兩種,
相對者必須在其座標前加上『STEP』之字樣。有上述資料後,保證你可以繪出一個漂亮
的圓形。下面為其中二例:

CIRCLE (200,100),75
CIRCLE STEP(-120,0),75 執行二敘述後,相等於執行 CIRCLE (80,100),75

2. 畫橢圓:

在螢幕上,有時所繪之圓並不很圓,主要是螢幕硬體上之關係。為此,可利用
CIRCLE 指令中之 aspect 參數。加此參數時,若其前面之某些參數省略,其逗點仍應
保留。此處 aspect 之值為圓形封閉線內,垂直直徑與水平直徑之比值。此項比值可以
由此參數進行調節。但若從有意設定之角度來看,利用此參數之改變,亦可獲得橢圓形
或橄欖形,前者為此參數愈大之情況,後為此值小於零的情況。不過在此必須注意的是
,由於半徑在水平及垂直之方向不同,指令中之半徑參數應為何者方正確?在 BASIC
語言中,若 aspect 之值小於一時,半徑係指水平方向;aspect 若大於或等於一,則
半徑為垂直方向。下面為其數例:

CIRCLE (60,100),80,,,,3 '高瘦橢圓
CIRCLE (60,100),80,,,,3/10 '矮胖橢圓

3. 畫弧:

弧為圓或橢圓之一部份,或為短曲線。在瞭解 CIRCLE 指令如何畫弧之前,須先瞭
解 BASIC 如何量測角度。在 BASIC 中其函數所用之角度單位均為弧度。故在 CIRCLE
之指令所用之角度參數亦不例外(唯一例外是使用 DRAW 指令時,須以度表示之)。

在 CIRCLE 中其角度均以反時針方向為基準,並且以此方向作為起始與結束之劃分
。繪製一弧線時,需提供起始角度及終了角度。其格式如下:

CIRCLE [STEP](x,y),radius,[color],start,end[,aspect]

式中之 start 及 end 分別為弧線之起始弧度及終了弧度。但記得若僅為畫弧線部
份時,則 start 與 end 所需之弧度均應為正值。

4. 畫餅:

CIRCLE 指令亦可用來畫切分之餅。上面所列參數 start 與 end 所需之弧度若均設
定為負值,則執行該指令之後,弧線之起始及終點均會與其圓心相連,構成一個被切開
之餅,可作為繪製派圖之用,如:

CIRCLE (100,50),30,,-2.5,-3.14

11/16/2006

如何畫圖

圓形是畫圖之重要項目之一,但是在MATLAB並無直接指令可進行畫圓。畫一個圓需要圓心及半徑,亦需要顏色的參數。問題是圓在繪製時,必須先清礎座標的比例,否則會造成楕圓或比例不對稱的圓,此點可以在畫圓前先作等軸的宣告,至於終端機本身之軸向若有不等比例,則必須由終端機之控制鈕調整。即:


>> axis equal;



>>axis image

後者之指令功能與前者大略相同,但它會將所繪的圖自動調整至中央部份,可以一覽全圖。無論如何,經由上述任一個宣告之後,兩軸之比例亦會相等,若不宣告,則必須自行調整視窗之長與寬,使其近似等比的情況。

基本上圓周之構成可用三角函數的關係式計算:
x=rcosθ
y=rsinθ
    1.1
其中角度θ則應自零至360度。而其區間應為θ/ Nb。

繪圓之指令(circle.m)則如下述,其輸入參數包括半徑、圓心位置及繪製之點數。本指令本身並不自行繪圖,主要提供圓周各點之座標,供其他座標操作用途,故必須配合一小程式執行繪圖之功能:


function [coords] = circle(r,x0,y0,nn)
% This function draws a circle in a radius r,
% at the center (x0,y0)
% The inputs:
% r = radius of circle
% x0, y0= coordinates of the circular center
% nn = number of drawing points
% coords(nn,1-2)= vectors to store the coordinates
% Example: circle(10,0,0,10)
jj=0:2*pi/nn:2*pi;
coords=[x0+r*cos(jj);y0+r*sin(jj)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


實例:繪一半徑為5,原點處之圓。

>> coord=circle(5,0,0,20)
coord =
Columns 1 through 8
5.0000 4.7553 4.0451 2.9389 1.5451 0.0000 -1.5451 -2.9389
0 1.5451 2.9389 4.0451 4.7553 5.0000 4.7553 4.0451
Columns 9 through 16
-4.0451 -4.7553 -5.0000 -4.7553 -4.0451-2.9389 -1.5451 -0.0000
2.9389 1.5451 0.0000 -1.5451 -2.9389-4.0451 -4.7553 -5.0000
Columns 17 through 21
1.5451 2.9389 4.0451 4.7553 5.0000
-4.7553 -4.0451 -2.9389 -1.5451 -0.0000
>> plot(coord(1,:),coord(2,:))
>> axis equal
>> grid on




上述指令中,plot()是常用的指令,但也可以用line()這個指令取代(讀者可以自行在MATLAB上測試)。兩個間之不同處是,可以同時繪多圖,亦可在其後面之參數添加顏色值,後則是僅能繪一組線資料,其顏色則必須利用set()之指令進行設定。一般認知上,應為圓滑之曲線,但就circle()指令之操作,實際上圓仍由線段組成。因此段數或點數nn愈多,所繪製之曲線會愈為平滑;而其平滑度仍然會與半徑大小有關。故nn值之設定在本例中也有其重要性。

上述circle()之繪圓指令,只是先獲得圓周點之資料,供其他程式計算之用途。指令若能直接繪圖,則其功能將更為強大。函數circle1()是另一種多功能的繪圓指令,其內容如下:

function h=circle1(r,x0,y0,Nb,C)
% function h=circle1(r,x0,y0,Nb,C)
% Adding circles to the current plot
% Variables:
% r:radi of circle, a scalar or row matrix.
% x0,y0: Centers of circles, a scalar or row matrix
% C:line colors, a string ('r','b'...),
% or RGB values in column
% Nb:No. of drawing points, a scalar or
% row matrix(default=300)
% the size of Nb must be one
% or equal to the size of r.
% h:handles to the circles
% Rules:
% 1. r=a matrix, (x0,y0)=a scalar:Multiple
% co-centered circles
% 2. r=a scalar, (x0,y0)=row matrix: circle with
% r at each center
% 3. r,(x0,y0)=same length row matrix: circle
% with coresponding r at cooresponding center
% 4. r,(x0,y0)=different-length row matrix: Mutiple
% circles with different r at each center.
% Examples: (execute the commands "clf;" first)
%% Example 0:> circle1
%% Example 1
% circle1([1 2 3],[2 3 5],[1 2 1],20);
%
%% Example 2
% the=linspace(0,pi,200);
% r=cos(5*the);
% circle1(0.1,r.*sin(the),r.*cos(the),20,hsv(40));
%
%% Example 3
% [x,y]=meshgrid(1:10,1:10);
% circle1([0.5,0.3,0.1],x,y,20,['r';'y']);
%
%% Example 4
% circle1(1:10,0,0,3:12,[]);
%
%% Example 5
% circle1((1:10),[0,0,20,20],[0,20,20,0]);
%
% rewritten by Din-sue Fon. BIME, NTU. Date:Nov 18,2004.
% Check the number of input arguments
axis equal;
if nargin <5,C=get(gca,'colororder');end
if nargin <4,Nb=300;end
if nargin <3,y0=0;end
if nargin <2,x0=0;end
if nargin <1,r=1;end
% Change matrices into row-wise ones
x0=x0(:);y0=y0(:);r=r(:);Nb=Nb(:);nx=length(x0);
if length(y0)>nx&nx==1,x0=ones(length(y0),1)*x0;end;
if nx>length(y0)&length(y0)==1,y0=ones(nx,1)*y0;end;
nr=length(r);nx=length(x0);nnb=length(Nb);

if length(y0)~=nx,
error('The lengths of x0 and y0 must be identical');
return;
end;
% plotting
for k=1:nx,
if nx==nr,
coords=circle(r(k),x0(k),y0(k),Nb(rem(k-1,nnb)+1)+1);
h(k)=line(coords(1,:),coords(2,:));
set(h(k),'color',C(rem(k-1,size(C,1))+1,:));
else
for m=1:nr
coords=circle(r(m),x0(k),y0(k),...
Nb(rem(m-1,nnb)+1)+1);
h(k,m)=line(coords(1,:),coords(2,:));
set(h(k,m),'color',C(rem(k*m-1,size(C,1))+1,:));
end
end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [coords] = circle(r,x0,y0,nn)
% function [coords] = circle(r,x0,y0,nn)
% This function draws a circle in a radius r,
% at the center (x0,y0)
% The inputs:
% r = radius of circle
% x0, y0= coordinates of the circular center
% nn = number of drawing points
% coords(nn,1-2)= vectors to store the coordinates
% Example: circle(10,0,0,10)
jj=0:2*pi/nn:2*pi;
coords=[x0+r*cos(jj);y0+r*sin(jj)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

1.1.2畫圓程式之應用

在MATLAB中繪線,可用line的功能,這個繪線指令係根據座標點矩陣逐點連線繪製。但是連線時係以直線表示,因此必須在適當的點數下所繪製的圖才能近似圓形,故點數也相當重要。在circle之函數當中,其輸入之變數分別如下:

  •  r::圓之半徑,可為列矩陣,若為列矩陣時,代表可同時繪製許多圓。
  •  x0, y0: 圓心之座標,可為矩陣,若為矩陣時,代表可同時繪製許多不同圓心位置之圓。
  •  C:圓之顏色
  •  Nb: 繪圓時所用之點數,其預設值為300點。

函數circle1()除可繪圖外,可以繪製多種型式的圓,並附上顏色。程式內容看來較為複雜,實際執行僅是其中之下半部,其餘均在核對輸入參數之正確性,使程式更能處理不同的需求。這個程式即使僅打入circle1亦可運作,如:

>> circle1
ans =
152.0021




圖2所示即為其繪圖之結果,由於輸入參數均未設定,故程式僅採用預設值,即半徑為1,圓心為原點。指令窗中所顯示之ans=152.0021為此圖之握把值,該值可以作為程式中指定該圖之參考指標。 

實例:

>> circle1([1:10],0,0)
ans =
Columns 1 through 8
152.0050 156.0038 157.0037 158.0033 159.0033 160.0032 161.0032 162.0032
Columns 9 through 10
163.0032 164.0032



圖3為同心圓,只要半徑為列矩陣,即可繪出不同的同心圓,而其顏色則依預設之順序分配,若欲固定顏色,則可在最後一參數中輸入其RGB值。

同心圓之方式也可稍作改變,這是將半徑10分成1,2,3,…,10之同心圓。若將中心點之位置移動,而半徑值固定,其程式如下:

實例:

>> clf;circle1(20,1:2:10,1:2:10)
ans =
152.0054
156.0042
157.0040
158.0035
159.0035



在此實例中,開始下clf是先將前圖洗淨的意思,若不下此指令,則後圖會與前面的圖重疊,不然就要先以configure(h)設定另一個圖窗。若要不同半徑之圓處於不相干之位置,亦可利用下述之方法求得:

實例:

>clf;circle1([1 2 3],[2 3 5],[1 2 1],20);



在此指令下,可以看到半徑r=[1 2 3]的列向量,而圓心x,y也是同元素之列向量,故繪出其對應的圓。其顏色則依內定的排列方式自動顯出。在此每圖之點數均為20點。這種變化有時可以應用在其他有規則之圓心軌跡上,如下面之實例:
實例:

>> the=linspace(0,pi,200);
>> r=cos(5*the);
>> circle1(0.1,r.*sin(the),r.*cos(the),20,hsv(40));
>> circle1(0.1,r.*sin(the),r.*cos(the),20,hsv(40));




在第一行指令中,有一個新指令linspace(),它是分點的函數,亦即在一數列上自開始點至終點間分成若干線段點,其最後之參數即為段數。請注意它不是linespace()。

在這個例子中,另外加顏色碼,使其變化依繪圓的過程而轉變顏色。hsv(40)是一個色彩度之顏色值,分成40個點,但每點有3項RGB值,故其形成之資料大小應為40x3。顏色亦可用文字代表,即'r'(紅色);'y'(黃色); 'k'(黑色);'b'(藍色)等,但必須以行矩陣表示。

若半徑與圓心座標之元素個數不同,則會在不同的圓心上作同心圓,如下實例:

實例:

%test1
clf;
axis equal;
[x,y]=meshgrid(1:5,1:5);
circle1([0.5,0.3,0.1],x,y,['r';'b']);




網格之製作可利用meshgrid()函數,其參數包含X軸與Y軸部份,以方格進行切割,得到不同之座標位置。利用circle1()函數即可以網格點為圓心,繪製不同之同心圓。

除此以外,亦可利用圓周之點繪製多邊形,其實例如下:

實例:

>> circle1(1:10,0,0,3:12)
ans =
Columns 1 through 8
152.0056 156.0044 157.0043 158.0038 159.0038 160.0034 161.0034 162.0034
Columns 9 through 10
163.0034 164.0034



比較複雜之運用則是除點數外,可以運用參數之可變特性繪製特殊之圓形圖形。

實例:

%test2
%
clf;
x=zeros(1,200);
y=cos(linspace(0,1,200)*4*pi);
rad=linspace(1,0,200);
cmap=hot(50);
circle1(rad,x,y,300,[flipud(cmap);cmap]);




此程式中,所用之函數大部份均已用過,其中zeros()函數較為特殊,通常一個矩陣中各元素要令其為零時,可用此函數,其括號內為矩陣之大小。此函數亦可作為某一矩陣大小之宣告,事先預約空間,使電腦在執行時加快速度。其相對應之函數為ones(),其功能相同,只是此函數將所有元素均設定為一。

在顏色之參數中,有一flipud()函數,這是將矩陣上下鏡射交換,使色調成為對稱狀態。

1.2如何繪製橢圓

某一特定點離兩固定點間之距離和為一定時之軌跡為ellipse 圓。垂直之兩軸是由半長軸Ra與半短軸Rb,構成,其與橢圓周上任意點P之座標關係如下:

x²/Ra²+y²/Rb²=1
x = Racosθ, y=Rb sinθ      1.2



若橢圓之長軸旋轉一個角度φ,則,則其新座標將變為:

x'=x cosφ-y sinφ
y'=x sinφ+y cosφ    1.3

將公式1.2代入1.3則關係式變為:

x'=Racosθ cosφ-Rb sinθ sinφ
y'=Racosθ sinφ+Rb sinθcosφ        1.4

事實上圓的圖形亦可作為ellipse 圓之特殊形,因為只要ellipse 圖之長軸與短軸相等時,即可以作成圓。與前面作圓之情況相同,在執行此指令時,若要避免發生重疊,可以先清除圖窗(即clf;)。

橢圓繪圖程式之應用

依據公式1.4,橢圓之座標點可用ellipsexy()這項函數求得,其輸入參數包括半長短軸Ra、Rb,中心座標(x0,y0),迴轉角度ang及點數 nn等。其座標值則儲存在coords中,可以直接用來繪圖。其程式之內容如下:


function [coords] = ellipsexy(ra,rb,x0,y0,ang,nn)
% function [coords] = ellipsexy(ra,rb,x0,y0,ang,nn)
% This function draws a ellipse with a long radius ra,
% and short radius rb at the center (x0,y0)
% The inputs:
% ra, rb = long & short radii of the ellipse
% x0, y0= coordinates of the ellipse center
% nn = number of drawing points
% ang = angle of the long axis, in radians
% coords(nn,1-2)= vectors to store the coordinates
% Example: ellixy(10,0,0,10)
jj=0:2*pi/nn:2*pi;
coords=[ra*cos(ang)*cos(jj)-rb*sin(ang)*sin(jj)+x0;...
ra*sin(ang)*cos(jj)+rb*cos(ang)*sin(jj)+y0];

本程式ellipsexy()並未有繪線之功能,可以配合plot()或linke()等繪線函數為之。仍採用line 的功能,逐點連線繪製。由於連線係以直線表示,因此必須在適當的點數下才能繪出近似橢圓形,故點數也相當重要。下面之實例中,點數僅10點,故其橢圓未能成形,可以比較其所繪出之圖形。

實例:半長短軸分別為10、5,中心座標為原點,長軸迴轉30度,試繪出其外形。

>> coord=ellipsexy(10,5,0,0,pi/6,10)
coord =
Columns 1 through 8
8.6603 5.5368 0.2985 -5.0538 -8.4758 -8.6603 -5.5368 -0.2985
5.0000 6.5903 5.6633 2.5731 -1.4999 -5.0000 -6.5903 -5.6633
Columns 9 through 11
5.0538 8.4758 8.6603
-2.5731 1.4999 5.0000
>> plot(coord(1,:),coord(2,:))
>> axis equal;grid on



具有繪製橢圓功能之函數為ellipse0()。可以多重繪製各種橢圓。其程式內容如後,主程式並呼叫副程式ellipsexy(),後者可以另行建檔,或附於呼叫程式之後。其相關參數如後:

  • ra, rb:橢圓之半長短軸,可為列矩陣,若為列矩陣時,代表可同時繪製許多橢圓,原則上兩陣列之大小應相同,若其中一個為常數(即為1x1陣列),程式會自動調整與其他一項目同。
  • ang:長軸之傾斜角,以度度表示。可為列矩陣,若與ra或rb之大小相同,則會在各中心點處繪製對應之單一橢圓。
  • x0,y0:橢圓之中心座標,可為矩陣,若為矩陣時,代表可同時繪製許多不同圓心位置之橢圓。
  • C:橢圓線之顏色,可為RGB之三組數值,是為行矩陣。亦可用代碼表示。如['r';'b';'k'...]。注意為使其形成行矩陣,中間必須用分號隔開。
  • Nb: 繪ellipse 圓時所用之點數。預設值為300。

其他參數配合使用原則:

  • 若ra 為單一項,x0,y0 為向量矩陣,則會繪製向量矩陣數之橢 圓。若x0,y0 為單一項,則會繪製同心橢圓。
  • ra 為向量矩陣,則會繪製同一橢圓心之不同半徑向量矩陣數之橢圓。
  • ra 均為同大小之矩陣向量,則會繪製數目相同之橢圓。 若x0,y0 與ra 均為不同大小之矩陣,則會繪製總數為兩矩陣數目之乘積。
  • 實例:繪製一個傾斜某30角度之橢圓。

>> ellipse0(2,1,0,0,30,'r')
ans = 152.0020


實例:在相同半長短軸及中心點下,可以變化角度,產生旋轉之橢圓群:

>> ellipse0(2,1,0,0,0:20:360)
ans =
Columns 1 through 8
160.0020 161.0020 162.0020 163.0020 164.0020 165.0020 166.0020 167.0020
Columns 9 through 16
168.0020 169.0020 170.0020 171.0020 172.0020 173.0020 174.0020 175.0020
Columns 17 through 19
176.0020 177.0020 178.0020



實例:若半短軸維持不變(可以輸入單一值),配合半長軸進行變化。

>> ellipse0(1:10,4,0,0)
ans =
Columns 1 through 8
152.0024 156.0024 157.0024 158.0024 159.0024 160.0024 161.0024 162.0024
Columns 9 through 10
163.0024 164.0024



實例:同時變化半長短軸,其他維持不變。

>> ellipse0(1:6,0.5:0.1:1.0)
ans = 152.0026 156.0026 157.0026 158.0026 159.0026 160.0026




實例:變化半長短軸,也變化Y軸之高度。

>> ellipse0([1:10]*2,1:10,0,1:10)
ans =
152.0037 156.0037 157.0037 158.0037 159.0037 160.0037
161.0037 162.0037 163.0037 164.0037



實例:曲線變化半長短軸,也變化Y軸之高度。

>>ellipse0([1:10].^2,1:10,0,[1:10]*10);




程式內容:

function h=ellipse0(ra,rb,x0,y0,ang,C,Nb)
% h=ellipse0(ra,rb,ang,x0,y0,C,Nb)
% Adding ellipse to the current plot
% Variables:
% ra,rb:longitudinal & horizontal axes of a ellipse, scalar or matrix.
% ang: angle the ellipse inclines, in deg.
% x0,y0: Centers of the ellipses, a scalar or row matrix
% C:line colors, a string ('r','b','k'...),or RGB values in column
% Nb:No. of drawing points, a scalar or row matrix(default=300)
% h:handles to the ellipse
% Rules:
% 1. ra,rb= matrix, (x0,y0)=a scalar:Multiple co-centered ellipes
% 2. ra,rb= scalar, (x0,y0)=row matrix: ellipse with ra & rb at each center
% 3. ra,rb,(x0,y0)=same length row matrix: ellipse with coresponding r at
% cooresponding center
% 4. ra,rb & (x0,y0)=different-length row matrix: multiple ellipses with
% different pairs of ra & rb at each center
% 5. ra, rb should have same size
% Examples: (execute the commands "clf;" first)
%% Example 0: ellipse0
% ellipse0(2,1,0,0,0:10:360);
% clf;ellipse0(3,1,[0 2 5],[0 1 4],0:10:360)
% ellipse0(ra,rb,ang,x0,y0,C,Nb), Nb specifies the number of points
% ellipse(1,2,pi/8,1,1,'r')
% author: Din-sue Fon. Bime, NTU, Date:November 18, 2004
axis equal;
if nargin <7,Nb=300;end
if nargin <6,C=get(gca,'colororder');end
if nargin <5,ang=0;end
if nargin <4,y0=0;end
if nargin <3,x0=0;end
if nargin <2,rb=1;end
if nargin <1,ra=2;end
% change the matrices into one row
x0=x0(:);y0=y0(:);ra=ra(:);rb=rb(:);ang=ang(:)*pi/180;
nr=length(ra);nx=length(x0);
if length(rb)>nr&nr==1,ra=ones(length(rb),1)*ra;end;
if nr>length(rb)&length(rb)==1,rb=ones(nr,1)*rb;end;
if length(y0)>nx&nx==1,x0=ones(length(y0),1)*x0;end;
if nx>length(y0)&length(y0)==1,y0=ones(nx,1)*y0;end;
nr=length(ra);nx=length(x0);nnb=length(Nb);nang=length(ang);
if length(y0)~=nx|length(rb)~=nr,
error('The lengths of ra & rb should have same size!');
return;
end
if isstr(C),C=C(:);end;
for k=1:nx,
if nx==nr,
for n=1:nang
coords=ellipsexy(ra(k),rb(k),x0(k),y0(k),ang(n),...
Nb(rem(k-1,nnb)+1)+1);
h(k,n)=line(coords(1,:),coords(2,:));
set(h(k,n),'color',C(rem(k*n-1,size(C,1))+1,:));
end
else
for m=1:nr
for n=1:nang
coords=ellipsexy(ra(m),rb(m),x0(k),y0(k),ang(n),...
Nb(rem(m-1,nnb)+1)+1);
h(k,m)=line(coords(1,:),coords(2,:));
set(h(k,m),'color',C(rem(k*m*n-1,size(C,1))+1,:));
end
end
end
end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [coords] = ellipsexy(ra,rb,x0,y0,ang,nn)
% function [coords] = ellipsexy(ra,rb,x0,y0,ang,nn)
% This function draws a ellipse with a long radius ra,
% and short radius rb at the center (x0,y0)
% The inputs:
% ra, rb = long & short radii of the ellipse
% x0, y0= coordinates of the ellipse center
% nn = number of drawing points
% ang = angle of the long axis, in radians
% coords(nn,1-2)= vectors to store the coordinates
% Example: ellixy(10,0,0,10)
jj=0:2*pi/nn:2*pi;
coords=[ra*cos(ang)*cos(jj)-rb*sin(ang)*sin(jj)+x0;...
ra*sin(ang)*cos(jj)+rb*cos(ang)*sin(jj)+y0];

11/10/2006

遞回程序之使用

MATLAB Recursive use of function

遞回程序是利用函數呼叫自己,直到特定條件滿足為止。例如:某一數列連續加法,即


Sum=1 + 2 + 3 + 4 + ...+n

下面為這種遞回程序之應用:

function sum=sigma(n)
%Recursive use of function
%Find the sumation of i, if i=1:n
if n>1
sum=n+sigma(n-1);
else
sum=1;
end


執行結果:

>> sigma(5)
ans =
15

這種結果,在MATLAB中不寫程式也可以指令達到相同的目的:

>> sum(1:5)
ans =
15

另外例子:

>> sigma(100)
ans =
5050

>> sum(1:100)
ans =
5050


同樣的道理,若累加改為累乘則會如何呢?實際上程式內容一樣簡單,函數名稱改為factx就行了:


function sum=factx(n)
%Recursive use of function
%Find the multiple prodcut of i, as i=1:n
if n>1
sum=n*factx(n-1);
else
sum=1;
end

執行結果如下:

>> factx(5)
ans =
120

只是,MATLAB竟然將這項功能也變成一個factorial指令了:

>> factorial(5)
ans =

120

結果是不是一樣呢?

11/07/2006

使用繪圖工具

繪圖工具是一種交談式之繪圖環境,不必寫程式。這是matlab最近加強的功能,它可以產生不同型式之圖形,亦可由工作空間中直接選定要繪製之參數資料。具有併圖的功能,一般圖形特性也可以透過此一繪圖工具來達成。


>> plottools

由圖形窗直接選擇 Show Plot Tools指令亦可,最後會顯示如下之視窗。下面之繪圖程式可先提供繪圖之素材,執行後之結果會直接顯示在圖窗上。

x = 0:pi/100:2*pi;
y1 = sin(x);
y2 = sin(x+.25);
y3 = sin(x+.5);
subplot(2,1,1);
plot(x,y1,x,y2,x,y3);
axis tight;
w1 = cos(x);
w2 = cos(x+.25);
w3 = cos(x+.5);
subplot(2,1,2);
plot(x,w1,x,w2,x,w3);
axis tight;


將上述程式以editor存檔,然後在指令窗下執行,其後再執行plottools,即可得到下面的圖形介面。此時圖形會顯現在正中央,兩側分別為圖形繪製時之參數。左邊為圖形佈置參數,可以隨時增加副圖,包括二維與三維之圖形。此外為輸入之變數資料,這些小窗可以關閉或加入,或在參數設定時宣告即可。例如:

>>plottools( 'on', 'figurepalette')

>>figurepalette




圖形之內容則可直接利用滑鼠選擇,其對應之線圖會在左側之圖形觀視窗內顯示,亦可勾選是否顯示。




圖形窗之使用說明

工作鈕的功能


圖形除由plot等指令繪製外,其結果仍可以在窗形窗下修改,所以即使不會圖形指令之參數者,亦可利用圖形窗上之工作鈕作修正。這些工作鈕包括存檔及列印、縮小及放大、圖形旋轉及座標轉換等等。其外觀如下:


此外,由view選單中可以拉出兩個工作單,其一稱為相機工具(Carmera toolbar),可操作三維之圖像;其二為圖形編輯單(Plot edit toolbar),可以對圖形特徵、註解、指示箭頭等進行編輯。





在MATLAB中,有各種二維及三維之繪圖指令可以應用,以適應不同的需求。其中包括線圖、方塊圖、面積圖、向量圖、極座標圖及散佈圖等,可以參考如下之網頁:

有關各種圖之說明,請按此。。。

MATLAB的圖形介面

MATLAB是利用figure作為圖形顯示介面,可以顯示資料及各類型之圖形。實際上亦可利用figure這一個指令產生所需之圖形環境,利用此環境尚可加添說明及其他資訊。所顯示之圖形可以放大縮小,而且具有下拉式介面。

利用plot指令則可將不同的圖形繪於圖形環境之中。利用plot指令可以顯示表格資料,幾何圖形,物體表面及影像。註釋方面則可增加標題、圖標及顏色標等。圖形可利用二維及三維顯示。即使一維的資料亦可顯示於圖中,而使用資料序號作為橫軸對映繪出。

圖之組成


利用繪圖指令及相關工具可以直接將結果顯示於圖形窗之中,每一圖可以有不同的視窗,最後集成一個圖形組。例如以下面之程式,執行後可以得到二維圖形:

x = [0:.2:20];
y = sin(x)./sqrt(x+1);
y(2,:) = sin(x/2)./sqrt(x+1);
y(3,:) = sin(x/3)./sqrt(x+1);
plot(x,y)






上圖中為執行結果,程式會自動使用不同的線型及顏色分別不同組的資料圖,等到技巧成熟時,也可以透過設定參數的方式更改這些顏色及線型。

10/31/2006

串接指令之應用

MATLAB Catenation Commands

串接兩矩陣,構成新矩陣之指令如下表:








函數名稱說明
cat沿設定方向串接
horzcat沿水平方向串接
vertcat沿垂直方向串接
repmat依垂直與水平方向倍數串接
blkdiag由現存之矩陣產生對角矩陣


下面為執行這些函數指令之例子:

串接矩陣與陣列



除使用中括號[]作簡單串接外,其他串接指令有cat、horzcat及vertcat等三個函數。這些指令可以交互運用,例如要將AB兩矩陣作垂向串接時,下述三個指令均可得到同樣的結果:

水平串接:

 C = [A B] %使用中括號,相隔用分號。
 C = cat(2, A, B); % 第一參數設定為2。
 C = horzcat(A, B); % 無額外參數。


垂直串接:

 C = [A; B] %使用中括號,相隔用分號。
 C = cat(1, A, B); % 第一參數設定為1。
 C = vertcat(A, B); % 無額外參數。


拷貝串接



使用repmat函數在垂向及水平方向產生不同數量之拷貝矩陣,其指令型式如下:

repmat(M, v, h)

MATLAB 將輸入矩陣垂直方向拷貝v 次;水平方向拷貝h次。下面舉例:


A = [8 1 6; 3 5 7; 4 9 2]
A =
8 1 6
3 5 7
4 9 2

B = repmat(A, 2, 4)
B =
8 1 6 8 1 6 8 1 6 8 1 6
3 5 7 3 5 7 3 5 7 3 5 7
4 9 2 4 9 2 4 9 2 4 9 2
8 1 6 8 1 6 8 1 6 8 1 6
3 5 7 3 5 7 3 5 7 3 5 7
4 9 2 4 9 2 4 9 2 4 9 2


區塊對角矩陣



利用blkdiag函數可以結合矩陣,鉗入對角方向,產生許多區塊對角矩陣,在區塊之外的新建元素位置則設定為零:


A = magic(3);
B = [-5 -6 -9; -4 -4 -2];
C = eye(2) * 8;

D = blkdiag(A, B, C)
D =
8 1 6 0 0 0 0 0
3 5 7 0 0 0 0 0
4 9 2 0 0 0 0 0
0 0 0 -5 -6 -9 0 0
0 0 0 -4 -4 -2 0 0
0 0 0 0 0 0 8 0
0 0 0 0 0 0 0 8

如何擴張矩陣

How to expand the size of a Matrix

擴張矩陣有兩種方式:

  1. 增加新元素於一矩陣上。
  2. 儲存一元素於矩陣的範圍之外。


兩矩陣之結合


第一種情況是利用中括號[ ]。這個符號不僅作為產生新矩陣之方法,也可用來增加新元件或新陣列,只是當要要增加新元素或部份矩陣於一舊矩陣上時,必須先確定其大小是否合適。下面為其例:

A = ones(2, 5) * 6; % 2-by-5 matrix of 6's
B = rand(3, 5); % 3-by-5 matrix of random values

C = [A; B] % Vertically concatenate A and B
C =
6.0000 6.0000 6.0000 6.0000 6.0000
6.0000 6.0000 6.0000 6.0000 6.0000
0.9501 0.4860 0.4565 0.4447 0.9218
0.2311 0.8913 0.0185 0.6154 0.7382
0.6068 0.7621 0.8214 0.7919 0.1763



由此可知,矩陣往下延伸時,其行數必須相同。同理,若往右或左向延伸,其列數必須相同。

>>c=[];for k=1:4, c=[c;eye(3)*k];end;
>>c=
1 0 0
0 1 0
0 0 1
2 0 0
0 2 0
0 0 2
3 0 0
0 3 0
0 0 3
4 0 0
0 4 0
0 0 4


結構陣列之結合


結構陣列亦可利用矩陣增列的方式建立。建立之後再利用reshape指令進行重整。

%Concatenating to a Structure
% Create a 3X4 structure array M
for k=1:12
M(k)=struct('Name',{['code', num2str(k)]},'value',10*k+8);
end
M=reshape(M,3,4)
%Create a 3X2 array using the same field name
for kk=1:6
N(kk)=struct('Name',{['code', num2str(kk+12)]},'value',10*kk+2);
end
N=reshape(N,3,2)
%Concalenate N onto M alogn the horizontal dimension
S=[M N]
%-------------------------------------------


上面之程式經執行之後,會顯現結果如下:

>> S

S =

3x6 struct array with fields:
Name
value


原來的欄位為Name與value,利用相同的欄位可以增加同型式之結構矩陣。

小陣列結合大陣列


要將小陣列加入大陣列,其大小顯然不對等,但此時亦可指明置於大陣列中之位置,此位置可以超出大陣列之範圍,因而擴大其領域。大陣列之大小會配合增加,其餘未增加之空位以零補充,以維持其長方形矩陣之型式。

例如,一個 3X5 之矩陣之內容如下:


A = [ 10 20 30 40 50; ...
60 70 80 90 100; ...
110 120 130 140 150];


今若隨便增加一個新元素,以下面的操作方式,會產生錯誤的信息:

>>A = [A; 160]

??? Error using ==> vertcat
All rows in the bracketed expression must have the same
number of columns.


但若直接指定這一個元素置於某特定位置,如第四列第一行時,反而可行,其餘空間會自動以零補足。


A(4,1) = 160
A =
10 20 30 40 50
60 70 80 90 100
110 120 130 140 150
160 0 0 0 0


即使插入的是一組小陣列,只要指定於適當的位置,一樣可行,不會發生錯誤。


A(4:6,1:3) = magic(3)+300
A =
10 20 30 40 50
60 70 80 90 100
110 120 130 140 150
308 301 306 0 0
303 305 307 0 0
304 309 302 0 0



即使增加的新元素離開原矩陣的範圍甚遠,MATLAB一樣會將其他未觸及的部份補足零,以維持一個長方型矩陣:


A(4,8) = 300
A =
10 20 30 40 50 0 0 0
60 70 80 90 100 0 0 0
110 120 130 140 150 0 0 0
0 0 0 0 0 0 0 300


擴充結構陣列或細胞陣列


即使是結構陣列或細胞陣列亦可利用同一方法進行擴充。下面的例子是以儲存一額外細胞於原陣列之範圍之外的情形,同樣,MATLAB會將其他未指定的部份均填以空細胞[],以維持長方矩陣之外型:

設原來陣列為2X3大小:

C = {'Madison', 'G', [5 28 1967]; ...
46, '325 Maple Dr', 3015.28}


此時若增加一新細胞於C{3,1}之位置,則MATLAB 會增加一整列:


C{3, 1} = ...
struct('Fund_A', .45, 'Fund_E', .35, 'Fund_G', 20);
C =
'Madison' 'G' [1x3 double]
[ 46] '325 Maple Dr' [3.0153e+003]
[1x1 struct] [] []


擴充文字陣列


文字陣列以單一文字為元素,其擴充方式實際上與一般陣列相同,只是這種擴充方式並不理想,故也不建議使用這種方法。由於 MATLAB 對陣列擴充時均以零補足未填入的部份,但有些程式常將零值解讀為終止代碼,如此反而會造成擴充部份之長度未達到全長,因而造成錯誤。

下面的例子是將一個1X5之文字陣列擴充至12個字母,其結果變成一個長字串:


greeting = 'Hello'; greeting(1,8:12) = 'World'
greeting =
Hello World


如果細心審視文字之內碼,變成零值之碼就出現了:


uint8(greeting)
ans =
72 101 108 108 111 0 0 87 111 114 108 100


在字串中間由於零值之出現常會造成一些函數產生不可預測的結果。例如:利用strcmp比較兩字串是否相同時,得到不正確的結果,因為這兩個字串內容實際上是一樣的:

strcmp(greeting, 'Hello World')
ans =
0


上述介紹的方法雖然可以達到擴張矩陣的目的,但若需要重覆進行擴張的動作時,仍然建議不要如此作,因為會浪費電腦計算時間。比較妥當的方式是事先安排足夠的空間,如此可以增加記憶體之運用效率。

10/30/2006

多維陣列範例

多維陣列範例

要產生多維陣列,利用zeros、ones、rand、randn等函數指令亦可完成,例如:


>>W=randn(4,3,5)

W(:,:,1) =

-0.4326 -1.1465 0.3273
-1.6656 1.1909 0.1746
0.1253 1.1892 -0.1867
0.2877 -0.0376 0.7258


W(:,:,2) =

-0.5883 1.0668 0.2944
2.1832 0.0593 -1.3362
-0.1364 -0.0956 0.7143
0.1139 -0.8323 1.6236


W(:,:,3) =

-0.6918 -1.4410 0.8156
0.8580 0.5711 0.7119
1.2540 -0.3999 1.2902
-1.5937 0.6900 0.6686


W(:,:,4) =

1.1908 -1.6041 -0.8051
-1.2025 0.2573 0.5287
-0.0198 -1.0565 0.2193
-0.1567 1.4151 -0.9219


W(:,:,5) =

-2.1707 0.5077 0.3803
-0.0592 1.6924 -1.0091
-1.0106 0.5913 -0.0195
0.6145 -0.6436 -0.0482


其結果等於產生一個4x3x5的陣列,等於60個常態分配之值。這些陣列等於形成五頁。

三維陣列所代表之數值可能也有其他物理意義,例如不同長方形隔間之室溫分佈,或一與時間有關之物理量等等。

設若利用排列組合指令perms(1:4)將1、2、3、4作排列,則應有十六種排法:

>> h=perms(1:4)

h =

4 3 2 1
4 3 1 2
4 2 3 1
4 2 1 3
4 1 2 3
4 1 3 2
3 4 2 1
3 4 1 2
3 2 4 1
3 2 1 4
3 1 2 4
3 1 4 2
2 3 4 1
2 3 1 4
2 4 3 1
2 4 1 3
2 1 4 3
2 1 3 4
1 3 2 4
1 3 4 2
1 2 3 4
1 2 4 3
1 4 2 3
1 4 3 2


其後由魔術方陣產生的矩陣依上述組合依行重排,置於三維陣列M內,則M應可由下指令獲得:


>> for k=1:6, M(:,:,k)=A(:,h(k,:));end
>> M

M(:,:,1) =

13 3 2 16
8 10 11 5
12 6 7 9
1 15 14 4


M(:,:,2) =

13 3 16 2
8 10 5 11
12 6 9 7
1 15 4 14


M(:,:,3) =

13 2 3 16
8 11 10 5
12 7 6 9
1 14 15 4


M(:,:,4) =

13 2 16 3
8 11 5 10
12 7 9 6
1 14 4 15


M(:,:,5) =

13 16 2 3
8 5 11 10
12 9 7 6
1 4 14 15


M(:,:,6) =

13 16 3 2
8 5 10 11
12 9 6 7
1 4 15 14


若利用sum(M,d)這個指令進行加總,則第二參數決定其加總方向,d=1時會以行向進行,但每頁會有一個加總;d=2時則為列向加總,同理,亦應有六頁;d=3為依頁向加總,故其結果應為一4X4之矩陣,其結果如下:

>> sum(M,1) %行向加總

ans(:,:,1) =

34 34 34 34


ans(:,:,2) =

34 34 34 34


ans(:,:,3) =

34 34 34 34


ans(:,:,4) =

34 34 34 34


ans(:,:,5) =

34 34 34 34


ans(:,:,6) =

34 34 34 34

>> sum(M,2) %列向加總

ans(:,:,1) =

34
34
34
34


ans(:,:,2) =

34
34
34
34


ans(:,:,3) =

34
34
34
34


ans(:,:,4) =

34
34
34
34


ans(:,:,5) =

34
34
34
34


ans(:,:,6) =

34
34
34
34

>> sum(M,3) %頁向加總

ans =

78 42 42 42
48 52 52 52
72 44 44 44
6 66 66 66

10/29/2006

3.3輸入之判斷

輸入判斷與隔離

有大部份的輸入必須依靠鍵盤,但常易造成人為疏失,仍然有賴程式加以矯正。下列為一個提示程式,在使用者按enter鍵之後,必須判斷是否與真正的答案有否出入。


%answer.m
%Check the answer
A=input('是否繼續作答 (Y/N)? ','s');
A=upper(A);
if (isempty(A)|A=='Y')
A='Y'
else
A='N'
end 

執行結果:

>> answer
是否繼續作答 (Y/N)? y

A =

Y

3.9由AB二邊求構成之三角形面積

已知AB向量求其構成面積
題意:空間兩向量A與B均通過原點,求其OAB之面積

解析:

通過原點之向量A、B,設

A=a1i+a2j+a3k、B=b1i+b2j+b3k



absA=(a12+a22+a32)(1/2)
absB=(b12+b22+b32)(1/2)

兩向量叉積之向量設為Z,其值應為|AXB|,且等於三角形面積之兩倍。

故截面積=(dot(Z,Z))1/2


%Find the trangular area between vectors A & B
A=[0 0 4],B=[0 4 0]% Vector A & B
AA=cross(A,B)/2 % Cross product of A & B is equivalent to double area
Area=sqrt(dot(AA,AA))



執行結果:


>> triangle

A =

0 0 4


B =

0 4 0


AA =

-8 0 0


Area =

8

10/24/2006

While 迴圈

While迴圈
利用while...end是可以不確定執行次數下停止,利用if...end則可協助判斷。以求多項式之x²-2x-5之根為例,先確定可能根的範圍,例如:b>x>a,則可利用分段法逐漸迫近解:


% find root of athe polynormial f(x)=x^3-2x-5
a=0;fa=-Inf;
b=3;fb=Inf;
while b-a>eps*b
x=(a+b)/2;
fx=x^3-2*x-5;%polynormial
if sign(fx)==sign(fa)
a=x;fa=fx;
else
b=x;fb=fx;
end
end
x
-------------------------------------

上述之解法中,先設定a與b之值及其對應之f值,由於後者之第一次較難掌握,故只要使用正負無窮大之值作為起點。進入後,即進行二分法,求得新x值即可確定得到f的對應值。當然在這裡設定負無窮大在a=0這邊,也有點冒險。執行的結果如下:

>> format long
>> ex01

x =

2.09455148154233

10/23/2006

如何轉換細胞陣列與結構陣列

細胞陣列與結構陣列之轉換

細胞陣列與結構陣列兩者間都是屬於資料結構之表示法,故其間之轉換也是一項重要的步驟,通常使用如下兩指令:


  • struct2cell:由結構陣列轉為細胞陣列。
    cell2struct:由細胞陣列轉為結構陣列。


  • 第一項可以直接由結構轉換細胞陣列,但會失去欄位之資訊。
    第二項由細胞陣列轉換為在後面多加兩項參數,其一為欄位名稱,其二為其維度。其指令型式為:


    c = struct2cell(s)
    s = cell2struct(c, fields, dim)


    舉例:

    >> clear book, book.category = 'novel'; ...
    book.name = '請用文明來說服我'; book.author = '龍應台'...
    ;book.price=500;
    >> book

    book =

    category: 'novel'
    name: '請用文明來說服我'
    author: '龍應台'
    price: 500

    >> cost=struct2cell(book) %由book結構轉為cost細胞陣列

    cost =

    'novel'
    '請用文明來說服我'
    '龍應台'
    [ 500]

    >> cost{3} %使用大括號

    ans =

    龍應台

    >> cost(2) %使用一般括號

    ans =

    '請用文明來說服我'

    >> cost{2} %使用大括號

    ans =

    請用文明來說服我


    最後之兩個指令雖然相同,但其意義不同,前者仍然是一個細胞之型式,後者為其內容。

    下面為由細胞轉回結構陣列之情形,必須在第二項加入欄位名稱,此名稱並不一定要與原先的一致:



    >> BOOK=cell2struct(cost,{'class' 'Book_name' 'Author' 'Price'})

    BOOK =

    class: 'novel'
    Book_name: '請用文明來說服我'
    Author: '龍應台'
    Price: 500

    >> BOOK.Book_name

    ans =

    請用文明來說服我



    最後一項顯然為其內容。若原來資料有多筆記錄,則必須加入dim之參數。

    排序的問題

    陣列的排序常按大小以升幂(asend)或降幂(descend)排列,其指令型式為sort()或sortrows()。這兩種指令之結果略有不同,茲以magic(6)所產生的矩陣為例:


    >> AA=magic(6)

    AA =

    35 1 6 26 19 24
    3 32 7 21 23 25
    31 9 2 22 27 20
    8 28 33 17 10 15
    30 5 34 12 14 16
    4 36 29 13 18 11

    >> sort(AA)%依行向方式排列

    ans =

    3 1 2 12 10 11
    4 5 6 13 14 15
    8 9 7 17 18 16
    30 28 29 21 19 20
    31 32 33 22 23 24
    35 36 34 26 27 25

    >> sort(AA,2)%依列向方式排列


    ans =

    1 6 19 24 26 35
    3 7 21 23 25 32
    2 9 20 22 27 31
    8 10 15 17 28 33
    5 12 14 16 30 34
    4 11 13 18 29 36

    >> sort(AA,2,'descend')%依列向且以降幂方式排列

    ans =

    35 26 24 19 6 1
    32 25 23 21 7 3
    31 27 22 20 9 2
    33 28 17 15 10 8
    34 30 16 14 12 5
    36 29 18 13 11 4

    %可以依
    >> D=[[2 2 3 3 4 4]' AA(:,[1:3])] %先造一個新矩陣

    D =

    2 35 1 6
    2 3 32 7
    3 31 9 2
    3 8 28 33
    4 30 5 34
    4 4 36 29

    >> sortrows(D,[1 2]) %依第一及第二行排列

    ans =

    2 3 32 7
    2 35 1 6
    3 8 28 33
    3 31 9 2
    4 4 36 29
    4 30 5 34

    最大值與最小值

    最大值與最小值分別使用max()與min()兩函數即可求得,兩者之參數型式均相同。但其結果均是以行向比較,不是列向。例如:


    >> a=magic(5)

    a =

    17 24 1 8 15
    23 5 7 14 16
    4 6 13 20 22
    10 12 19 21 3
    11 18 25 2 9

    >> max(a)

    ans =

    23 24 25 21 22



    若要使用列向表示,則必須在第三參數上標明,其第三參數即為ndim值,至於第二參數則為另一組比較的陣列,若僅求一個矩陣之列向最大或最小值,則第二參數以[ ]空矩陣取代即可,而令ndim=2,如:

    >> max(a,[],2)

    ans =

    24
    23
    22
    21
    25

    >> min(a)

    ans =

    4 5 1 2 3

    >> min(a,[],2)

    ans =

    1
    5
    4
    3
    2

    使用轉置指令亦可得到列向最小值,只是所得的為列向量,必須調整才能符合原先之需求:

    >> min(a')

    ans =

    1 5 4 3 2


    若是兩個相同大小之矩陣進行比較大小時,則可將第二矩陣置於第二參數位置,而ndim值同樣有效,只是其預設值為ndim=1:

    >> B=[1:10]';
    >> b=[10:-1:1]';
    >> max(B,b)

    ans =

    10
    9
    8
    7
    6
    6
    7
    8
    9
    10

    在左邊的輸出參數第一項為行向或列向之最大或最小值,其第二項輸出則為其在該行向或列向之所在位置:

    >> [m,I]=max(a)

    m =

    23 24 25 21 22


    I =

    2 1 5 4 3


    不過,若兩矩陣作比較,求取陣列中之最大或最小值時,輸出項中不能有第二參數,因為各參數之同列或同行進行比較,均為已知。

    10/22/2006

    一個向量的絕對值

    絕對值為一個向量之無符號正值,其指令為abs()。例如一向量m如下:


    >> m=[-5:5]
    m =
    -5 -4 -3 -2 -1 0 1 2 3 4 5

    >> abs(m)
    ans =
    5 4 3 2 1 0 1 2 3 4 5

    但是向量若為複數,則其絕對值為該複數之模數,或實量,例如:


    >> mm=[3+4i;4+9i;5-4i],x=abs(mm)
    mm =
    3 + 4i
    4 + 9i
    5 - 4i
    x =
    5
    9.8489
    6.4031

    所以,若以複數型式表示兩相垂直之座標量,則利用abs之絕對值功能可以求得其向量之絕對值。亦即若


    R= a + bi


    則|R|=(a*a+b*b)1/2,而|R|=abs(a+bi)

    若一個向量超過二項單元,則亦可使用下列計算求得其絕對值:

    >> aaa=[3 4 5 12];r=sqrt(aaa*aaa')
    r =
    13.928
    >> aaa=[3 4];r=sqrt(aaa*aaa')
    r =
    5

    向量之長度

    一個向量之長度及絕對值可以利用length()指令。此指令在於求得向量之長度或元素個數。例如:


    >> a=1:9
    a =
    1 2 3 4 5 6 7 8 9
    >> length(a)
    ans =
    9
    >> length(a')
    ans =
    9

    後者顯示:這個length指令不論向量為行向量或列向量,均取其最大數目之行數或列數。即使a為矩陣,其結果應與max(size(a))相同。

    >> aa=[0:9;0:9]
    aa =
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    >> max(size(aa))
    ans =
    10
    >> length(aa)
    ans =
    10


    下面為向量aa之元素三次方和之指令。開始時先假設aa為數目未知之向量,故必須使用length函數指令來求得其數目,然後再予以三次方並相加:

    >> aa=[1 4 3 5];x=0;for i=1:length(aa),x=x+aa(i)^3,end
    x =
    1
    x =
    65
    x =
    92
    x =
    217

    如何延長指令行數

    如何延長指令長度

    下面是一個將魔術函數轉為行向量,再轉為2X8的矩陣B:


    >> A_magic_elements=magic(4);B=reshape(A_magic_elements(:),2,8)
    B =
    16 9 2 7 3 6 13 12
    5 4 11 14 10 15 8 1

    >> A_magic_elements=magic(4);B=reshape(A_magic_elements...
    (:),2,8)


    注意在上一行之最後項加上三連續點後,要按shift-enter才能接續整個指令之陳述,不能只按enter,否則會立即執行該不完整的指令,因而會得到錯誤指示。

    B =
    16 9 2 7 3 6 13 12
    5 4 11 14 10 15 8 1


    同一個指令亦可利用這種方式分成好幾行一齊執行:

    >> A_magic_elements=magic(4);...
    B=reshape(A_magic_elements...
    (:),2,8)
    B =
    16 9 2 7 3 6 13 12
    5 4 11 14 10 15 8 1

    10/21/2006

    資料格式說明

    資料格式:資料格式在前面也有些討論,其型式依需求而定,數值之項設值為單精度,其表示型式有多種變化,可參考第二章之應用。

    10/20/2006

    字串及文字資料

    MATLAB 資料結構之連結#links

    處理字母(character)及字串(string)資料時,Matlab亦常使用陣列結構。任何一個變數均可置入文字。無論是字母或字串都要使用撇號前後括出來。例如:



    >> str1='hello'

    str1 =

    hello

    >> size(str1)

    ans =

    1 5

    顯然,變數str1為一陣列的型式,故:

    >> str1(2:4)

    ans =

    ell

    >> a=double(str1) %利用double函數轉換為ASCII code

    a =

    104 101 108 108 111

    >> s=char(a) %利用char函數可以將ASCII轉回字串

    s =

    hello

    Char函數除可轉換ASCII為字母外,亦可以將不同長度之字串以最大的長度對齊,例如:

    >> s=char('a','big','sky','that','kisses','the', 'ground.')

    s =

    a
    big
    sky
    that
    kisses
    the
    ground.

    >> size(s)

    ans =

    7 7


    >> s(4,1:7)

    ans =

    that

    >> s' %將其轉置後,可以看到字串中完全以一個字一個位置

    ans =

    abstktg
    ikhihr
    gyaseo
    ts u
    e n
    s d
    .

    >> C={'a','big','sky','that','kisses','the', 'ground.'} %也可以使用細胞陣列

    C =

    'a' 'big' 'sky' 'that' 'kisses' 'the' 'ground.'

    >> CC=cellstr(s) %利用cellstr函數也可以轉為細胞陣列

    CC =

    'a'
    'big'
    'sky'
    'that'
    'kisses'
    'the'
    'ground.'

    >> ss=char(C) %利用char函數再將細胞矩陣轉回字串矩陣

    ss =

    a
    big
    sky
    that
    kisses
    the
    ground.

    10/17/2006

    如何使用Link to the post

    使用Links to the post這個功能時,可以將你要的資料存在另一個部落格之中,然後使用link將其連結過來。開始時,會出現輸入窗,其右上角可以選擇張貼到的部落格名稱,因此必須先行登入才能繼續進行。輸入窗之主題即為連結之名稱,等張貼完成後,此名稱即會出現在"Links to this post"之後,如:


    Links to this post

    資料格式說明

    Create a Link


    當按下"資料格式說明"左方之三角形時,即會出現其連結之資料內容:

    資料格式:資料格式在前面也有些討論,其型式依需求而定,數值之項設值為單精度,其表示型式有多種變化,可參考第二章之應用。
    Posted by MARTIN at 10/21/2006 06:49:00 下午


    這個功能最初有點奇怪,因為在IE explore中使用一直有錯誤的信息,只有在firefox使用才能順暢。很可能將來在使用類似的部落格應用時,必須使用火狐瀏覽器才行。這是google一直在推動的瀏覽器。不知是否在IE explore中需要什麼設定才行。

    10/13/2006

    視窗XP關閉時的幾個想法

    關閉視窗時,一般會出現幾個選擇,即重新啟動、關閉與待命。重新啟動是關閉所有程式、再關閉視窗後即重新啟動,大概沒有什麼可言的;關閉則除關閉所有程式及視窗外並關閉電源。這是一般常用的方法。待命則是將電源設定於低耗電狀態,闗閉螢幕、硬碟、風扇等,但仍維持記憶體的內容。因此下次執行時先前的內容立現,開機迅速。唯一缺點是電池沒電或停電時,內容儘失。

    實際上,安全的方法是用休眠模式,只要按shift鍵,然後按待命鍵即可。其功能與待命相同,優點是現有內容存在磁碟中,不怕停電或電池沒電,因為電源仍處於完全關閉狀態。只是開機時間比待命慢一些,而且要佔去一些硬碟空間。不過若要維持前面的內容,而你的磁碟機容量又夠大,則何樂而不為?總比苦等慢吞吞地開機要來得好些,不是嗎?

    如何在Word指令中增加工作區?

    用過Word的人都知道,其處理用過的檔案常在"檔案"指令之最下一行顯現,以供下次再用。但這些檔案數預設值為五個,到工具的選項下,最高可設定至九個。問題是有那一天心血來潮,突然開了十幾個檔案,把你常用的檔案都擠到界外去了。

    實際上,Word中有一個"工作"區的功能,它可以將你重要的常用的檔案名稱置於此區內,每次要開啟該檔案時,就到"工作"區來尋找就行,真是方便。如何做呢?

    首先,到"工具"指令下,找到"自訂"的視窗。在其上之三個選擇項中選中間的"指令"項,在其左下窗口下拉找到"內建功能表",對應之右窗口內下拉找到"工作"一項。將其拉至Word之主要功能表之"視窗"與"說明"間釋放即可。"工作"的窗口就出現了。

    今後凡是你開的檔案要放在"工作"區內時,只要打開"工作"指令,按下"新增至功能表"就行。

    問題來了,如果那個檔案不要了怎麼消除?消去指令的方式有一個,就是按ctr+alt+-,按了後會產生一個黑體的"-"號,只要將這個"-"號移到要消除的檔案名稱上,一按就行。但是這個符號是消除指令的上方寶劍,它很容易指其他的指令也消去了,弄得天下大亂。

    下面的方法是在"工作"指令窗內增加這個消去之指令:同樣到工具指令->自訂->指令->類別->所有指令->在右窗中找到ToolsCustomizeRemoveMenuShortCut這一串指令,不要找錯,然後用滑鼠將它移到工作指令上,待下拉窗展開後,直接置入即可。為更改為較短名稱及快速鍵代碼,可以在該指令上按右鍵出現選擇窗,將其名稱內容改為"移除表中檔案(&R)"即可,最後關閉"自訂"之視窗即大功告成。

    如何處理文件中左邊的空白?

    有些文章由其他地方拷貝過來後,其每行左邊均留有空白。如果每行處理則太花時間,有一個很好的處理方式是:先將滑鼠置在第一行空白之左上角,按住alt鍵,再將滑鼠移至最底下一行空白之右下角,此區會反白。只要按delete鍵即可去除。

    此種方法亦可除去表格中多餘的空格。

    如何在文件中附上浮水印?

    有些時候我們看到一些文件均有浮水印,覺得非常稀奇,而最常看到的則是補習班的講義,常是"不准翻拷"的字樣,因為它怕人影印,影響生意。不過我們所要的浮水印意不在防止盜拷,只是在讓人瞭解這文件有特殊的任務,比如:禁止攜出、機密文件、限閱等等文字。以前我們很少注意到這些細節,但有些公司行號就必須需要這一層的保護功能。
    在word裡就有這樣的功能,其步驟如下:

    1. 先打開"格式"指令,並在其下拉清單中選"背景"項,此時會出現小視窗。
    2. 在小視窗中,有出現要選的顏色、圖樣及浮水印,可選"列印浮水印"項,隨後出現列印浮水印視窗。
    3. 在視窗中可以選使用文字或圖片,文字之內容、顏色與版面配置均可由此選定,圖片則可選自任何圖片檔案。然後按"確定"即可。

    在第2項中,也可選顏色及圖樣,不過兩者好像不能共存。倒是浮水印與顏色的選擇是可並存的;前者包括浮水印字體之顏色。

    如何鉗入文件?

    早期版的WORD中可以用include的指令鉗入文件,所以一本書可以分章節去寫,然後綜合各章累印成一本書。新的WORD中找不到對應的指令,後來才發覺這個指令已經改為IncludeText,並且屬於功能變數中的一項。它的型式如下:

    { INCLUDETEXT "FileName" [Bookmark ] }

    其中,"FileName" 為文件的名稱和位置。如果位置包含有空格的長檔名,請用引號將它括起來。指定路徑時應使用兩個反斜線取代單一反斜線。例如:

    "C:\\My Documents\\墨菲定律.doc",或

    { INCLUDETEXT "C:\\My Documents\\墨菲定律.doc" chapt01 }

    其中,chapt01為該文"墨菲定律.doc"中之書籤。

    執行時,先將滑鼠置於要插入之位置,然後至"插入"指令下,找到"功能變數項"。此時會出現功能變數之視窗。在"類別"項下選"連結及參照",其下之欄位名稱選IncludeText即可。其後就在地址欄輸入檔案之路徑及名稱,注意路徑必須使用兩個反斜線取代單一反斜線。按確定後該文件即會顯示到主文件中,而且所有頁數也照主文件中之編排。只是鉗入之文件會有灰色反白。若發生錯誤,則可按右鍵,依指示進行修正,或切換功能代碼。 後者可用CTRL+F9鍵進行轉換。

    當然,你也可以在主文件中編輯插入之文件。如果來源文件是 Word 檔,可以編輯由 INCLUDETEXT 功能變數產生的插入部份,再將變更存回原來的文件。其法係在插入的文字後按 CTRL+SHIFT+F7。 這對整本書之修正,相當有用。

    我如何在文件之外框加花邊呢?

    有時我們想利用word製作聖誕卡,或寫一封比較有情調的信時,想在整頁加上花邊。這會使文字內容更為活潑生動。實際上,word很容易處理這件事情。其過程如下:

    1. 由指令菜單進入"格式",選擇"框線及網底"。
    2. 在出現之小視窗中,有"框線"、頁面框線"與"網底"三個項目可供選擇,在此需選"頁面框線"。
    3. 在中間的區域內,應在最底下之花邊"選定特定的花樣,在右邊預覽之區域中則可決定花邊的位置,即使單邊也行。
    4. 按確定即可

    利用這種花邊技術,實際上也可以插入水平線的花邊。以前水平線之插入都置於插入項,新的版本中,水平線之插入是置於框線及網底選項下,所以你若要在文件中插入水平線的花邊,則可以在選第2項時,在視窗之最底下一行有"水平線"之選項,選定後即可選擇插入之式樣。

    我如何建立目錄呢?

    目錄是書的開頭,尤其在寫論文時是甚為重要的一部份。以往目錄均製作於書成之後,實際上目錄也可以在開始寫論文之前作成大網的型式。如此,文章完成後,目錄也一氣呵成。
    產生基本目錄之步驟如下:

    1. 標示文字範圍,包括其內之標題、次標題或自訂標題等內容。
    2. 將滑鼠指向目錄之位置,若要置於文章之起頭,則可按CTRL+HOME 鍵。
    3. 至菜單找到"插入"項,選"參照"項,並選擇最後一項之索引及目錄。此時會出現一小視窗,由其上端之菜單選擇目錄項即可。
    4. 若有內容改變,可參照其所列之參數勾選。然後按"確定"即可。

    參閱:

    用基本型式的目錄,右看左看總不如意,有沒有改變的辦法?

    有的,要改變也很簡單,可以由剛剛的索引與目錄小視窗中去改變。 在該視窗中,預覽列印可以直接看到變化。在底下的一行格式欄中,除直接選自範本外,亦有簡單的、正式的、古典的,樣本可供選擇。除版面改變外,亦可選擇是否要顯示頁碼?是否要靠右對齊?而定位點前置字元是用虛線還是實線?及選擇多少層等等,等等,足夠你自己去玩玩了。

    若非自行設計不可,則亦可行:
    在視窗之右下角處有修改按鈕,出現另一個視窗後即可開始進行修改。

    文章經改正後,如何更新目錄內容呢?

    文件要更新後才送出或列印,以期維持最新數據。更新目錄時只要將滑鼠指向目錄,然後按 F9鍵,或直接按滑鼠右鍵。更新時會出現一個選單,由此可選擇是否只更新頁碼或更新全部目錄。其所需之時間依檔案大小而定,當然僅更新頁碼時間較佐短。

    在工具項中有"追蹤修訂"一項,這是什麼東東?

    有一次我收到學生送來的一篇文章,由Word裡打開一看,裡面除本文外,旁邊夾雜著許多紅色的批註,看起來凌亂異常。當時我真不知道如何處理,只好把它丟在一旁。現在想起來,也覺得自己所學不足,沒法派上用場。追蹤修訂的功能應是Word在基本文書功能外,另一個值得歌功頌德的項目。未來相信不只可用在一般文件之批改,在課堂上亦可作為老師對學生繳交作業的批註,值得成為未來教學的一種新教學型態。

    是的,Word裡這個"追蹤修訂"是大塊功能。當初設計的目的著重於文稿的修訂的過程,通常一篇文稿必須經過多人、多次的修改、潤飾才能定稿;即使一般文章,也需要幾位審閱者審查後才能發表。這種審閱的過程及批註的方法,也有特定的格式,但當經過多人批註後,一定會凌亂不堪。追蹤修訂則可對這些修訂的過程及內容作詳實的記錄,最後再由作者本人或某主持人進行定稿。

    追蹤修訂英文又稱為Track of changes。可經由菜單中選擇"工具"項,再選"追蹤修訂"這一項。此菜單亦可由"檢視"中之"工具列"內,勾"檢閱"項而得。這個"檢閱"菜單之出現,表示文章已經在修訂模式之下。此時在word視窗之最下行(底邊行)亦會出現"TRK"的字樣,表示你的文章已正處於修訂模式(此時亦可由文章框邊桿左下角的第三項會出現方框)。所以不要驚慌,可以在這個模式下進行修訂的工作。

    "檢閱"菜單之內容包括檢閱下拉選單、顯示下拉清單、指向動作、插入註解等。菜單之最後兩項中前者為修訂模式之勾選,後者為"檢閱窗格"之設定。審閱者在文章中可以進行插入、刪除及插入註解的動作。任何對原稿之改變均會在文章之最右邊以紅框顯示,並註明改變人的代號及時間。插入時則直接在文中顯示,除顏色不同外,亦會加底線。在任何經改變的行前頭會豎一縱線,表示該行已有變更。

    在"檢閱"下拉選單中,有顯示完稿變更、完稿、原始原稿標記及原稿等項,可以選項閱覽。顯示完稿變更之選項是比較完整的修正內容,你也可勾選檢閱窗格,使所有修訂之細節在文後顯示。完稿則是經過修正後之稿件內容。原稿標記與顯示完稿變更略有不同,即刪除部份不會直接去除,只是在刪除的字上加刪除線,註解仍然維持相同的樣式。

    在"顯示下拉清單"中則有較具體的選項,以決定不同的顯示方式,包括完稿、原稿、註解、筆跡標註、插入與刪除、註定格式、審閱者、註解方塊、檢閱窗格等。筆跡標註為標記手寫文稿,不過需要輸入板才行。上述這些項目都是選項,可隨著喜好勾選。勾選後修訂的文章內容內隨時改變,但須切記,這些改變只是暫時性的。例如:當你勾選審閱者時,會出現審閱本文的所有人的名字,你可以單選某一審閱者的意見,也可以選全部或其中一部份的意見,但這些僅是依你的勾選而顯示出的結果,實際上這些意見仍然存在。如果沒有經過一番選擇的過程,這些修改及註解均不會消失。這也是為什麼我的學生送我的該篇文章仍然存在所有審閱者內容的原因。

    要消去這些修訂的內容,惟一的辦法是逐筆針對修訂的意見加以確認。確認的過程中可以採取接受或不接受。正好在審閱菜單的中間部份,打勾的表示接受,打X的表丕接受。利用左右按鈕可以逐一將所有的修正均行確認。經過確認過的文章,即使送去給朋友或發表時,那些修訂的內容就不會一再出現了。

    當你寫論文或其他文章的時候,可以善用這種追蹤修訂的功能,如此可以省下不少的時間。無論身為老師或學生,都來擁護及善用這套軟體的功能吧!

    詳細資料請參閱:
    微軟訓練資料
    http://office.microsoft.com/training/training.aspx?AssetID=RC011600131033

    我老眼昏花,閱請那麼細的字都很吃力,word有沒有提供較方便的閱讀功能?

    上了年紀的人常常要帶老花眼鏡,但現在的螢幕的字愈來愈小,看起來實在吃力。為了長篇文件的閱讀,word倒是提供了閱讀版面配置的功能。因此可以很容易看到文章的架構與內容。通常長篇文件也可以縮小版面的方式查看,例如設定25%、50%等,即可小化頁面並觀看大部份文件的架構。但這種方式仍然有不便,因為沒有導讀的功能。

    word的"閱讀版面配置"放在"檢視"指令下。在此模式下,會出現另一組選擇菜單,其中包含"文件引導模式"、縮圖、尋找、參考資料、字型放大與縮小、實圖、及允許多頁的功能。文件引導模式是將文件之標題置於左框內,隨時用滑鼠點閱。縮圖則是將每頁圖縮小,點其縮小頁面即可觀看對應之全頁面內容。

    利用放大(+)及縮小(-)按鈕可以將字放大及縮小,所以可以用較大的字看文章。字型一旦放大,整篇文章之結構也會改變。但只要按實圖鍵,即會恢復正常。只是文章中有圖時,圖並不因而發生變化,故有時會顯示過大或過小的情形。此時僅能將圖視為放置的位置,而非原先的安排方式。

    在這個模式下,同樣可以進行增刪,只是功能較少。亦可在閱讀過程中加註解,然後進行存檔。下次再閱讀時,前次之註解可以再出現。此模式亦提供多頁的功能,但須視螢幕之大小而定,若有雙螢幕,則很容易顯出雙頁或多頁的模式。因此可以像看書一樣。

    如何將橫排轉為縱排?

    在執行Excell的時候,常需要設計表格。有時候資料打了半天,才發覺橫豎的排法好像換個方向比較妥當,但已經打好的資料難道一個一個去搬移嗎?別急,這裡教你一個方法,只要幾個鍵就行。

    通常我們利用拷貝(copy)與 貼上(paste)兩個指令都很習慣,不過常忽略其所包含的額外功能。實際上除貼上(paste)外,尚有"選擇性貼上"一項,在編輯指令中可以找到。所以,你可以要將轉換的部份先拷貝,然後到將滑鼠指向你要拷貝的新位置(最好另外找位置),並在編輯指令中選"選擇性貼上"。在其出現的小視窗內,最下行勾選"轉置"即可。試試看,你一定會覺得滿意的。

    你想看到一句幸運符嗎?

    也不曉得是不是當初設計word的工程師吃飽沒事幹,在word潛藏著一個指令叫rand(),這個指令在其他地方如excel是常有的,是產生亂數的意思,但如果你在word的空白檔上打入=rand()、 =rand(15,22)或 =rand(50,50),看會有什麼新的發現?

    試試看,也許會達到你不少的願望哦!

    你想知道你的電腦系統資訊嗎?

    有時候你要瞭解你目前所用的系統到底含有那些東東,常常看到有經驗的電腦人動一兩個鍵就出來了,實際上這些系統資訊是藏在開始->程式集->附屬應用程式->系統工具->系統資訊裡。

    不過只要輕易地按Ctrl-Alt-F1鍵也可達到同樣目的。不信請自行試試看。

    為什麼說我的檔案太大沒辦法儲存?

    系統的功能愈多,真是弄得頭昏腦脹。有時候問題出在那個地方也找不出錯來。由於word檔也可存語音資料,故若不關閉此項功能,常常會發現檔案無法正確存檔,此時必須將該功能關閉。其法是到工具->選項->按儲存欄,將內嵌語言資料項不打勾,再按確定即會舒服多了。

    我看到有些文件有註腳,這是怎樣做的?

    文章有註腳,有頁註(footnote),也有章註(endnote)。寫文章或研究報告時,特別喜歡用這種方式;有些書籍也常有註腳的使用。這些註腳存在文中可以不中斷文體流暢性,使主體更為鮮明。論文寫作時也常應用。

    在Word中註腳的指令是放在"插入"項下的"參照",再選註腳即可。如同前述,註腳分頁註與章節附註兩種,頁註是置於當頁之底部,章節附註則置於當節或當章之後。兩種均會自動標註號碼,其型式可以自選。頁註通常用1,2,3,章節註用i,ii,iii之方式表示。那些屬於頁註,那些屬於章節註,則由作者決定,但通常頁註較短,幾行就行;較長的可以放入章節註。不過你如事後想更改的話,兩者間均可再互換。

    頁註通常放在本頁之下緣,但也可以選文字下方,其編號方式可以整章連續,即接續本頁,亦可選每頁或每節重新編號,可謂思慮週到。章節附註則可置於本章之後,或本節之後,其編號方式亦可採每節重編的方式。

    附註可以刪除,但要連編號一齊消去,不要僅除去內容。附註亦可移到其他地方,亦可用相同的附註碼指向同一個附註,即按ctrl鍵然後用滑鼠將標號拷貝到另一個地方即可。

    你要寫出一篇有板有樣的論文嗎?勸你多使用註腳這一個功能!順便一提的是註腳的功能若轉為網頁型式,其標號處將改用超連結的方式,其內容將置於網頁之後方。若為章節附註,則同樣地會放在更後面。

    參閱資料:
    http://office.microsoft.com/training/Training.aspx?AssetID=RP010981931033&CTT=6&Origin=RC010981921033

    你厭倦了螢幕上的那些指令了嗎?

    有時候你可能只專心打字,不想理會螢幕上這麼多的繁雜指令,讓心裡清靜一些,也許可以添加一些靈感。這裡有一個方法,可以將電腦的螢幕變為一張白紙。

    先到檢視指令下,挑選全螢幕選項。立即靈光一現,全部都是文字內容,讓你盡情乘馳。你若想叫出原始的指令,可以將滑鼠指到螢幕之最上緣,即會出現所要的指令行。若想回到舊有的世界,那也簡單,只要按一下esc鍵就行。

    你在Excel會用重複輸入的功能嗎?

    小弟那天想在資料表中加上一欄連續的數字,他嫌重打這些數字太麻煩,有沒有好的方法。實際上在excel裡這個功能可真發揮的淋漓盡緻,只是很少人注意到而已。

    對我們老師而言,Excel是計算學生成績的利器。學會它,每個學期的期末成績一定可以準時交卷,不會誤時。

    在滑鼠指向某一格時會令該格反白並圍成一個框,如果你細心注意的話,在該框的右下角有一個小方塊,當滑鼠指到它時會變成+字。這是有玄機的,表示表格可以產生自動填入的功能。

    這個自動填入的功能有多方面的,比如說:你要填一個頭行為星期一到星期日,要你全部打是真費時。不過你至少要在開頭打一個星期一,然後將該格的顯出之+字用滑鼠往右或往下拉,自然會得到星期一至星期日的其他項目名稱。實際上它也是雙語的,英語也難不倒它。例如你在第一格打Monday,用同樣的方法往右拉時,即會產生英文的其他六個名稱,也用你費心背單字。

    到這裡你也許會想:那麼,月份呢,一月、二月鐵是難不倒,January 、February更不用說,你可以試試看。

    至於小弟的問題則比較有學問一點,因為它有間隔的問題,所以必須相鄰的兩個數。比如說:你要1 2 3 4 5,...的系列,則必須前兩格分別置1、2。然後順勢用滑鼠一拉,即可以得到一串你要的數列。若置3、5,則拉出來的數列應為3、5、7、9、 11, ...了。不妨一試!

    照這樣說,電腦真的有點聰明呢!

    說是聰明,倒不如說順服吧!這點倒是需要我們學習的,因為人類往往是自作聰明的多,反而誤事。在美國,一般店員要算錢都靠電腦,實際上她們的算術也不怎麼行,只是電腦讓她們聰明起來,是因為她肯順服電腦的作法,不會自作主張。所以她算錢的時間多用加法,比較容易,也不易出錯。我們常用減法,所以聰明的人可以很快算出,較笨的人就沒辦法了。

    這裡講的順服是有另一番意義。前面的表中,為什麼它會自動出現數字或文字呢?數字是由本身的演算法,但文字卻是照章詳列而已。請打開Excel的工具指令,在"自訂清單"項下可以看出玄機。因為這裡所列除星期、月份外,尚包括季份、天干十二支,你也可以由新清單中,自行新訂生肖,如鼠、牛、虎,。。

    在Excel之格中,難道每一格僅能容下一行嗎?

    照一般的用法好像如此,但也不盡然。因為文字內容若太長,每欄的長度就要加寬,用起來也不太經濟。如果不加長欄寬,它也容許你暫時佔有隔壁的空格,但只能在該空格沒有任何資料時方能為之,否則資料會在中間被切斷。

    採用多行容一方格資料之方式也可以使用,以標題最為常見。其法係將所要跨格的該列全選取,然後按"跨欄置中"這個按鈕(在一般指令與對齊的按紐並列)即可。若想鄰近之上下方格合併,這個按鈕也適用。經過合併後的方格仍以第一方格之位置稱呼之。

    在文字方面,則可利用alt-enter將資料內容切成二行,換到下一行。若為列向則整列的高度也因此加大。若你認為這樣不好看,則使用上下合併方格的方式可以解決美觀的問題。

    在資料指令內有一個篩選的選擇,其功能如何?

    說到這個功能,學問可就大了。一般資料之輸入重複的居多,這一部份在輸入時似乎不必再重複輸入,不是嗎?尤其在特定項目如姓名、學號、身份證號碼等等,若這個人每天出現,你可能每天都要輸入一次他的資料。以姓名為例,這個方格底下的輸入格應是已輸入的人的姓名。若將此欄名的方格設定為"自動篩選"(在篩選項下),則在該欄旁邊會有一個向下的箭號,按下箭號會有一個下拉式的清單,清單上的內容就是你曾經在這一欄下輸入過的名字。因此,如有苟同的,就清單上一選即可,不必重複輸入。

    事實上在任何輸入的位置,你只要按右鍵,選一項"從下拉式清單挑選"的功能,其動作將與這個篩選功能完全一樣。

    方格中可輸入數值也可輸入公式,但公式很容易被認為輸入而洗掉,怎麼辦?

    這是很常見的困難,尤其兩者在外觀看來均相同,你不會刻意去注意該方格的內容,一旦你開始輸入,那屬於公式的資料就被洗掉了,增加許多麻煩。尤其有些公式的內容很長,一旦消去真叫入哭笑不得。

    Excel是有保護的功能,但它的保護方法有點撇腳,因為你必須先保護全表,然後再決定開放那幾個方格可以輸入。保護的方式可以用密碼,也可以不用。其步驟如下:

    1. 選擇"工具",選擇"允許使用者編輯範圍",然後選擇"新範圍"。
    2. 在標題處填上你自訂的名稱,並在參照儲存格內定出需要或被允許輸入新值的方格,其方格範圍可為行列或單獨方格,若有多處則以+號聯繫,選定後按"確定"跳出。
    3. 回到第1項,選"保護工作表"即可。

    輸入時之資料若有不合理值時,產生垃圾進垃圾出,怎麼辦?

    你知道什麼叫垃圾進垃圾出(Garbage in, garbage out),表示你的程度已經相當不錯。通常我們自己寫程式的時候,均會有這種防愚措施,以免程式進入無限的黑洞裡跑不出來,那只好重開機了。

    實際上,excel也容許你去限制輸入值的型式、範圍等。此即為資料之驗證問題。其步驟如下:

    1. 在希望驗證的方格上,可以在資料之指令行內找到驗證這個項目,按下後會出現一個小視窗。
    2. 在設定欄內,可以設定準則。首先為儲存格內允許之型式,其中有整數、實數、日期等項目。若選實數,表示可輸入任何數值。
    3. 此時資料可選擇界定之範圍,或最大與最小值等。違反這些規則將無法進一步輸入。
    4. 其後可在錯誤提醒項下輸入一旦錯誤發生時,應該提示的信息等。
    以上的功能似乎是相當體貼的,讀者不妨多試幾次。

    在Excel中,有時表格一再擴充,要如何找到確定的位置?

    有時候,我們喜歡用大表,因為所有的數據都可以放在一個桌面上看,非常方便,但是表格一大,要尋找特定的資料常會迷失方向。實際上仍有幾個方法不妨利用:

    1. 使用縮放功能。在word中我們常自然而然使用縮放功能,可以在工具列中或圖標上找到縮放的功能。實際上按ctrl,然後用滑鼠的轉輪功能也可達到目的。
    2. 使用命名法。可以在你要閱覽的格中,將其方格標號或所謂的名稱方塊處如A1,直接換上一個名字,如fon 是,將來只要在名稱方塊直接打上fon即可回到你要的方格來。
    3. 利用 [編輯] 功能表上的 [尋找],或按 CTRL+F。在 [尋找目標] 方塊中輸入要尋找的名詞,然後按一下 [全部尋找]。但有時可能會找到好幾個地方。
    4. 下面的控制鍵也很有用,不妨參考。
    • 方向鍵 --往上、下、左或右移動一個儲存格。
    • SHIFT+方向鍵 --按下方向鍵時,以儲存格為單位延伸選取範圍。
    • CTRL+方向鍵 --移到資料的角落處。
    • F5 --開啟 [到] 對話方塊。
    • F2 --編輯作用中儲存格並將插入點置於該儲存格的內容末端。
    • CTRL+END --將插入點移至工作表結尾處。
    • CTRL+HOME --將插入點移至工作表開始處。
    • PAGE UP --上移一個頁面。
    • PAGE DOWN --下移一個頁面。
    • CTRL+PAGE UP --移到前一張工作表。
    • CTRL+PAGE DOWN --移到下一張工作表。
    • ALT+PAGE UP --左移一個頁面。
    • ALT+PAGE DOWN --右移一個頁面。
    • CTRL+SHIFT+PAGE UP --選取目前的工作表及其前一張工作表。
    • CTRL+SHIFT+PAGE DOWN --選取目前的工作表及其下一張工作表。

    在Excel中,要如何使用小計的功能?

    實際上小計的功能很有用處,至少可以對某些相同的項目作分類,並作簡單的統計。小計的功能在[工具]項中可以找到。但要對某部份的表格作小計,必須針對特定的分類項先行[排序],這個功能同樣在[工具]上。

    小計之指令原型為函數subtotal,其參數如下:

      subtotal(n,range)

    參數項中之range問題不大,大部份屬欄或列的範圍。另外n則較特別,因為外觀看起來函數subtotal好像只有總加的功能,實際上並不如此。因此必須特別用n來示別,而真正總加的功能是n=9;其餘n=1是Average;n=2是Count;n=3是Counta;n=4是Max;n=5是Min;n=6是Product;n=7是STDev;n=8是STDevp;n=10是VAR;n=11是VARp。所以你選擇小計subtotal的函數絕不僅加總而已。

    當你用小計的功能函數時,會出現一個小視窗,第一列為排序的那行欄名,第二列為上述所用之n值的代表,第三列則為想要小計的欄位。這個欄位可以複選,故除排序那欄外,只要在表中的欄名均可以選。只可惜第二列之函數功能並沒有配合不同欄有不同的n值。不過你也不必太驚慌,也許你任選一個就當沒事的一樣,等到小計的表格出來之後,對應之n值可以加以更改。

    在小計表中最左邊也有直線的三欄,開始時也許你不知道是啥米糕,不過你若分別按左上角的123的框,你會有驚奇的發現。畢竟excel的功能也會成長,不是嗎?

    MATLAB Educational Sites

    另外一個有關matlab教育性之應用網站為MATLAB Educational Sites。雖然其中有一部份已經失聯,仍可以供參考。

    Matlab 線上教材

    今天自到另一個網站"Matlab 線上教材" ( http://libai.math.ncu.edu.tw/bcc16/B/matlab/)為中央大學單維彰教授經營的網站,內容相當充實,值得參考。