張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室

Slides:



Advertisements
Similar presentations
汇聚财智 共享成长 重归市场化 2012年房地产行业投资策略. 汇聚财智 共享成长 调控的两年 图:房价指数、CPI与政策出台 图:房地产销售与房价图:房地产板块指数 资料来源:统计局,长江证券研究部资料来源:wind,长江证券研究部  资本市场与实体市场的背离  政策与房价的矛盾  信贷、税收、土地、非市场.
Advertisements

CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
教师手册 教师职业守则(全体教师) 中文教学工作细则(中文、双语教师) 中文教师业绩评估(中文、双语教师)
第 4 章 PHP 基本語法.
第五章 主张超尘绝俗的 佛家.
丁 频 农业及食品饮料行业高级分析师 贺菊颖 中药行业分析师 王友红 化学制药及生物制药行业分析师 路 颖 商业贸易行业首席分析师 1.
朝陽科技大學財務金融系99學年度第一學期 99-1#1078 投資學 業界專家協同教學
黃聰明 臺灣師範大學數學系 MATLAB 基本功能介紹 黃聰明 臺灣師範大學數學系.
福嚴校友「佛學研習營」 活動內容 ●主辦單位:福嚴佛學院校友會 ●協辦單位:元亨寺 ●活動地點:元亨寺 ●活動時間:2008/4/14~15.
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
第二课 扬起自信的风帆 我能“行”.
淡水泉投资:安全稳健低回撤 长期业绩卓著 产品基本信息 基金经理简介 产品全称 银河证券-盘晟淡水泉成长1号 基金经理 赵军 受托人
C#程序设计案例教程 第3章 程 序 结 构.
情緒行為障礙之教學與輔導 新竹縣情緒障礙巡迴教師 陳弘念.
全面预算管理培训 北大纵横管理咨询公司 2003年10月.
MATLAB小结、 经典迭代法、CG.
TQC+ 物件導向程式認證-JAVA.
第 5 章 流程控制 (一): 條件分支.
認識拿破崙˙波拿巴 關於一位運氣很差的矮子的趣事兩三件 我不是矮子!! 本日主角 重點不是這個吧? 惡搞人員:橘蘋3顆和一隻小精靈.
MATLAB介紹.
第5章 程序结构.
C++Primer 3rd edition 中文版 Chap 5
增员有方 L区 特别事务助理总监陈蕴梅 ACS ALS.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
第三單元 Control Structure II
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
流程控制、陣列 台南市聖功女子高級中學 毛全良.
條件判斷指令 -if 指令 -switch 指令 迴圈指令 - for 迴圈 - while迴圈 - break、continue 指令
PHP 程式流程控制結構.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
程式流程控制 方煒 台大生機系.
研究地月距離的變化.
Introduction to the C Programming Language
CHAP13 演算法概論 高中資訊科技概論 松崗圖書公司.
電腦解題─流程圖簡介 臺北市立大同高中 蔡志敏老師.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
走出生命的低谷, 進入上帝的富足 新營靈糧堂 Jan., 20, 2013.
Introduction to MATLAB
范洪源 臺灣師範大學數學系 分支宣告與程式設計 范洪源 臺灣師範大學數學系.
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
MATLAB 程式設計入門篇 初探MATLAB
P ANNUAL REPORT DESIGN BY PENELOPE ENTER THE TIME
分支宣告與程式設計 黃聰明 國立臺灣師範大學數學系
MATLAB介绍 Matlab基本命令介绍 Matlab矩阵运算 Matlab控制流 Matlab图像处理工具箱 实习题讲解.
Peking University SAS Club
第2章 MATLAB程序设计 编者.
第二单元 第2课 Matlab程序控制结构 1.顺序结构 2.选择结构 3.循环结构.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
MATLAB 程式設計入門篇 初探MATLAB
張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室
第二章 Java基本语法 讲师:复凡.
第3章 JavaScript基本语句.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
第 四 章 迴歸分析應注意之事項.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
PHP程式設計 五、程式流程控制結構 建國科技大學 資訊管理學系 饒瑞佶.
MATLAB 程式設計 程式除錯 方煒 台大生機系.
11月份豆油价格区间震荡 宏源期货农产品团队 张磊 2011年10月29日.
Do While 迴圈 東海大學物理系‧資訊教育 施奇廷.
數學遊戲二 大象轉彎.
第6章 PHP基本語法介紹.
多重條件選擇敘述
MATLAB 結構化財務程式之撰寫 MATLAB財務程式實作應用研習 主題五 資管所 陳竑廷
C语言基本语句 判断循环.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
張智星 清大資工系 多媒體檢索實驗室 MATLAB 程式設計入門篇 程式流程控制 張智星 清大資工系.
MATLAB 程式設計入門篇 程式除錯 張智星 (Roger Jang)
主日學早會 Jan 17, 2016.
Presentation transcript:

