黃聰明 國立臺灣師範大學數學系 min@ntnu.edu.tw http://math.ntnu.edu.tw/~min 其它的資料型態與繪圖型態 黃聰明 國立臺灣師範大學數學系 min@ntnu.edu.tw http://math.ntnu.edu.tw/~min T.-M.Huang
其它的資料型態與繪圖型態 T.-M.Huang
==、~=:比較兩個複數是否相等、不相等 6-1 複數資料 >> c = 4 + 1i * 3 >> c = 4 + 3i isreal(array) 用來檢查陣列是實數或複數陣列,如果是複數陣列, isreal(array)會傳回結果0 關係運算子 ==、~=:比較兩個複數是否相等、不相等 >、>=、<、<=:不能使用,因這些運算子 只比較複數的實數部份而已。 其它的資料型態與繪圖型態 T.-M.Huang
支援複數資料型態的函式 函式 描述 conj(c) 計算複數c的共軛複數 real(c) 傳回複數c的實數部分 imag(c) abs(c) 傳回複數c的絕對值大小 angle(c) 傳回複數c的角度 其它的資料型態與繪圖型態 T.-M.Huang
範例:一元二次方程式 輸出二次方程式的根 輸入係數 a、b、c 不同的實數根 重複的實數根 複 數 根 不區分 其它的資料型態與繪圖型態 T.-M.Huang
disp ('This program solves for the roots of a quadratic '); disp ('equation of the form A*X^2 + B*X + C = 0. '); a = input ('Enter the coefficient A: '); b = input ('Enter the coefficient B: '); c = input ('Enter the coefficient C: '); % Calculate discriminant discriminant = b^2 - 4 * a * c; % Solve for the roots x1 = ( -b + sqrt(discriminant) ) / ( 2 * a ); x2 = ( -b - sqrt(discriminant) ) / ( 2 * a ); % Display results disp ('The roots of this equation are:'); fprintf ('x1 = (%f) +i (%f)\n', real(x1), imag(x1)); fprintf ('x2 = (%f) +i (%f)\n', real(x2), imag(x2)); 其它的資料型態與繪圖型態 T.-M.Huang
Warning: Imaginary parts of complex X and/or Y arguments ignored 複數資料的圖形 t = 0:pi/20:4*pi; y = exp(-0.2*t).*(cos(t)+i*sin(t)); plot(t, y, 'LineWidth', 2); title('\bfPlot of complex function vs time'); xlabel('\bf\it t'); ylabel('\bf\it y(t)'); Warning: Imaginary parts of complex X and/or Y arguments ignored 其它的資料型態與繪圖型態 T.-M.Huang
複數資料的圖形 t = 0:pi/20:4*pi; y = exp(-0.2*t).*(cos(t)+i*sin(t)); plot(t, real(y), 'b-', 'LineWidth', 2); hold on plot(t, imag(y), 'r--', 'LineWidth', 2); title('\bfPlot of complex function vs time'); xlabel('\bf\it t'); ylabel('\bf\it y(t)'); legend('real', 'imaginary'); hold off 其它的資料型態與繪圖型態 T.-M.Huang
複數資料的圖形 t = 0:pi/20:4*pi; y = exp(-0.2*t).*(cos(t)+i*sin(t)); plot(y, 'b-', 'LineWidth', 2); title('\bfPlot of complex function'); xlabel('\bf\it Real part'); ylabel('\bf\it Imaginary part'); 其它的資料型態與繪圖型態 T.-M.Huang
複數資料的圖形 t = 0:pi/20:4*pi; y = exp(-0.2*t).*(cos(t)+i*sin(t)); polar(angle(y), abs(y)); title('\bfPlot of complex function'); 其它的資料型態與繪圖型態 T.-M.Huang
6-2 字串函式 數個字元(Characters)可以構 成一個字串(Strings) 一個字串是被視為一個列向量 (Row Vector)進行儲存 字串中的每一字元(含空白字元),是 以其 ASCII 碼的形式存放於此列向量 中的每一個元素(Element) 其它的資料型態與繪圖型態 T.-M.Huang
字元與字串的基本概念 Matlab 用「單引號」來界定字串變數,多個 字串變數可直接並排,以得到一個新字串變數 str1 = 'I like MATLAB,'; % 建立字串變數 str1 str2 = ' JavaScript, and Perl!'; % 建立字串變數 str2 str3 = [str1 str2] % 直接並排str1及str2,以建立str3 str3 = I like MATLAB, JavaScript, and Perl! 其它的資料型態與繪圖型態 T.-M.Huang
字元與字串的基本概念(cont) 欲輸入含有單引號的字串,可重覆單引號的使用。 若要計算字串變數的長度(即組成字元的個數),可用 length 指令。 >> sentence = 'I''ve got a date!'; >> length(sentence) % 計算字串變數 sentence 的長度 ans = 16 其它的資料型態與繪圖型態 T.-M.Huang
字元的儲存 無論是中文或英文,每一個字元都會佔用兩個位元組(2 Bytes), 故字串變數 sentence = 'I''ve got a date!' 總共由 16 個字 元構成,佔用的記憶體總計為三十二個位元組(32 bytes) whos 指令: 檢視字串變數 sentence 所佔用儲存空間(whos 變數) MATLAB 是以兩個位元組來儲存一個字元,所以也可以支援 Big5 的中文碼,而且 Big5 中文的 ASCII 內碼都會大於數字 128 由於 MATLAB 將字串以其相對應之 ASCII 內碼(即數字形式)儲 存成一列向量,故若對此字串直接進行數值運算,MATLAB 會先將 此字串轉成數值,再進行一般數值向量的運算 其它的資料型態與繪圖型態 T.-M.Huang T.-M.Huang
class 或 ischar 指令: 判斷某一個變數是否為字串 字串的判斷 class 或 ischar 指令: 判斷某一個變數是否為字串 >> chinese = '今日事,今日畢'; >> out1 = class(chinese) out1 = char >> chinese = '今日事,今日畢'; >> out1 = ischar(chinese) out1 = 1 >> chinese = '今日事,今日畢'; >> x = chinese+1; >> out2 = ischar(x) out2 = 其它的資料型態與繪圖型態 T.-M.Huang
字串轉換函式 double 指令: 檢視字串變數的儲存內容(即 ASCII 內碼) char 指令: 將 ASCII 內碼轉回字串形式 >> sentence = 'I''ve got a date!'; >> sentenceAscii = double(sentence) sentenceAscii = Columns 1 through 14 73 39 118 101 32 103 111 116 32 97 32 100 97 116 Columns 15 through 16 101 33 char 指令: 將 ASCII 內碼轉回字串形式 >> sentence2 = char(sentenceAscii) sentence2 = I've got a date! 其它的資料型態與繪圖型態 T.-M.Huang T.-M.Huang
一個變數來儲存多個字串 使用二維字元陣列(Two Dimensional Character Arrays);必須先確認每個字串(即每一橫列)的長度一樣,否則就必須在短字串結尾補上空白字元。 >> departments = ['ee '; 'cs '; 'econ'] % 注意空白字元的使用 departments = ee cs econ 用char 指令儲存多個字串 >> departments = char('ee', 'cs', 'econ') % 注意「()」及「,」的使用 departments = ee cs econ 其它的資料型態與繪圖型態 T.-M.Huang
一個變數來儲存多個字串(cont.) 從二維字元陣列抽取出字串時,切記要使用deblank 指令來移除尾部的空白字元 >> departments = char('ee', 'cs', 'econ'); >> dept1 = departments(1,:) dept1 = ee >> len1 = length(dept1) len1 = 4 >> dept2 = deblank(dept1) dept2 = ee >> len2 = length(dept2) len2 = 2 其它的資料型態與繪圖型態 T.-M.Huang
整 合 字 串 strcat可以水平連接兩個以上的字串。這個函式將清除字串後 面的空白字元,但保留字串間的空白字元。 >> result = strcat(‘String 1 ’, ‘String 2’) result = String 1String 2 (注意第一個字串後面之空白字元已清除) FileName1 = 'fz_cn_rate_d6_L'; for Fm = 0:5 FileName = strcat(FileName1, int2str(Fm)); eval(FileName); end 其它的資料型態與繪圖型態 T.-M.Huang
strvcat可以垂直連接兩個以上的字串,並自動延展字串長度,使其成為合法的二維陣列。 整 合 字 串(cont) strvcat可以垂直連接兩個以上的字串,並自動延展字串長度,使其成為合法的二維陣列。 >> length(result(1,:)) ans = 14 >> length(result(2,:)) >> result = strvcat(‘Long String 1 ’, ‘String 2’) result = Long String 1 String 2 其它的資料型態與繪圖型態 T.-M.Huang
比 較 字 串 strcmp 指令: 用於比較字串內容是否完全相同,不相同回傳0, 相同則回傳1 包含字串前面與字串尾端的空白字元 strcmpi 指令: 用於比較字串內容是否完全相同,但忽略大小 寫的差異 strncmp 指令:用於比較字串的前 n 個字元是否完全相同 strncmpi 指令: 用於比較字串的前 n 個字元是否完全相同,但 忽略大小寫的差異 其它的資料型態與繪圖型態 T.-M.Huang
比 較 字 串(cont.) >> str1 = 'hello'; >> str2 = 'Hello'; >> c = strcmpi(str1, str2) c = 1 >> c = strncmp(str1, str2, 3) >> c = strncmp(str1, str3, 5) >> c = strcmp(str1, str2) c = >> c = strcmp(str1, str3) 其它的資料型態與繪圖型態 T.-M.Huang
在字串裡分類字元 isletter 指令: 決定該字元是否為字母,不是回傳0,則是回傳1 >> mystring = 'Room 23a'; >> a = isletter(mystring) a = 1 1 1 1 0 0 0 1 isspace 指令: 決定該字元是否為空格(空白、移字或是換行) >> b = isspace(mystring) b = 0 0 0 0 1 0 0 0 其它的資料型態與繪圖型態 T.-M.Huang
在字串裡分類字元(cont.) Isstrprop(‘str’,’category’) Description alpha True for those elements of str that are alphanumeric(字母) alphanum True for those elements of str that are alphanumeric(字母或數字) cntrl True for those elements of str that are control characters digit True for those elements of str that are numeric digits lower True for those elements of str that are lowercase letters wspace True for those elements of str that are white-space characters(空白字元) upper True for those elements of str that are uppercase letters xdigit True for those elements of str that are valid hexadecimal digits >> A = isstrprop('abc123def', 'alpha') A = 1 1 1 0 0 0 1 1 1 >> A = isstrprop('abcd1234efgh', 'xdigit') A = 1 1 1 1 1 1 1 1 1 1 0 0 其它的資料型態與繪圖型態 T.-M.Huang
在字串內搜尋並取代字元 findstr 指令:尋找在某一個長字串中的子字串,並傳回其起 始位置 >> s = 'Find the starting indices of the shorter string.'; >> findstr(s, 'the') ans = 6 30 >> findstr('the', s) ans = 6 30 strmatch 指令:用來比對字元,可在二維字元陣列裡找出某 列文字的開始字元,並傳回其文字列編號 >> x = strmatch('max', strvcat('max', 'minimax', 'maximum')) x = 1 3 其它的資料型態與繪圖型態 T.-M.Huang
在字串內搜尋並取代字元(cont.) strrep 指令: 用於字串尋找並代換 >> s = ' This is a simple example.'; >> [token, remain] = strtok(s) token = This remain = is a simple example. >> s1 = 'This is a good example.'; >> str = strrep(s1, 'good', 'great') str = This is a great example. strtok 指令: 根據一給定的分界字元(Delimiting Characters), 將一字串拆解成數個字串,預設分界字元為空白字元 [token, remain] = strtok(string, delim) 其它的資料型態與繪圖型態 T.-M.Huang
在字串內搜尋並取代字元(cont.) 使用strtok 將一個句子拆解成幾個字 input_string = 'ee cs econ stat me'; remainder = input_string; parsed = ''; % 建立一空字元陣列 while (any(remainder)) [chopped, remainder] = strtok(remainder); parsed = strvcat(parsed, chopped); end parsed parsed = ee cs econ stat me 其它的資料型態與繪圖型態 T.-M.Huang
大小寫字母轉換 upper及lower可以將字串裡所有的字元, 完全轉換成字母大寫或字母小寫 >> lower('MathWorks') ans = mathworks >> upper('attention!') ans = ATTENTION! 其它的資料型態與繪圖型態 T.-M.Huang
移除字串裡的空白字元 deblank 指令用來移除尾部的空白字元。 strtrim 指令用來移除字串前或字串後的空白字元。 >> test_string_trim2 = strtrim(test_string) test_string_trim2 = This is a test. >> length(test_string_trim2) ans = 15 >> test_string = ' This is a test. '; >> length(test_string) ans = 21 >> test_string_trim1 = deblank(test_string) test_string_trim1 = This is a test. >> length(test_string_trim1) ans = 18 其它的資料型態與繪圖型態 T.-M.Huang
int2str 指令: 將整數型態的資料轉換成字串資料 數字轉換成字串 int2str 指令: 將整數型態的資料轉換成字串資料 >> int2str(eye(3)) ans = 1 0 0 0 1 0 0 0 1 >> n = 6; >> y = ['case number ' int2str(n)] y = case number 6 >> int2str(2+3) ans = 5 num2str 指令: 將實數轉為字串 A = 9.50034e+003 4.85934e+003 4.56422e+003 2.31115e+003 8.91210e+003 1.85018e+002 >> x = rand(3) * 9999; % Create a 2-by-3 matrix. >> x(3,:) = []; >> A = num2str(x, '%10.5e\n') % Convert to string array. 其它的資料型態與繪圖型態 T.-M.Huang
數字轉換成字串(cont.) mat2str 指令可將矩陣轉換為字串,此字串若再 經由 eval 指令的使用,可再變回原先的矩陣 >> B = mat2str(A) % 將矩陣A轉成字串B B = [1 2 1;3 5 6] >> A2 = eval(B) % 再將字串 B 轉回矩陣 A2 A2 = 1 2 1 3 5 6 >> isequal(A, A2) % 測試 A 和 A2 是否相等 ans = 1 其它的資料型態與繪圖型態 T.-M.Huang
字串轉換成數字 str2double 指令可將字元字串轉換為其所表示的雙倍精度值 sscanf 指令可將字元字串轉換為數值的格式 A = sscanf(s,'%f') A = 2.7183 3.1416 >> a = str2double('123 + 45i') a = 1.2300e+002 +4.5000e+001i sscanf 指令可將字元字串轉換為數值的格式 value = sscanf (string, format) 其它的資料型態與繪圖型態 T.-M.Huang
範例:字串比較函式 步驟 比較兩個字串,如果第一個字串在字典式順序裡小於第二個字串 ,則傳回值-1,如果兩個字串順序相等,則傳回0,如果第一個字 串在字典式順序裡大於第二個字串,則傳回值+1 如果兩字串長度不相等,此函式仍應正常運作,並忽略掉字串尾端的空白字元 步驟 驗證輸入字串 函式需有兩個輸入字元格式的引數 將字串延展成相等的長度 使用strvcat將兩個字串變成一個二維陣列 strings = strvcat( str1, str2 ); 使用關係運算子比對兩字串, 產生含0與1的陣列 從頭到尾比較兩字串的不同之 處,並找出第一個不同的地方 尋找陣列中第一個1,此對應 兩字串第一個差異 根據第一個不同處,傳回對 應的值 其它的資料型態與繪圖型態 T.-M.Huang
驗證輸入字串 將字串延展成 相等的長度 從頭到尾比較兩字串的 不同之處,並找出第一 個不同的地方 locates all nonzero function result = c_strcmp(str1,str2) % Check for a legal number of input arguments. narginchk(2,2); % Check to see if the arguments are strings if ~(ischar(str1) && ischar(str2)) error('Both str1 and str2 must both be strings!') else % Pad strings strings = char(str1,str2); % Compare strings diff = strings(1,:) ~= strings(2,:); if sum(diff) == 0 % Strings match, so return a zero! result = 0; % Find first difference between strings ival = find(diff); if strings(1,ival(1)) > strings(2,ival(1)) result = 1; result = -1; end 驗證輸入字串 將字串延展成 相等的長度 從頭到尾比較兩字串的 不同之處,並找出第一 個不同的地方 locates all nonzero elements of array diff 其它的資料型態與繪圖型態 T.-M.Huang
測試結果 >> result = c_strcmp('String 1', 'String 1') result = >> result = c_strcmp('String 1', 'String 1 ') result = >> result = c_strcmp('String 1', 'String 2') result = -1 >> result = c_strcmp('String 1', 'String 0') result = 1 >> result = c_strcmp('String 1', 'str') result = -1 其它的資料型態與繪圖型態 T.-M.Huang
6-4 其它的資料型態(整數) int8, int16, int32, int64 8、16 、32 、64位元的正負整數 uint8, uint16, uint32, uint64 8、16 、32 、64位元的正整數 在int8資料型態裡的整數範圍為-128到127(總共有256個整數) 在uint8資料型態裡的整數範圍為0到255(總共有256個整數) 在int16的整數範圍為-32768到32767(總共有65536個整數) 在uint16的整數範圍為0到65535(總共有65536個整數) 其它的資料型態與繪圖型態 T.-M.Huang
其它的資料型態(cont.) 150 ??? >> var = int8(3) var = 3 >> whos Name Size Bytes Class Attributes var 1x1 1 int8 >> int8(100)+int8(50) ans = 127 150 ??? 假設整數運算結果 比該資料型態的最 大值還要大,則產 生的結果便是該最 大值,而不是實際 計算得出的值。 >> b = 7.3; >> c = var * b c = 22 >> whos Name Size Bytes Class Attributes b 1x1 8 double c 1x1 1 int8 var 1x1 1 int8 計算中同時有整數值與雙倍精度值,將只產生整數型態的結果。 適用於影像資料處理。 其它的資料型態與繪圖型態 T.-M.Huang
6-5 其它的二維圖形 bar(x,y), barh(x,y) subplot(2,2,3) barh(Y,'stack') title 'Stack' subplot(2,2,4) bar(Y,1.5) title 'Width = 1.5' bar(x,y), barh(x,y) draws a bar for each element in y at locations specified in x, where x is a vector defining the x-axis intervals for the vertical bars Y = round(rand(5,3)*10); subplot(2,2,1) bar(Y,'group') title 'Group' subplot(2,2,2) bar(Y,'stack') title 'Stack' 其它的資料型態與繪圖型態 T.-M.Huang
其它的二維圖形(cont.) compass(x,y) 產生極座標圖,並畫出從座標原點到資料點(x,y)的箭頭。圖形 內的資料點位置,是用直角座標表示,而不是用極座標表示。 Z = eig(randn(20,20)); compass(Z) Z = 1.8023 + 3.7533i 1.8023 - 3.7533i -0.8068 + 3.8624i -0.8068 - 3.8624i -3.5723 + 2.1144i -3.5723 - 2.1144i 2.7566 -0.2786 + 2.6347i -0.2786 - 2.6347i 其它的資料型態與繪圖型態 T.-M.Huang
其它的二維圖形(cont.) pie(x), pie(x, explode) 產生圓形圖,計算每個x值相對於全部的比例,並依此比例畫出 的扇形區域,與其它區域隔開顯示。 x = [1 3 0.5 2.5 2]; explode = [0 1 0 0 0]; pie(x,explode) 其它的資料型態與繪圖型態 T.-M.Huang
其它的二維圖形(cont.) stairs(x,y) 產生階梯圖,每個階梯的中心落在資料點(x,y)上。 x = linspace(-2*pi,2*pi,40); stairs(x,sin(x)) 其它的資料型態與繪圖型態 T.-M.Huang
其它的二維圖形(cont.) stem(x,y) 產生長桿圖,每個資料點(x,y)上有個標記,並且由該點上垂直 畫一條‘桿子’連接到x軸上。 t = linspace(-2*pi,2*pi,10); h = stem(t,cos(t),'fill','--'); 其它的資料型態與繪圖型態 T.-M.Huang
其它的二維圖形(cont.) ezplot(fun) ezplot(fun,[min,max]) plots the expression fun(x) over the default domain -2 < x < 2 ezplot(fun,[min,max]) plots the expression fun(x) over the domain min < x < max >> ezplot('sin(x)/x',[-4*pi 4*pi]) >> title('Plot of sin(x) / x'); >> grid on; 其它的資料型態與繪圖型態 T.-M.Huang
其它的二維圖形(cont.) fplot(fun,limits) fplot(@(x)[tan(x),sin(x),cos(x)], 2*pi*[-1 1 -1 1]) plots fun between the limits specified by limits. limits is a vector specifying the x-axis limits ([xmin xmax]), or the x- and y-axes limits, ([xmin xmax ymin ymax]). 其它的資料型態與繪圖型態 T.-M.Huang
6-6 三維圖形 plot3(x,y,z) 產生三維曲線圖形 二維力學系統的阻尼振盪,x、y表示 在任何給定時間t之系統位置。 x = exp(-0.2*t) .* cos(2*t); y = exp(-0.2*t) .* sin(2*t); plot(x,y,'LineWidth',2); title('\bfTwo-Dimensional Line Plot'); xlabel('\bfx'); ylabel('\bfy'); axis square; grid on; 無法清楚地顯示時間對系統行為的重要性 其它的資料型態與繪圖型態 T.-M.Huang
title('\bfThree-Dimensional Line Plot'); xlabel('\bfx'); x = exp(-0.2*t) .* cos(2*t); y = exp(-0.2*t) .* sin(2*t); plot3(x,y,t,'LineWidth',2); title('\bfThree-Dimensional Line Plot'); xlabel('\bfx'); ylabel('\bfy'); zlabel('\bftime'); grid on; 其它的資料型態與繪圖型態 T.-M.Huang
mesh 和 surf mesh:可畫出立體的「網狀圖」(Mesh Plots) surf:可畫出立體的「曲面圖」(Surface Plots) z = [0 2 1; 3 2 4; 4 4 4; 7 6 8]; mesh(z); xlabel('X 軸 = column index'); ylabel('Y 軸 = row index'); 其它的資料型態與繪圖型態 T.-M.Huang
[x, y] = meshgrid(xstart:xinc:xend, ystart:yinc:yend) meshgrid 的作用是產生 x 及 y (均為向量) 為基準的格子點 (Grid Points),其輸出為 xx 及 yy(均為矩陣),分別代表格子點的 [x, y] = meshgrid(xstart:xinc:xend, ystart:yinc:yend) xx = 3 4 5 6 yy = 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9 x = 3:6; y = 5:9; [xx, yy] = meshgrid(x, y) 其它的資料型態與繪圖型態 T.-M.Huang
使用 linspace 來產生較密集的資料,以便畫出由 函數形成的立體網狀圖。 x = linspace(-2, 2, 25); % 在 x 軸 [-2,2] 之間取 25 點 y = linspace(-2, 2, 25); % 在 y 軸 [-2,2] 之間取 25 點 [xx, yy] = meshgrid(x, y); % xx 和 yy 都是 25×25 的矩陣 zz = xx.*exp(-xx.^2-yy.^2); % 計算函數值,zz 也是 25×25 的矩陣 mesh(xx, yy, zz); % 畫出立體網狀圖 其它的資料型態與繪圖型態 T.-M.Huang
surf 和 mesh 指令的用法類似。 x = linspace(-2, 2, 25); % 在 x 軸 [-2,2] 之間取 25 點 y = linspace(-2, 2, 25); % 在 y 軸 [-2,2] 之間取 25 點 [xx, yy] = meshgrid(x, y); % xx 和 yy 都是 25×25 的矩陣 zz = xx.*exp(-xx.^2-yy.^2); % 計算函數值,zz 也是 25×25 的矩陣 surf(xx, yy, zz); 其它的資料型態與繪圖型態 T.-M.Huang
shading 若要使表面的顏色產生連續性的變化,可使用shading指令。 >> [x, y, z] = peaks; >> surf(x,y,z) >> shading interp; 為了方便測試立體繪圖,MATLAB 提供了一個 peaks 函數, 可產生一個凹凸有致的曲面,包含了三個局部極大點 (Local Maxima)及三個局部極小點(Local Minima) 其它的資料型態與繪圖型態 T.-M.Huang
等高線圖之繪製 我們可用contour指令來畫出「等高線圖」(Contour Plots)。 >> [x, y, z] = peaks; >> contour(z, 30); % 畫出 30 條等高線 畫出特定高度的等高線。 >> contour(z, [0 2 5]); 欲標明等高線的高度,可用 clabel 指令。 >> [c,handle] = contour(z, [0 2 5]); >> clabel(c, handle); 其它的資料型態與繪圖型態 T.-M.Huang
等高線圖之繪製(cont.) 若欲在等高線之間填入顏色,可用 contourf 指令。 使畫出的等高線對應至正確的 x 及 y 座標 >> [x, y, z] = peaks; >> contour(z, 30); % 畫出 30 條等高線 使畫出的等高線對應至正確的 x 及 y 座標 >> contour(x, y, z,30); % 使用三個輸入 若要將等高線畫在曲面的正下方,可用 surfc 或 meshc 指令。 >> meshc(x, y, z); >> axis tight 其它的資料型態與繪圖型態 T.-M.Huang