• 沒有找到結果。

第八章 撰寫底稿與函數 習題參考答案 8.1 撰寫底稿

N/A
N/A
Protected

Academic year: 2022

Share "第八章 撰寫底稿與函數 習題參考答案 8.1 撰寫底稿"

Copied!
12
0
0

加載中.... (立即查看全文)

全文

(1)

第八章 撰寫底稿與函數 習題參考答案

8.1 撰寫底稿

1. 請參考 7.1.1 節,利用 M 檔案的底稿繪出rlog( )t 的極座標圖,繪圖範圍請用 0.01 t 6,繪圖點數100 點。M 檔案名稱請取名為 ex8_1.m。

Ans:

% ex8_1.m

t=linspace(0.01,6*pi,100);

r=log(t);

polar(t,r)

2. 請參考 7.2 節,利用 M 檔案的底稿繪出 / x2 y2的梯度向量場,資料點數為32 32 , 繪圖範圍 2 x 2

zx e

   , 2   。M 檔案名稱請取名為 ex8_2.m。 y 2 Ans:

% ex8_2.m

x=linspace(-2,2,32);

y=linspace(-2,2,32);

[xx,yy]=meshgrid(x,y);

zz=xx./exp(xx.^2+yy.^2);

[u,v]=gradient(zz);

quiver(xx,yy,u,v);

(2)

3. 請參考 7.2 節,利用 M 檔案的底稿繪出 / x2 y2的三維法向量,資料點數為48 48 , 繪圖範圍 2 x 2

zx e

   , 2   。M 檔案名稱請取名為 ex8_3.m,法向量的長度為原先y 2 預設長度的0.3 倍。

Ans:

% ex8_3.m

x=linspace(-2,2,48);

y=linspace(-2,2,48);

[xx,yy]=meshgrid(x,y);

zz=xx./exp(xx.^2+yy.^2);

surf(xx,yy,zz);

axis tight; hold on

[u,v,w]=surfnorm(xx,yy,zz);

quiver3(xx,yy,zz,u,v,w,0.3) hold off

(3)

8.2 設計 Matlab 的函數

4. 於 Matlab 的指令視窗裡鍵入 type primes.m,此時會顯示出 primes 函數的 M 檔案。請 仿照8.2 節的介紹,把這個 M 檔案標上函數定義列、H1 列、函數說明文字區與函數的 主體這四個部分。

Ans:

>> type primes.m function p = primes(n)

%PRIMES Generate list of prime numbers.

% PRIMES(N) is a row vector of the prime numbers less than or

% equal to N. A prime number is one that has no factors other

% than 1 and itself.

%

% Class support for input N:

% float: double, single

%

% See also FACTOR, ISPRIME.

% Copyright 1984-2004 The MathWorks, Inc.

% $Revision: 1.16.4.2 $ $Date: 2004/07/05 17:02:09 $ if length(n)~=1

error('MATLAB:primes:InputNotScalar', 'N must be a scalar');

end

if n < 2, p = zeros(1,0,class(n)); return, end p = 1:2:n;

q = length(p);

p(1) = 2;

for k = 3:2:sqrt(n) if p((k+1)/2)

p(((k*k+1)/2):k:q) = 0;

end end

p = p(p>0);

函數定義列

H1 列

函數說明文字區

函數的主體

(4)

5. 於 8.2 節中,函數 func8_2 並沒有寫上 H1 列與函數說明文字區。請將它們補上,並以 lookfor 指令和 help 指令測試之。請將函數名稱設定成 ex8_5。

Ans:

function [mn,mx]=ex8_5(v)

% ex8_5 return Min and Max elements of vectors

% MN Smallest component.

% MX Largest component.

% For vectors, mn is the smallest element in V.

% For vectors, mx is the largest element in V.

% copyright by Dr. Wien Hong, 2005 mn=min(v);

mx=max(v);

以lookfor 指令和 help 指令測試:

>> lookfor ex8_5

ex8_5 return Min and Max elements of vectors

>> help ex8_5

ex8_5 return Min and Max elements of vectors MN Smallest component.

MX Largest component.

For vectors, mn is the smallest element in V.

For vectors, mx is the largest element in V.

6. 試撰寫一函數 ex8_6,可接收一整數 n,其輸出為下面的結果:

1 12 13 1 22 2 2n Ans:

% ex8_6.m

function total=ex8_6(n) x=[1:n];

y=1./(2.^x);

total=sum(y);

% 執行與輸出

>> ex8_6(10) ans =

0.9990

(5)

8.3 追蹤函數的執行與偵錯

7. 試撰寫一函數 ex8_7,它可接收大於 2 的整數,傳回值則為小於等於這個整數的最大質 數。例如,輸入ex8_7(14),則回應 13,因為 13 是小於等於 14 的最大質數。

Ans:

% ex8_7.m

function pmax=ex8_7(n) if(n>2)

pmax=max(primes(n));

end

% 執行與輸出

>> ex8_7(14) ans =

13

8. 試利用 fprintf 函數印出下列字串:

(a) Today is a sunny day.

(b) It's mine.

(c) 35% students are failed.

Ans:

% ex8_8.m

function ex8_8()

fprintf('Today is a sunny day.\n') fprintf('It''s mine.\n')