張智星 (Roger Jang) jang@mirlab.org http://mirlab.org/jang 清大資工系 多媒體檢索實驗室 MATLAB 程式設計入門篇 程式流程控制 張智星 (Roger Jang) jang@mirlab.org http://mirlab.org/jang 清大資工系 多媒體檢索實驗室

16-1 迴圈指令 MATLAB 提供兩種迴圈指令 for 迴圈(For Loop) while 迴圈(While Loop)

Formats of For Loops Format 1: 運算式 end 在上述語法中,變數的值會被依次設定為向量的每一個元素值,來執行介於 for和 end 之間的運算式。 Format 2: for 變數 = 矩陣 運算式 end 在上述語法中,變數的值會被依次設定為矩陣的每一個直行,來執行介於 for 和 end 之間的運算式。

程式流程控制之範例一 下列 for 迴圈會產生一個長度為 6 的調和數列(Harmonic Sequence): 範例16-1 : forLoop01.m x = zeros(1,6); % 變數 x 是一個 1×6 大小的零矩陣 for i = 1:6 x(i) = 1/i; end x % 顯示 x x = 1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 在上例中,矩陣 x 最初是一個 1×6 大小的零矩陣,在 for 迴圈中,變數 i 的值依次是 1 到 6,因此矩陣 x 的第 i 個元素的值依次被設為 1/i。 我們接著可用分數形式來顯示此數列: >> format rat % 使用分數形式來顯式數值 >> disp(x) 1 1/2 1/3 1/4 1/5 1/6

程式流程控制之範例二 for 迴圈可以是多層或巢狀式(Nested)的,在下例中即產生一個 6×6 的Hilbert 矩陣 h,其中為於第 i 列、第 j 行的元素為 : 範例16-2 : forLoop02.m h = zeros(6); % 變數 x 是一個 6×6 大小的零矩陣 for i = 1:6 for j = 1:6 h(i,j) = 1/(i+j-1); end format rat % 使用分數形式來顯式所有數值 h % 顯示 h h = 1 1/2 1/3 1/4 1/5 1/6 1/2 1/3 1/4 1/5 1/6 1/7 1/3 1/4 1/5 1/6 1/7 1/8 1/4 1/5 1/6 1/7 1/8 1/9 1/5 1/6 1/7 1/8 1/9 1/10 1/6 1/7 1/8 1/9 1/10 1/11

程式流程控制之範例三 在下例中,for 迴圈列出先前產生的 Hilbert 矩陣的每一直行的平方和: 範例16-3 : forLoop01.m format short % 回到預設形式來顯式所有數值 for i = h disp(norm(i)^2); % 印出每一行的平方和 end 1.4914 0.5118 0.2774 0.1787 0.1262 0.0944 在上例中,由於 h 是一個矩陣,因此每一次 i 的值就是矩陣 h 的一直行的內容。

程式流程控制之範例四 若要跳出 for 迴圈,可用 break 指令。例如,若要找出最小的 n 值,滿足 n! > 1e100,可輸入如下: 範例16-4 : break01.m for i = 1:1000 if prod(1:i) > 1e100 fprintf('%g! = %e > 1e100\n', i, prod(1:i)); break; % 跳出 for 迴圈 end 70! = 1.197857e+100 > 1e100

程式流程控制之範例五 在一個迴圈內若要直接跳至到此迴圈下一回合的執行,可使用 continue 指令。 範例16-5 : continue01.m x = [1 -2 3 -4 5]; posTotal = 0; for i = 1:length(x) if x(i)<0, continue; end % 若 x(i) 小於零,跳到此迴圈的下一回合 posTotal=posTotal+x(i); end posTotal % 顯示 posTotal 的值 posTotal = 9 上述範例中,我們計算向量 x 的正元素的總和,因此只要遇到 x(i) 是負數,即可使用 continue 指令來直接跳到此迴圈的下一個回合來繼續執行。Continue 指令從MATLAB 6.x 才開始支援,若是使用 MATLAB 5.x,可用 if–else 來達到相同的功能。

Format of While Loops While loop 的格式如下: 在上述語法中,只要條件式為真,運算式就會一再被執行 運算式; end 在上述語法中,只要條件式為真,運算式就會一再被執行

程式流程控制之範例六 先前產生調和數列的例子,亦可用 while 迴圈改寫如下: 範例16-6 : while01.m x = zeros(1,6); i = 1; while i<=6 x(i) = 1/i; i = i+1; end x % 顯示 x x = 1.0000 0.5000 0.3333 0.2500 0.2000 0.1667

程式流程控制之範例七 若要用 while 指令找出最小的 n 值,使得 n! > 1e100 ,可輸入如下: 範例16-7 : while02.m n = 1; while prod(1:n) < 1e100 n = n+1 end fprintf('%g! = %e > 1e100\n', n, prod(1:n)); 70! = 1.197857e+100 > 1e100 與前述的 for 迴圈相同,在任何時刻若要跳出 while 迴圈,亦可使用 break 指令;若要跳到下一回合的 while 迴圈,也可以使用 continue 指令。 無論是 for 或 while 迴圈,均會降低 MATLAB 的執行速度,因此盡量使用向量化的運算(Vectorized Operations)而盡量少用迴圈。 break 指令若用在多重迴圈中,每次只跳出包含break指令的最內部迴圈。

