matlab 7matlab 7...
TRANSCRIPT
-
MATLAB 7 在工程上的應用MATLAB 7 在工程上的應用
第 章第 1 章MATLAB 概觀
2010/10/14 1
-
圖1.1–1 預設的MATLAB桌面。
2010/10/14 2更多相關資料請查詢課本第 1-6~1-7頁
-
輸入指令與算式
MATLAB會記住你前一個輸入。 MATLAB會記住你前一個輸入。 可以直接使用「上」來捲回選取曾經輸入的指令。
按下此鍵一次可以看到上一個輸入 依此類推 按下此鍵一次可以看到上一個輸入,依此類推。
使用「下」可以往前選取指令。當找到一行想要使用的指
令 可以使用「左 及「右 以及B k 還有D l令,可以使用「左」及「右」,以及Backspace還有Delete鍵來修改。
按下 鍵可以執行此指令 按下Enter鍵可以執行此指令。
2010/10/14 3
-
範例
>> 8/10ans =
0.8000>> 5*ansans =
4>> r=8/10>> r 8/10r =
0.8000>> rr =
0 80000.8000>> s=20*rs =
2010/10/14 4
s 16 更多相關資料請查詢課本第 1-7~1-9頁
-
表1.1–1 純量算術運算
符號 運算 MATLAB形式
^ 冪次運算: ab a^b
* 乘法: ab a*b乘法: ab a b
/ 右除法: a/b a/b
\ 左除法: b/a a\b
+ 加法: a + b a+b加法 a b a b
- 減法: a - b a-b
2010/10/14 5
-
表1.1–2 優先權
優先權 運算
第一 括號 從最內部開始運算第一 括號,從最內部開始運算。
第二 冪次運算,由左至右。
第三 乘法與除法,兩者優先權相同,由左至右。
第四 加法與減法,兩者優先權相同,由左至右。
2010/10/14 6
-
優先權的範例
>> 8 + 3*5ans =
23>> 8 + (3*5)ans =
23>>(8 + 3)*5>>(8 + 3) 5ans =
55>>4^2-12- 8/4*2ans =
00>>4^2-12- 8/(4*2)ans =
2010/10/14 7
ans 3 (接下頁)
-
優先權的範例(承上頁)
>> 3*4^2 + 5ans =
53>>(3*4)^2 + 5ans =
149>>27^(1/3) + 32^(0 2)>>27 (1/3) + 32 (0.2)ans =
5>>27^(1/3) + 32^0.2ans =
55>>27^1/3 + 32^0.2ans =
2010/10/14 8
ans 11
-
指派運算子 =指派運算子 =
鍵入鍵入 會將會將 這個值指派給變數這個值指派給變數 鍵入鍵入 x = 3 x = 3 會將會將 3 3 這個值指派給變數這個值指派給變數 xx。。 我們接下來輸入我們接下來輸入 x = x + 2x = x + 2。。這會將這會將 3 + 2 = 5 3 + 2 = 5 這個值指派給這個值指派給
但是在代數中這個算式的意思卻是但是在代數中這個算式的意思卻是0 20 2xx。。但是在代數中這個算式的意思卻是但是在代數中這個算式的意思卻是0 = 20 = 2。。 在代數中我們可以寫在代數中我們可以寫 x + 2 = 20x + 2 = 20,,但是在但是在MATLABMATLAB中我們中我們
不可以這樣寫。不可以這樣寫。不可以這樣寫。不可以這樣寫。
在在MATLABMATLAB中中 = = 這個運算子的左邊必須是一個單一變數。這個運算子的左邊必須是一個單一變數。而在此運算子右側必須是而在此運算子右側必須是可計算的可計算的((comp table)comp table)的值的值 而在此運算子右側必須是而在此運算子右側必須是可計算的可計算的((computable)computable)的值。的值。
2010/10/14 9
更多相關資料請查詢課本第1-10~1-11頁
-
表1.1–3 用來管理工作對話的指令
指令 敘述
clc 清除命令視窗。clc 清除命令視窗
clear 由記憶體中移除所有的變數。
clear v1 v2 由記憶體中移除所變數v1 以及 v2。
exist(‘var’) 決定是否有檔案或者變數的名稱為`var’。
quit 終止 MATLAB。quit 終止 MATLAB
who 出目前記憶體中所有的變數。
2010/10/14 10
(接下頁)
-
表1.1–3 用來管理工作對話的指令(承上頁)
whos 列出目前的變數以及大小,若是有虛部
指令 敘述
whos 列出目前的變數以及大小,若是有虛部則指明出來。
: 冒號;產生具有固定間隔元素的陣列。
逗號;分開陣列中的元素。, 逗號;分開陣列中的元素
; 分號;制止螢幕的顯示;同時也用於標示陣列中新的一行示陣列中新的一行。
... 省略符號;接續成同一行。
2010/10/14 11
更多相關資料請查詢課本第 1-12~1-15頁
-
表1.1–4 特殊的變數與常數
指令 敘述
ans 儲存最近一次答案的暫存變數。ans 儲存最近一次答案的暫存變數
eps 指定浮點數精確度的正確性。
i, j 虛數單位 。1
Inf 無限大 。
NaN 指出這是未定義的數值結果。NaN 指出這是未定義的數值結果
pi 圓周率。
2010/10/14 12
-
複數運算複數運算
• 數字 c1 = 1 – 2i 的輸入方式如下:數字 c1 1 2i 的輸入方式如下c1 = 1-2i
• 我們注意到 i 或者 j 與數字之間並沒有星號,雖然在變數中是需要的,例如c2 = 5 i*c1。c2 = 5 - i*c1。
• 注意!算式注意!算式y = 7/2*i以及x = 7/2i會得到不同的結果: y = (7/2)i = 3.5i以及 x = 7/(2i) = 3 5i
2010/10/14 13
以及 x = 7/(2i) = –3.5i
-
表1.1–5 數字顯示格式
指令 敘述與範例
format short 四位數(預設值): 13 6745。format short 四位數(預設值): 13.6745
format long 16位數:17.27484029463547。
format short e 五位數(四位小數)加上指數:6.3792e+03。
format long e 16位數(15位小數)加上指數:6 379243784781294e-04。6.379243784781294e-04
2010/10/14 14
-
陣列陣列
• 數字 0 0 1 0 2 10 可以藉由下列方式指派到變數 u 輸• 數字 0, 0.1, 0.2, …, 10 可以藉由下列方式指派到變數 u ,輸入: u = [0:0.1:10]
• 要計算 w = 5 sin u ,其中 u = 0, 0.1, 0.2, …, 10,則對話為:
>>u = [0:0.1:10];[ ];
>>w = 5*sin(u);
單一列的指令 會計算 這個公式 次• 單一列的指令 w = 5*sin(u)會計算w = 5 sin u 這個公式101 次。
2010/10/14 15
-
陣列索引陣列索引
>>u(7)ans =
0.6000>>w(7)>>w(7)ans =
2.8232
• 使用函數 length 求出陣列中有多少個值。
>>m = length(w)m =m 101
2010/10/14 16
更多相關資料請查詢課本第 1-18~1-19頁
-
多項式的根多項式的根
• 要求出 x3 – 7x2 + 40x – 34 = 0 這個多項式的根,則對要求出 x 7x 0x 3 0 這個多項式的根 則對話為
>>a = [1,-7,40,-34];>>roots(a)>>roots(a)ans =
3 0000 + 5 000i3.0000 + 5.000i3.0000 - 5.000i1 00001.0000
根為 x = 1 以及 x = 3 ± 5i 。
2010/10/14 17
根為 x = 1 以及 x = 3 ± 5i 。
-
表1.3–1 一些常用的函數
函數 MATLAB語法函數 MATLAB語法
ex exp(x)
√x sqrt(x)
ln x log(x)ln x log(x)
log10 x log10(x)
cos x cos(x)
sin x sin(x)( )
tan x tan(x)1 ( )cos-1 x acos(x)
sin-1 x asin(x)
2010/10/14 18tan-1 x atan(x)
-
當你輸入 problem1,
1 MATLAB會先檢查是否有變數名稱為problem1,如果1. MATLAB會先檢查是否有變數名稱為problem1,如果有則顯示其對應的值。
2. 如果沒有,MATLAB檢查problem1是否為一個指令,如果是指令則執行此指令。
3. 如果不是指令,MATLAB會檢查現行目錄是否有檔案problem1 m存在,如果有找到則執行此檔案。problem1.m存在,如果有找到則執行此檔案。
4. 若找不到,MATLAB會依序搜尋其搜尋路徑中的目錄來找尋problem1.m,當找到的時候執行此檔案。
2010/10/14 19更多相關資料請查詢課本第 1-22~1-23頁
-
表1.3–2 系統、目錄、以及檔案指令
指令 敘述
addpath dirname 將目錄dirname加入搜尋路徑。ddp d e 將目錄d e加入搜尋路徑
cd dirname 將現行目錄轉換到 dirname。
列出現行目錄內的所有檔案dir 列出現行目錄內的所有檔案。
dir dirname 顯示在dirname目錄底下的所有檔案。
path 顯示MATLAB搜尋路徑。
tht l 啟動設定路徑工具pathtool 啟動設定路徑工具。
2010/10/14 20
(接下頁)
-
表1.3–2 系統、目錄、以及檔案指令(承上頁)
指令 敘述
pwd 顯示現行目錄。
h di 將目錄di 由搜尋路徑中移除rmpath dirname 將目錄dirname由搜尋路徑中移除。
what 將所在工作目錄中所有MATLAB可以使what 將所在工作目錄中所有MATLAB可以使用的檔案列出。使用dir可以將所有的檔案列出。
what dirname 將目錄dirname中所有MATLAB可以使用的檔案列出用的檔案列出。
2010/10/14 21
-
圖1.3–1 圖形視窗顯示圖形。
2010/10/14 22
-
表1.3–3 一些 MATLAB 繪圖指令
指令 敘述
[x,y] = ginput(n) 使得滑鼠從圖形取得 n 個點,並且傳回在向量 x 以及 y 當中x 以及 y的座標 其中向量的長度為的座標,其中向量的長度為 n。
id 在圖形中加入格線grid 在圖形中加入格線。
gtext(’text’) 使用滑鼠加入文字於圖形中。gtext( text ) 使用滑鼠加入文字於圖形中。
2010/10/14 23
(接下頁)
-
表1.3–3 一些 MATLAB繪圖指令(承上頁)
指令 敘述
plot(x,y) 產生陣列 y 對陣列 x 的直角座標圖。
title(’text’) 將文字做成標題置放於圖形的最上方。
xlabel(’text’) 將文字加入到水平軸(橫軸(abscissa))。
ylabel(’text’) 將文字加入到垂直軸(縱軸(ordinate))。
2010/10/14 24更多相關資料請查詢課本第 1-24~1-26頁
-
求解線性代數方程式求解線性代數方程式
6x + 12y + 4z = 707x – 2y + 3z = 52x + 8y – 9z = 64
>>A = [6,12,4;7,-2,3;2,8,-9];>>B = [70;5;64];>>Solution = A\BSolution =
335-2
所得到的解為 x = 3, y = 5,以及 z = –2。
2010/10/14 25更多相關資料請查詢課本第1-26~1-27頁
-
你可以以下列兩種方式進行MATLAB的運算:
1. 互動模式,也就是在命令視窗內直接輸入指令。
2. 直接運算儲存於腳本檔中的MATLAB程式。這種檔案中包含了MATLAB的指令,所以執行這個檔案和案中包含了MATLAB的指令,所以執行這個檔案和在MATLAB提示符號之後一次輸入一行指令的方式是完全等效的。在命令視窗的提示符號後直接輸入是完全等效的。在命令視窗的提示符號後直接輸入
檔案的名字就可以執行該檔案。
2010/10/14 26更多相關資料請查詢課本第1-28~1-31頁
-
圖1.4–1 MATLAB命令視窗以及編輯器/除錯器開啟的狀態。
2010/10/14 27
-
測試問題瞭解度測試問題瞭解度
T1.1-1 a) 6*10/13 + 18/(5*7) + 5*9^2.) ( ) Answer is 410.1297.
b) 6*35^(1/4) + 14^0.35. Answer is 17.1123.
2010/10/14 28More? See pages 11
-
Example 1 1Example 1 1 11Example 1.1Example 1.1--11
Volume of a Circular CylinderVolume of a Circular Cylinder h = 15; r01 = 8;h = 15; r01 = 8; V01 = pi*h*r01^2;V01 = pi*h*r01^2; V02 = V01*(1+ 0 2);V02 = V01*(1+ 0 2); V02 = V01 (1+ 0.2);V02 = V01 (1+ 0.2); r02 = (V02/(pi*h))^0.5; % r02 = sqrt(V02/(pi*h)); r02 = (V02/(pi*h))^0.5; % r02 = sqrt(V02/(pi*h));
2010/10/14 29More? See pages 12.
-
測試問題瞭解度測試問題瞭解度
T1.1-2 x = -5 +9i; y = 6 - 2i; x 5 +9i; y 6 2i; S = x +y P = x*y R = x/y R x/y
2010/10/14 30More? See pages 16
-
測試問題瞭解度測試問題瞭解度
T1.3-1 The session is: x = [cos(0):0.02:
T1.3-2 The session is: roots([1, 6, -11, 290])
log10(100)]; length(x)
ans = -10.000g ( )
ans = 51
2.0000 + 5.0000i 2 0000 - 5 0000i51
x(25) ans =
2.0000 5.0000i The roots are −10 and
2 ± 5i ans = 1.4800
2 ± 5i.
2010/10/14 31More? See pages 21.
-
測試問題瞭解度測試問題瞭解度
T1.3-3 The session is: t = [0:0 01:5]; t = [0:0.01:5]; s = 2*sin(3*t+2) + sqrt(5*t+1); plot(t,s),xlabel(‘Time (sec)’),ylabel(‘Speed
(ft/ )’)(ft/sec)’)
2010/10/14 32More? See pages 27.
-
T1 3 4 Th i i T1.3-4 The session is: x = [0:0.01:1.55]; y = 4*sqrt(6*x+1);
5* (0 3* ) 2* z = 5*exp(0.3*x)-2*x; plot(x,y,x,z,’--’),xlabel(‘Distance (m)’), p ( ,y, , , ), ( ( ) ),
ylabel(‘Force (N)’)
2010/10/14 33More? See pages 27.
-
測試問題瞭解度
T1.3-5 The session is:
測試問題瞭解度
To check the answer, A = [6, -4, 8; -5, -3, 7;
14, 9, -5];compute the right-hand sides:, , ];
b = [112; 75; -67]; x = A\b
A*x ans = x = A\b
x =
ans 112 75 -67
Th h l i 2.0000 -5.0000
Thus the correct solution is x = 2, y = −5, and z = 10
10.000010.
2010/10/14 34More? See pages 28.
-
測試問題瞭解度測試問題瞭解度
T1.4-1 The session is: The solution is x = 2T1.4 1 The session is: a = 112; b = 75; c = -
67;
The solution is x = 2, y = −5, and z = 10. To check the answers67;
A = [6, -4, 8; -5, -3, 7; 14, 9, -5];
check the answers, compute the right-hand, 9, 5];
bvector = [a; b; c]; x = A\bvector
hand sides:
x A\bvector x = 2 0000
A*x ans =
2.0000 -5.0000 112 75 -67
2010/10/14 35
10.0000More? See pages 35.
-
註解註解
註解符號可以加在一行之中任何一處。MATLAB會忽略此符號右邊的所有內容。例如,考慮下列
的對話。的對話
>>% This is a comment.
>>x = 2+3 % So is this.
x =x =
5
我們注意到在符號%之前的部分會被執行,計算出x。
2010/10/14 36
出x。
-
當使用腳本檔案的時候 下列一些事項必須牢記在心:當使用腳本檔案的時候,下列一些事項必須牢記在心:
1 腳本檔的名稱第一個字元一定是英文字母,其1. 腳本檔的名稱第一個字元一定是英文字母,其他部分可能是字母、數字,以及底線,最多31個字元。
2. 不可以將腳本檔的名稱命名成和檔案中的變數. 不可以將腳本檔的名稱命名成和檔案中的變數一樣。
3 絕對不可以將腳本檔的名稱取為和MATLAB中3. 絕對不可以將腳本檔的名稱取為和MATLAB中的指令或者函數一樣。你可以使用exist這個指令來確認函數或者檔案的名稱是否已經存在。
2010/10/14 37
-
腳本檔的除錯
這些錯誤都常可以歸類在下列範圍中。1. 語法的錯誤,像是忽略了一個括號或者是逗號,
或者拼錯指令名稱。MATLAB通常能夠偵測到這些明顯的錯誤並且顯示一個錯誤訊息來描述錯誤的內容以及其位置。
2. 若是因為不正確的數學程序所造成的錯誤,我們叫做 執行時的錯誤。這種錯誤在程式執行的時候並不一定會出現;通常是因為某一種特別的資料被輸入時才發生。一個簡單的例子就是除數為零。
2010/10/14 38
-
要找出這些錯誤,嘗試以下方法:要找出這些錯誤,嘗試以下方法:
1 簡化你的問題來測試你的程式,使得此簡單1. 簡化你的問題來測試你的程式,使得此簡單問題的解答可以用手驗算。
2. 將敘述最後的分號移除,使得計算當中的一些值顯示出來。些值顯示出來。
3 使用編輯器/除錯器中的除錯功能,我們將3. 使用編輯器/除錯器中的除錯功能,我們將會在第 4章中介紹。
2010/10/14 39更多相關資料請查詢課本第 1-32頁
-
撰寫程式的風格撰寫程式的風格
1. 註解區在第一行加入此程式的名稱以及關鍵字a. 在第一行加入此程式的名稱以及關鍵字。
b. 建立的日期、建立者的姓名於第二行。c. 每一個輸入以及輸出變數其變數名稱的定義。
並且將此段落分成兩個子段落,一個段落是輸入的資料,另一個段落則是輸出的資料。第三個則是可以自由選擇是否加入的段落,包含計算中所使用的變數的定義。
別忘了要加入所有輸入與輸出變數測量的單位!別忘了要加入所有輸入與輸出變數測量的單位!
d. 此程式中所呼叫到的每一個使用者定義之函數的名稱。
2010/10/14 40
的名稱。(接下頁)
-
撰寫程式的風格(承上頁)撰寫程式的風格(承上頁)
2. 輸入區 在這個區域中放入輸入資料以及/或者可供輸入資料的輸入函數,並且加入一些適當的可供輸入資料的輸入函數,並且加入一些適當的文件說明註解。
3 計算區 將計算放在這個區域 包含一些適當的3. 計算區 將計算放在這個區域。包含一些適當的文件說明註解。
輸出區 在這個區域中放入能夠輸出所需要格式4. 輸出區 在這個區域中放入能夠輸出所需要格式的函數。例如,此區域可能包含將結果顯示在螢幕上的函數幕上的函數。
2010/10/14 41
更多相關資料請查詢課本第 1-32~1-33頁
-
表1.4–2 輸入/輸出指令
指令 敘述指令 敘述disp(A) 顯示陣列A的內容,但不包含
名稱。
disp(’text’) 顯示用單引號包圍的文字字串。
顯示在單引號之間的文字 等待x = input(’text’) 顯示在單引號之間的文字,等待使用者自鍵盤輸入,並且將輸入儲存為x
的值。
x = input(’text’,’s’) 顯示在單引號之間的文字,等待p ( , )
使用者自鍵盤輸入,並且將輸入儲存為字串在x中。儲存為字串在x中
2010/10/14 42
-
測試問題瞭解度
T1 4-2
測試問題瞭解度
T1.4-2 r = input(‘Enter the sphere radius: ‘); A = 4*pi*r^2; disp(‘The surface area is:’) disp( The surface area is: ) disp(A)
2010/10/14 43More? See pages 37.
-
腳本檔範例腳本檔範例
問題:問題:
一個自由落下物體放開時起始速度為零,其目前一個自由落下物體放開時起始速度為零,其目前的速度為 v ,v是時間 t 的函數,寫成 v = gt。
畫出 v 對 t 的函數,對應的區間為 0 ≤ t ≤ tf ,其中tf 是由使用者所輸入的最後的時間。tf 是由使用者所輸入的最後的時間
2010/10/14 44(接下頁)
-
腳本檔範例(承上頁)
% Program falling_speed.m:% Plots speed of a falling object% Plots speed of a falling object.% Created on March 1, 2004 by W. Palm III%% Input Variable:% tf = final time (in seconds)%
註解%% Output Variables:% t = array of times at which speed is% t array of times at which speed is % computed (in seconds)% v = array of speeds (meters/second)y p ( )%% Parameter Value:g = 9 81; % Acceleration in SI units
2010/10/14 45
g = 9.81; % Acceleration in SI units% (接下頁)
-
腳本檔範例(承上頁)
% Input section:tf = input(’Enter final time in seconds:’);tf = input( Enter final time in seconds: );%% Calculation section:dt = tf/500;% Create an array of 501 time values.
[0 d f]t = [0:dt:tf];% Compute speed values.v = g*t;v g t;%% Output section:pPlot(t,v),xlabel(’t(s)’),ylabel(’v m/s)’)
2010/10/14 46更多相關資料請查詢課本第 1-36頁
-
尋求幫助尋求幫助
在每一章的內容中 旁邊頁面邊緣處會標出所介紹的關鍵詞 在每一章的內容中,旁邊頁面邊緣處會標出所介紹的關鍵詞。
每一章都包含列表,總結該章中所介紹的MATLAB指令。
在每一章的最後都會有對於本章所涵蓋指令的總結導覽。
附錄A包含MATLAB指令的列表,依照種類分類,並且標明正 附錄A包含MATLAB指令的列表,依照種類分類,並且標明正確的頁數做為參考。
有兩種索引。第一種索引列出MATLAB指令以及符號,而第二 有兩種索引。第一種索引列出MATLAB指令以及符號,而第二種索引列出主題。
2010/10/14 47
-
輔助領航員包含四個標籤鈕:輔助領航員包含四個標籤鈕:
內容列表標籤 Contents:內容列表標籤
Index:全域索引標籤
Search:具有尋找函數以及全文搜尋特色的標籤
D :可以啟動內建示範的書籤按鈕 Demos:可以啟動內建示範的書籤按鈕
2010/10/14 48
-
圖1.5–1 MATLAB輔助瀏覽器。
2010/10/14 49
-
輔助函數
help funcname:在命令視窗中顯示指定函數funcname的敘述述。
lookfor topic:在命令視窗中顯示所有的函數其敘述中具有特定關鍵字 i 的簡短敘述特定關鍵字topic的簡短敘述。
doc funcname:將指定函數funcname於輔助瀏覽器中開啟至參考頁面,提供描述、額外的註解,以及範例。
2010/10/14 50
更多相關資料請查詢課本第1-39~1-41頁
-
表1.6–1 關係運算子
關係運算子 意義
< 小於。
大於。
大或等於>= 大或等於。
== 等於。
~= 不等於。
2010/10/14 51
-
關係運算子範例
>> x = [6,3,9]; y = [14,2,9];>> z = (x < y)z =
1 0 0>>z = ( x > y)( y)z =
0 1 0( )>>z = (x ~= y)
z =1 1 01 1 0
>>z = ( x == y)z =
0 0 10 0 1>>z = (x > 8)z =
2010/10/14 52
z 0 0 1 更多相關資料請查詢課本第1-42~1-43頁
-
find 函數find 函數
find(x)可以顯示數值陣列x中非零元素的指標。例如,考慮( )下列對話
>>x = [-2 0 4];>>x [ 2, 0, 4];
>>y = find(x)
y =
1 3
結果為陣列y = [1, 3] 表示 x 中的第一個以及第三個元素非零。零
2010/10/14 53
-
注意由 x(xvalues = x(x>how_many = length(values)how many =how_many =
2>>indices = find(x
-
if 敘述if 敘述
一般的if 敘述格式如下一般的if 敘述格式如下
if 算式指令
elseif 算式e se 算式指令
elseelse指令
endend
else以及elseif敘述若是不需要的時候可以省略。
2010/10/14 55
-
假設我們要計算下列的 y
15√4x + 10 當 x ≥ 910x + 10 當 0 ≤ x < 9
當
y =10 當 x < 0
下面的敘述可以用來計算 y,假設變數x已經具有一個純量值。if x >= 9
y = 15*sqrt(4x) + 10elseif x >= 0
y = 10*x + 10lelse
y = 10endend
注意到elseif敘述並不需要一個個別的end敘述。
2010/10/14 56更多相關資料請查詢課本第 1-45~1-46頁
-
迴圈迴圈
在 MATLAB 中有兩種明確的迴圈:
• for迴圈:用於已經知道需要通過幾次的情況下
• while迴圈:用於當某一特定條件滿足時迴圈程序• while迴圈:用於當某一特定條件滿足時迴圈程序才終止的情況下,所以事先並不知道通過的次數
2010/10/14 57
-
一個簡單的f 迴圈範例如下一個簡單的for迴圈範例如下m = 0;
x(1) = 10;
for k = 2:3:11for k 2:3:11
m = m+1;
( 1) ( ) k^2x(m+1) = x(m) + k^2;
end
k 會依序變成2、5、8、11。變數m表示陣列x的指標。迴圈進行完之後程式會執行end敘述之後的其他敘述。當迴圈執行完之後陣列x具有值為x(1)=14,x(2)=39,x(3)=103,x(4)=224。
2010/10/14 58
( ) , ( ) , ( ) , ( )
-
一個簡單的while迴圈範例如下x = 5;k = 0;
hile < 25while x < 25
k = k + 1;
y(k) = 3*x;
x = 2*x-1;;
end
迴圈變數x一開始被指派為5,並且保持這個值直到敘述x =迴圈變數x一開始被指派為5,並且保持這個值直到敘述x = 2*x – 1第一次發生。然後值變成9。在每一次通過迴圈之前會檢查 看看是否其值小於25 如果是 則准許通過 如,會檢查x看看是否其值小於25。如果是,則准許通過。如
果不是,則跳過迴圈並且執行end敘述後面的其他敘述。
2010/10/14 59
-
以for迴圈做級數的運算以for迴圈做級數的運算撰寫一個腳本檔,計算級數5k2 – 2k前15項(也就是k 1 2 3 15)的和是k = 1, 2, 3, …, 15)的和。
total = 0;
for k = 1:15
total = 5*k^2 - 2*k + total;total 5 k 2 - 2 k + total;
end
disp(’The sum for 15 terms is:’)
disp(total)d sp( o )
答案為 5960。
2010/10/14 60
-
以while迴圈做數列的運算撰寫一個腳本檔用來計算需要幾項,數列5k2 – 2k的和才會大於10,000,其中 k = 1, 2, 3, …。並且這些項的和為多少?
total = 0;k = 0;while total < 1e+4
k = k + 1;total = 5*k^2 - 2*k + total;
enddisp(’The number of terms is:’)disp(k)disp(’The sum is:’)disp(total)
2010/10/14 61
經過18項的的數列和為10,203。
-
while迴圈的範例
決定需要多久才能在銀行帳戶中累積至少$10,000 ,如果一開始存入$500 ,並且在每年年終存入$500,假設銀行每年開始存入$500 並且在每年年終存入$500 假設銀行每年支付5%的利息。
amount = 500; k=0;while amount < 10000k = k+1;k = k+1;amount = amount*1.05 + 500;
endendamount k
最後的結果為amount = 1.0789e+004,或者$10,789,以及k = 14,也就是需要14年。
2010/10/14 62
也就是需要 年
更多相關資料請查詢課本第1-48頁
-
表1.7–1 工程問題求解的步驟
1. 了解問題的目的。
2. 收集已知的資訊。儘管其中有一些資訊在之後可能被證明為是不需要的。
3. 找出需要得到的資訊。
4 簡化問題到能夠獲得所需的資訊。陳述出你所使用的假設。4. 簡化問題到能夠獲得所需的資訊。陳述出你所使用的假設。
5. 畫一張草稿並且標記所有需要使用的變數。
6. 找出可以應用的基本定律。
7. 大略的思考你所提出的求解方法並且在開始進行細節之前先大略的思考你所提出的求解方法並且在開始進行細節之前先想想有沒有其他解決方式。
(接下頁)
2010/10/14 63
(接下頁)
-
表1.7–1 工程問題求解的步驟(承上頁)
8. 在求解程序中標記每一個步驟。
9. 如果以程式來求解此問題,使用這類問題比較簡單的版本並且以手驗算來驗證結果。檢查維度以及所使用的單位,還有列印出計算過程中間步驟的結果可以幫助發現錯誤。
10. 對於你的答案進行「客觀檢查」。結果合理嗎?估計所期待的結果的範圍並且將此範圍與你的結果比較。不要貿然地宣稱你的答案具有超過以下內容所證明的精確度地宣稱你的答案具有超過以下內容所證明的精確度:(a) 給定資訊的精確度。(b) 用來簡化的假設。(b) 用來簡化的假設。(c) 問題的需要。解釋這些數學。如果數學程序得到許多解答,不可在仔細解釋這些數學 如果數學程序得到許多解答,不可在仔細檢查這些解答前直接忽略某些解答。這些數學可能正在試圖傳達某些訊息,而你可能會錯失找出更多問題的機會。
2010/10/14 64更多相關資料請查詢課本第 1-50~1-52頁
-
表1.7–2 開發電腦解法的步驟
1. 簡潔地陳述問題。
2. 指定程式所需要使用的資料。叫做「輸入」。2. 指定程式所需要使用的資料 叫做 輸入」
3. 指定程式所要產生的資訊。叫做「輸出」。
4. 以手計算或者使用計算機來進行求解的步驟;或者使用一組比較簡單的資料。
5. 撰寫並且執行程式。
6. 以用手計算的結果檢查程式的輸出。6. 以用手計算的結果檢查程式的輸出
7. 用你的輸入資料來執行程式並且對輸出進行客觀檢查。
如果將來你會持續使用這個程式當作一般的工具 以一8. 如果將來你會持續使用這個程式當作一般的工具,以一些範圍內合理的資料值來測試這個程式;並對結果進行客觀檢查。
2010/10/14 65
客觀檢查。更多相關資料請查詢課本第1-53~1-56頁
-
下列的投影片包含課本中本章節的圖片以及習題問題。及習題問題
2010/10/14 66
-
Example 1 6Example 1 6 11Example 1.6Example 1.6--11
A=[55, 62, 60, 61, 63, 65, 62, 59, 58, 56];A=[55, 62, 60, 61, 63, 65, 62, 59, 58, 56]; B=[54, 59, 62, 64, 68, 68, 62, 59, 57, 53];B=[54, 59, 62, 64, 68, 68, 62, 59, 57, 53];[ ][ ] when = find(A>60);when = find(A>60); how many1 =length(when);how many1 =length(when); how_many1 =length(when);how_many1 =length(when); Above = A(A>=B);Above = A(A>=B); how_many2 =length(above);how_many2 =length(above);
2010/10/14 67More? See pages 45.
-
測試問題瞭解度測試問題瞭解度
T1 6 2 Th i i T1.6-1 a) z = 0 0 1 1 1
T1.6-2 The session is: x = [-4, -1, 0, 2, 10];y = )
b) z = 1 0 0 0 0 c) z = 1 0 1 1 1
[-5, -2, 2, 5, 9]; x(x>y)
c) z = 1 0 1 1 1 d) z = 0 1 0 0 0
( y) ans = 4 1 10
e) z = 0 0 0 0 1 -4 -1 10 find(x>y) ans = 1 2 5
2010/10/14 68More? See pages 46.
-
Example 1.6Example 1.6--2 plotting with a2 plotting with a forfor looploopExample 1.6Example 1.6 2 plotting with a 2 plotting with a forfor looploop dx = 35/300;dx = 35/300; x = [x = [--5: dx : 30];5: dx : 30]; for k = 1 : length(x)for k = 1 : length(x)
if (k) > 9if (k) > 9 if x(k) >= 9if x(k) >= 9 y(k) = 15*sqrt(4*x(k)) + 10;y(k) = 15*sqrt(4*x(k)) + 10; elseif x(k) >= 0elseif x(k) >= 0 elseif x(k) > 0elseif x(k) > 0 y = 10*x(k) + 10 elseelse y(k) = 10;y(k) = 10; endend
dd endend plot(x, y), xlabel(‘x’), ylabel(‘y’)plot(x, y), xlabel(‘x’), ylabel(‘y’)
2010/10/14 69More? See pages 49.
-
Example 1.6Example 1.6--3 series calculation with a 3 series calculation with a forfor looploop
W i i fil h f h fi 15 Write a script file to compute the sum of the first 15 terms in the series 5k2 – 2k, k = 1, 2, 3, …, 15.
l 0 total = 0; for k = 1:15 total = 5*k^2 - 2*k + total; end disp(’The sum for 15 terms is:’) disp(total)disp(total) The answer is 5960.
2010/10/14 70More? See pages 49.
11--5353
-
Example 1.6Example 1.6--4 series calculation with a 4 series calculation with a whilewhile looploop
W it i t fil t d t i h t i d Write a script file to determine how many terms are required for the sum of the series 5k2 – 2k, k = 1, 2, 3, … to exceed 10,000. What is the sum for this many terms?
total = 0;k = 0; while total < 1e+4 k = k + 1; k = k + 1; total = 5*k^2 - 2*k + total; end disp(’The number of terms is:’) disp(k) disp(’The sum is:’) disp(total) The sum is 10 203 after 18 terms
2010/10/14 71
The sum is 10,203 after 18 terms.More? See pages 50
11--5454
-
Example 1.6Example 1.6--5 Growth of a bank account5 Growth of a bank accountExample 1.6Example 1.6 5 Growth of a bank account5 Growth of a bank account Determine how long it will take to accumulate at least $10,000
in a bank acco nt if o deposit $500 initiall and $500 at thein a bank account if you deposit $500 initially and $500 at the end of each year, if the account pays 5 percent annual interest.
amount = 500; k=0; while amount < 10000
k k+1 k = k+1; amount = amount*1.05 + 500; end end amount k The final results are amount = 1.0789e+004, or $10,789, and k
= 14, or 14 years.
2010/10/14 72More? See pages 50
11--5555
-
測試問題瞭解度測試問題瞭解度
T1.6-3 The script file is: x = -5; if x < 0 y = sqrt(x^2+1) elseif x < 10
3* +1 y = 3*x+1 else y = 9*sin(5*x 50)+31 y = 9*sin(5*x-50)+31 end For x = −5 y = 5 0990 Changing the first line to x = 5 gives y For x = 5, y = 5.0990. Changing the first line to x = 5 gives y
= 16. Changing the first line to x = 15 gives y = 29.8088.
2010/10/14 73
g y
More? See pages 51.
-
T1 6 5 Th i t fil T1.6-4 The script file is
T1.6-5 The script file is
sum = 0;k = 0; sum = 0; for k = 1:20
sum = 0;k = 0; while sum
-
Example 1 7Example 1 7 11 活塞運動活塞運動Example 1.7Example 1.7--1 1 活塞運動活塞運動
L01 = 1;L02 = 0.5; % ftL01 = 1;L02 = 0.5; % ft a = 0 : pi/50 : pi; % 0
-
圖1.7–2 一個內燃機的活塞、連桿、曲柄、曲軸。
2010/10/14 76
-
圖1.7–3 活塞運動對曲柄角度的圖。
2010/10/14 77
-
Homework problemsHomework problems
2828、、2929、、3030、、3737、、3838
2010/10/14 78