fprintf('35%% students are failed.\n');

% 執行與輸出

>> ex8_8

Today is a sunny day.

It's mine.

35% students are failed.

(6)

9. 試修改 func8_4,使得在執行完 func8_4,於 Matlab 的指令視窗內可以顯示出向量 r 的 最大值與最小值。請將函數名稱設定成ex8_9。

Ans:

% ex8_9.m

function [mx,mn]=ex8_9(n) t=linspace(0.01,10*pi,n);

r=log(t);

comet(r.*cos(t),r.*sin(t));

mx=max(r);

mn=min(r);

% 下圖是程式正在執行時的情形

>> [x,y]=ex8_9(10000) x =

3.4473 y =

-4.6052

(7)

8.4 函數的進階認識

10. 試撰寫一個指令類型的函數 ex8_10,它沒有傳回值,但可接收兩個引數,並利用 fprintf 函數印出這兩個引數之和(注意,指令類型的函數會把其引數看成是字串,因此您先必 須利用eval 函數把字串轉換成函數之後,才可以進行數學運算)。

Ans:

% ex8_10.m

function ex8_10(x,y) total=eval(x)+eval(y);

fprintf('%s+%s=%5.2f\n',x,y,total)

% 執行與輸出

>> ex8_10 5.2 8.3 5.2+8.3=13.50

11. 試撰寫一函數 ex8_11,如果它只接收兩個向量x 與1 y ,則會繪出1 x1y1的函數圖。若 是接收4 個向量x y x 與1, 1, 2 y ,則繪出2 x1y1x2y2的函數圖形於同一張圖上。請 自行設定向量的內容。

Ans:

% ex8_11.m

function ex8_11(x1,y1,x2,y2) if nargin==2

plot(x1,y1) else

plot(x1,y1,x2,y2) end

(8)

% 執行與輸出

>> ex8_11([1 2 3 4],[3 2 2 1],[4 5 7 8],[0 2 3 2])

>> ex8_11([1 2 3 4],[2 4 3 0])

(9)

12. 試在同一個 M 檔案內撰寫一個主函數 ex8_12,與一個子函數 inv。主函數可接收一個 向量v,並可把向量 v 傳給子函數 inv,由子函數計算向量 v 內每一個數字的倒數(例 如,3 的倒數為1/ 3 ),然後傳回這個倒數所組成的向量 w,並由主函數接收,然後在 主函數內計算向量w 之元素的總和,並把它傳回工作區。

Ans:

% ex8_12.m

function total=ex8_12(v) w=inv(v);

total=sum(w);

function w=inv(n) w=1./n;

% 執行與輸出

>> x=ex8_12([1 2 3 4]) x =

2.0833

13. 試改寫習題 12,使得子函數 inv 是存放在主函數的私有化目錄內。主函數名稱為 ex8_13。

Ans:

% ex8_13.m

function total=ex8_13(v) w=inv(v);

total=sum(w);

% inv.m

function w=inv(n) w=1./n;

%執行與輸出

>> x=ex8_13([1 2 3 4]) x =

2.0833

(10)

14. 試將習題 12 編譯成 pcode,並執行之,以驗證 pcode 的執行結果是正確的。

Ans:

>> pcode ex8_12.m

>> x=ex8_12([1 2 3 4]) x =

2.0833 8.5 路徑的設定

15. 假設習題 12 的主函數 ex8_12 是放置在 c:\my_works 這個資料夾內,試把這個資料夾改 為「目前工作目錄」,使得在Matlab 的視窗裡下指令,就可以直接執行它。

Ans: 請自行練習。

16. 假設習題 12 的主函數 ex8_12 是放置在 c:\my_works 這個資料夾內,試將它加入 Matlab 的搜尋路徑中,使得可以直接在Matlab 的視窗裡下指令,就可以直接執行它。

Ans: 請自行練習。

8.6 匿名函數

17. 試定義匿名函數f x( ) sin x.3,並利用fplot 將函數圖形繪出,繪圖範圍為 0 ~ 2 。 Ans:

>> f=@(x) sin(sqrt(x.^3)) f =

@(x) sin(sqrt(x.^3))

>> fplot(f,[0,2*pi])

(11)

18. 試定義匿名函數g x y( , )y2x2,並利用 ezsurf 將函數圖形繪出,其繪圖範圍為 3 x 3

   , 3   。 y 3 Ans:

>> g=@(x,y) y.^2-x.^2 g =

@(x,y) y.^2-x.^2

>> ezsurf(g,[-3 3 -3 3])

(12)

參考文獻

相關文件

對數函數之微分及其 對數函數之微分及其.. 相關之積分

(題目在數學習作第85頁,把答案寫在 習作上就可以了)..

◎要儲存正在編輯的 Flash 動畫檔案, 可執行『檔案/儲存檔案』命令;若是還未 儲存過的 Flash 動畫, 在執行命令後會顯示另存新檔交談窗,

1.個別或小組 合作寫出森鐵 與花東評論比 較文章 2.自主撰寫森 鐵仿寫文章..

[r]

M 部分序列字串指原字串中刪掉一個以上字元且不改變原順序的部份字串。請撰寫 程式從資料檔 d.txt 讀入兩個字串(每一字串皆不超過 50 字元),判斷第一個字串

(20%)

[r]