16-2 條件指令 MATLAB 支援二種條件指令(Branching Command,或中譯成「分支指令」) if-else 條件指令 switch-case-otherwise 條件指令( MATLAB 在第五版之後開始支援)

if-else 條件指令 最常用的條件指令是 if-else,其使用語法為 運算式一; else 運算式二; end 在上述語法中,當條件式成立時,MATLAB 將執行運算式一,否則,就執行運算式二。若不需使用運算式二,則可直接省略 else 和運算式二。

程式流程控制之範例八 在數值運算的過程中,若變數值為 NaN(即 Not A Number )時,我們要立刻印出警告訊息,可輸入如下例: 範例16-8 : if01.m x = 0/0; if isnan(x) disp('Warning: NaN detected!'); end Warning: Divide by zero. … Warning: NaN detected! 在上例中,第一個警告訊息是 MATLAB 自動產生的,第二個警告訊息則是我們的程式碼產生的,其中 isnan(x) 可用於判斷 x 是否為 NaN,若是,則傳回 1(真),否則即傳回 0(偽)。

程式流程控制之範例九 在下例中,我們可根據向量 y 的元素值為奇數或偶數,來顯示不同的訊息: 範例16-9 : if02.m for i = 1:length(y) if rem(y(i), 2)==0 fprintf('y(%g) = %g is even.\n', i, y(i)); else fprintf('y(%g) = %g is odd.\n', i, y(i)); end y(1) = 0 is even. y(2) = 3 is odd. y(3) = 4 is even. y(4) = 1 is odd. y(5) = 6 is even. 上述的 if-else 為雙向條件,亦即程式只會執行「運算式一」或「運算式 二」,不會有第三種可能。

程式流程控制之範例十 MATLAB 亦可執行多向條件,若要進行更多向的條件,只需一再重覆 elseif 即可。例如,欲判斷 y 向量之元素是屬於 3n、3n+1、 或 3n+2,可輸入如下: 範例16-10 : if03.m y = [3 4 5 9 2]; for i = 1:length(y) if rem(y(i),3)==0 fprintf('y(%g)=%g is 3n.\n', i, y(i)); elseif rem(y(i), 3)==1 fprintf('y(%g)=%g is 3n+1.\n', i , y(i)); else fprintf('y(%g)=%g is 3n+2.\n', i , y(i)); end y(1)=3 is 3n. y(2)=4 is 3n+1. y(3)=5 is 3n+2. y(4)=9 is 3n. y(5)=2 is 3n+2.

switch-case-otherwise 條件指令 MATLAB 在第五版開始支援 switch-case-otherwise 的多向條件指令,其使用語法如下: switch expression case value(1) statement(1) case value(2) statement(2) … case value(n-1) statement(n-1) otherwise statement(n) end 在上述語法中,expression 為一數值或字串,當其值和 value(k) 相等時,MATLAB 即執行 statement(k) 並跳出 switch 指令。若 expression 不等於 value(k),k=1, 2, …, n-1,則 MATLAB 會執行 statement(n) 並跳出 switch 指令。

程式流程控制之範例十一 欲根據月份來判斷其季別,可輸入如下: 範例16-11 : switch01.m for month = 1:12 switch month case {3,4,5} season = 'Spring'; case {6,7,8} season = 'Summer'; case {9,10,11} season = 'Autumn'; case {12,1,2} season = 'Winter'; end fprintf('Month %d ===> %s.\n', month, season); Month 1 ===> Winter. . . . . Month 12 ===> Winter.

程式流程控制之範例十二 如果 expression 是字串,那麼若要在 case 之後比對多個字串,就必需使用字串的異值陣列(Cell Arrey of Strings): 範例16-12 : switch02.m month = {'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'}; for i = 1:length(month) switch month{i} case {'Mar','Apr','May'} season = 'Spring'; case {'Jun','Jul','Aug'} season = 'Summer'; case {'Sep','Oct','Nov'} season = 'Autumn'; case {'Dec','Jan','Feb'} season = 'Winter'; end fprintf('%s is %s.\n', month{i}, season);

程式流程控制之範例十二 上述範例output如下: Jan is Winter. Feb is Winter. Mar is Spring. Apr is Spring. May is Spring. Jun is Summer. Jul is Summer. Aug is Summer. Sep is Autumn. MATLAB 的 switch 指令和 C 語言的 switch 指令略有差別:在 C 語言的 switch 敘述內,每個 case 敘述需加上 break 以跳出該 switch 敘述,而在 MATLAB 則不必多此一舉。 一般而言,switch–case–otherwise 的執行效率優於 if–else 。