永成的學習部落格

這裡會記錄永成學習的一部分

0%

勤益(二上)課程-上課筆記 MATLAB 程式設計

這裡記錄著我在課堂中的學習

⬇⬇⬇文章開始⬇⬇⬇

基礎常用語法

命令視窗

  • 清除資料庫(工作區)

    1
    clear
  • 清除命令視窗內容

    1
    clc
  • 離開

    1
    quit
  • 讀取檔案

    1
    load('讀取檔名')
  • 儲存資料庫(工作區)為mat檔

    1
    save (儲存檔名)
  • help查閱用法
    若要查一個輸入指令為menu,可以利用help的功能,範例如下

    1
    help menu

 

文字顏色表示

黑色:一般文字

紅色:錯誤

藍色:for迴圈指令、if指令

綠色:註解

紫色:字串


一般程式編輯

基本表示

1
2
3
4
5
6
7
8
9
10
11
12
13
=   :等號
( :算術運算的左括號。
) :算術運算的右括號。
[ :矩陣或向量的左括號。
] :矩陣或向量的右括號。
; :是否要列印的符號,加在字尾後面。有加表示不列印;沒加表示列印。(同時有Enter的功能)
. :小數點符號。
% :註解說明的符號。
! :執行外部命令的符號(特別是DOS作業系統的指令)。
, :分離函數參數的符號。(若是'單引號'時,則代表字串的符號)
: :資料取出的符號。
... :程式內連接的符號。
' :矩陣轉置的符號。

常數及變數表示

1
2
3
4
5
6
7
8
9
10
ans     :代表答案的意思。
eps :浮點數。
pi :等於3.14159
realmax :代表最大實數。
realmin :代表最小實數。
NaN :代表非數字符號。
inf :代表無限大。
nargin :代表函數輸入之參數的個數。
nargout :代表函數輸出之參數的個數。
i,j :代表複數符號。


輸入指令介紹

1
a = input('輸入一個變數:')

執行後,會要求您輸入一個變數,則a會為您輸入的變數。

1
2
3
請輸入一個變數: 4
a =
4

開根號

1
A = sqrt(9)  %開根號
  • 執行後,結果為
    1
    A = 3

矩陣的設定方法

1
2
3
4
a=[ 1 2 3                %第一種方法
4 5 6
7 8 9]
a=[5 6 7; 8 9 0; 1 2 3] %第二種方法

尋找矩陣,加總值和平均值、最大、最小值

1
2
3
4
5
A = randn(3,3)    %randn為隨機數,後為(3,3)的矩陣
B = max(max(A)) %最大值
C = min(min(A)) %最小值
D = mean(mean(A)) %平均值
E = sum(sum(A)) %加總值
  • 執行後,A為隨機數,測出來的結果會不一樣。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    A =
    1.1006 -1.4916 2.3505
    1.5442 -0.7423 -0.6156
    0.0859 -1.0616 0.7481
    B =
    2.3505
    C =
    -1.4916
    D =
    0.2131
    E =
    1.9182

向量

1
2
3
a=1:10 %固定增加1(到10)
b=1:0.1:10 %每次固定增加0.1(到10)
c=[1 2 3 4 5] %一般向量輸入方式

取絕對值

1
A = abs(-5)
  • 執行後,結果為
    1
    A = 5

矩陣和陣列運算字元

1
2
3
4
5
6
7
8
9
+  %加
- %減
* %乘
/ %右除
\ %左除
^ %次方
.* %向量乘
./ %向量右除
.^ %向量次方

四捨五入

1
2
A = randn(1,5)  %randn為隨機數,後為(1,5)的矩陣
B = round(A) %四捨五入(A)
  • 執行後,A為隨機數,測出來的結果會不一樣。
    1
    2
    3
    4
    A =
    -1.6305 1.4600 2.0500 0.1205 -0.9899
    B =
    -2 1 2 0 -1

時間產生

clock指令,時間,其產生格式為[年 月 日 時 分 秒]


檢查測試指令

exist指令,檔案或變數是否存在測試指令。(5-26頁)

  • 範例
    a=3 設定a變數,exist(a),則會回傳數字為1。

註解:

  1. 若表示變數不存在,則回傳數字為0。
  2. 若是一般變數,則會傳回數字為1。
  3. 若是一般 .M 檔,不管名稱有無鍵入.M的文字均會回傳數字為2。
  4. 若是一般 MEX 檔,則會傳回數字為3。
  5. 若是一般 Simulink 檔,則會傳回數字為4。
  6. 若是內建函數,則會傳回數字為5。

基本矩陣運算

  1. "'" :矩陣的轉置。
  2. a' :計算矩陣a的轉置。
  3. det(a):計算矩陣a的行列式值。(線性代數)
  4. rank(a):計算矩陣的秩。(排)
  5. inv(a):計算矩陣a的反矩陣運算。
  6. trace(a):計算矩陣a的對角線和。

查看矩陣維度

1
2
a = randn(3,4); % 3*4的亂數
size(a)
  • 執行後,顯示為
    1
    2
    ans =
    3 4

查看向量的長度

1
2
a = [2 4 6];
length(a)
  • 執行後,顯示為
    1
    2
    ans =
    3

基本繪圖 (plot)

1
2
a = [1:10]
plot(a)

顯示為:

 

線的格式有"o""--"":""-."".""+""*""x"等。

顏色的指定如下:紅色"r"、藍色"b"、白色"w"、綠色"g"等。

  • 範例:
    1
    plot(r,s,'指定格式')

特殊刻度圖形的處理

(範例參閱8.7

  1. semilogx:水平軸是對數刻度圖。
  2. semilogy:垂直軸是對數刻度圖。
  3. loglog :全對數刻度圖。
  4. logspace:配合對數刻度來取資料點。
  5. linspace:配合線性刻度來取資料點。

圖形視窗切割指令

(範例參閱8.8

  1. subplot(n) :功能切換指令。
  2. subplot :顯示方式復原。
  • 其中有關數值n的定義如下:(數值n的定義功能)

    111:預設的數值,顯示單一個圖形。
    121:顯示二個圖形的設定,此數值表示此圖置於左邊的情形。
    122:顯示二個圖形的設定,此數值表示此圖置於右邊的情形。
    221:顯示四個圖形的設定,此數值表示此圖置於左上方的情形。
    222:顯示四個圖形的設定,此數值表示此圖置於右上方的情形。
    223:顯示四個圖形的設定,此數值表示此圖置於左下角的情形。
    224:顯示四個圖形的設定,此數值表示此圖置於右下角的情形。

特殊二維圖形的繪製

(範例參閱8.98.108.11

  1. stairs:階梯圖指令。
  2. bar:條形圖指令。
  3. bar3:三維條形圖。
  4. pie:圓形圖。
  5. pie3:三維圓形圖。

hold 指令

(範例參閱8.12

axis:座標刻度控制指令

  • 有關axis的用法之指令及說明如下(範例參閱8.14
    1
    2
    3
    4
    5
    6
    7
    1. axis([x軸最小 x軸最大 y軸最小 y軸最大])                 %是較一般的用法
    2. axis([x軸最小 x軸最大 y軸最小 y軸最大 z軸最小 z軸最大]) %是較一般的用法
    3. axis('auto') % 自動調整刻度
    4. axis('ij') % 是改變垂直軸的部分,由大到小
    5. axis('equal') % 是垂直及水平常度相等(指尺寸上)
    6. axis('square') % 是垂直及水平常度相等(指大小相等,但刻度可不同)
    7. axis('xy') % 正常一般直角坐標顯示





 

範例練習題

第三章

例題 3.1

請寫一個 MATLAB 程式,計算華氏溫度,轉換攝氏溫度。

1
2
3
4
5
6
clear                          % 清除舊變數

f=input('請輸入華氏溫度:');
c=(5/9)*(f-32);
fprintf('攝氏溫度為: %f\n',c); % \n跳下一行 % c單一數值

例題 3.2

T公式

z1=(zazc)/(za+zb+zc);
z2=(zb
zc)/(za+zb+zc);
z3=(za*zb)/(za+zb+zc);

TT公式

za=(z1z2+z2z3+z3z1)/z2;
zb=(z1
z2+z2z3+z3z1)/z1;
zc=(z1z2+z2z3+z3*z1)/z3;

 

若已知z1、z2、z3數值,求za、zb、zc數值。

1
2
3
4
5
6
7
8
9
10
11
12
clear                       % 清除舊變數

z1=input('請輸入z1值:');
z2=input('請輸入z2值:');
z3=input('請輸入z3值:');
za=(z1*z2+z2*z3+z3*z1)/z2; % 計算公式
zb=(z1*z2+z2*z3+z3*z1)/z1; % 計算公式
zc=(z1*z2+z2*z3+z3*z1)/z3; % 計算公式

za
zb
zc

若已知za、zb、zc數值,求z1、z2、z3數值。

1
2
3
4
5
6
7
8
9
10
11
12
13
clear  %清除

za=input('請輸入za值:');
zb=input('請輸入zb值:');
zc=input('請輸入zc值:');

z1=(za*zc)/(za+zb+zc); % 計算公式
z2=(zb*zc)/(za+zb+zc); % 計算公式
z3=(za*zb)/(za+zb+zc); % 計算公式

z1 %印值
z2 %印值
z3 %印值

第四章

例題 4.3

中華民國 香港 新加坡 南韓
1996年 2.6 2.8 2.0 2.0
1997年 2.7 2.4 1.8 2.6
1998年 2.7 4.7 3.2 6.8
1999年 2.9 6.1 3.5 6.3
2000年 3.0 4.9 3.1 4.1
2001年 4.6 5.1 3.3 3.7
2002年 5.2 7.3 4.4 3.1
2003年 5.1 8.3 4.5 3.5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
% 失業率之矩陣應用
clear
a=[2.6 2.8 2.0 2.0
2.7 2.4 1.8 2.6
2.7 4.7 3.2 6.8
2.9 6.1 3.5 6.3
3.0 4.9 3.1 4.1
4.6 5.1 3.3 3.7
5.2 7.3 4.4 3.1
5.1 8.3 4.5 3.5];
fprintf('Column 是國家 and row 是年\n')
a
fprintf('\n')
fprintf('取出新加坡之所有失業率是\n')
a(:,3)
fprintf('\n')
fprintf('取出2000年之所有失業率是\n')
a(5,:)
fprintf('\n')
fprintf('取出2002年南韓之所有失業率是\n')
a(7,4)
fprintf('\n')

第七章

例題 7.5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
%
% npn電晶體的射極效率
%
clear
DE=1;
DP=10;
NB=1e17;
NE=1e19;
W=0.5e-6;
LE=1e-6;
LP=LE;
R=1/(1+DE/DP*NB/NE*W/LE); % 矩陣方式
RA=1./(1+DE./DP.*NB./NE.*W./LE); % 陣列方式
ral=pnpee(DE,DP,NB,NE,W,LE); % 函數呼叫的方式
fprintf('\n npn電晶體的射極效率之結果\n')
fprintf('\n 射極效率矩陣算法:%f\n',R)
fprintf('\n 射極效率向量算法:%f\n',RA)
fprintf('\n 射極效率呼叫函數的算法:%f\n',ral)
%
% pnp電晶體的傳導因數
%
fprintf('\n\n')
aaa=sech(W/LP);
AAA=sech(W./LP);
fprintf('\n pnp電晶體的傳導因數之結果\n')
fprintf('\n 傳導因數-矩陣算法:%f\n',aaa)
fprintf('\n 傳導因數-向量算法:%f\n',AAA)

例題 7.6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
%
% pn接面之內建電壓及空乏層厚度的計算
%
clear % 清除舊變數
ktq=0.0259;
NA=1e18;
ND=1e15;
ni=1.45e10;
q=1.6e-19;
es=8.85e-14;
Vbi=ktq*log(NA*ND/ni^2); % 矩陣計算的方式
Vbia=ktq.*log(NA.*ND./ni.^2); % 陣列計算的方式
fprintf('\n pn接面之內建電壓之結果\n')
fprintf('\n 內建電壓矩陣算法:%f\n',Vbi)
fprintf('\n 內建電壓向量算法:%f\n',Vbia)
%
%pn空乏層的厚度
%
fprintf('\n\n')
aaa=sqrt(2*es*Vbi/q/ND);
AAA=sqrt(2.*es.*Vbi./q./ND);
fprintf('\n pn接面空乏層厚度的計算之結果\n')
fprintf('\n 空乏層厚度的計算-矩陣算法:%f\n',aaa)
fprintf('\n 空乏層厚度的計算-向量算法:%f\n',AAA)

例題 7.7

  • 主程式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %
    % Poisson分佈函數之計算
    %
    clear % 清除舊變數
    x=6;
    u=4;
    pxu=exp(-1*u)*u^x/ranking(x); %矩陣運算方式
    pxuv=exp(-1*u).*u.^x./ranking(x); %陣列運算方式
    fprintf('\n Poisson分佈函數之計算的結果\n')
    fprintf('\n 矩陣算法:%f\n',pxu)
    fprintf('\n 向量算法:%f\n',pxuv)
  • 副程式.m檔案(ranking)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %
    %階乘函數的設計(純量和向量)
    %
    function sss=ranking(n)
    sss=ones(size(n));
    for j=1:length(n);
    for i=1:n(j)
    sss(j)=sss(j).*i;
    end
    end

第八章

例題 8.1

1
2
3
4
5
6
7
8
9
%
% Ex81
%
clear % 是清除舊變數的指令
t=0:0.1:3; % 設定t的範圍從0到3,間隔取0.1
f1=exp(-t).*sin(t)*10; % 設定f1(t)多項式內容
plot(t,f1) % 繪出圖形,t對f1的關係圖
pause % 暫停執行的動作,使用這個指令的目的是把螢幕停下來,
% 以便查看所規劃的圖形是否正確,如果一顯示就立即消失,那麼就無法判對是否正確。

例題 8.3

1
2
3
4
5
6
7
8
%
% Ex83
%
t=-10:0.1:10; % 設定t的範圍在-10到10之間,間隔取0.1,此時t可視為是一個向量
a=[sin(t)
tanh(0.5*t)]; % 把a陣列的內容設定在程式中
plot(t,a) % 把t對a的陣列圈形繪出
pause % 暫停執行

例題 8.6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
clear                         % 刪除舊變數
t=0:0.1:3; % 設定輸入區間從0到3之間,間隔0.1
f1=exp(-t).*sin(t)*10; % 把函數f1表示出來
f2=t.^3-4*t.^2+t+2; % 把函數f2表示出來
plot(t,f1,'*',t,f2) % 依指定的型式把曲線繪出
title('display two function') % 顯示抬頭文字為display two function
xlabel('time input') % 顯示x軸文字為time input
ylabel('magnitude') % 顯示y軸文字為magnitude
grid % 加畫格子到圖形上
gtext('function 1') % 活動顯示文字到第一條曲線上
gtext('function 2') % 活動顯示文字到第二條曲線上
pause % 暫停執行功能
grid % 取消畫格子到圖形上
pause % 暫停執行功能

例題 8.7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
clear                         % 清除舊變數
t=logspace(-1,1);
f1=exp(-t)*100;
f2=t.^3+4.^2+t+2;
loglog(t,f1,'*',t,f2)
title('display two function')
xlabel('time input')
ylabel('magnitude')
grid;
gtext('function 1')
gtext('function 2')
pause % 暫停執行功能
semilogx(t,f1,'*',t,f2)
title('display two function')
xlabel('time input')
ylabel('magnitude')
grid;
gtext('function 1')
gtext('function 2')
pause % 暫停執行功能
semilogy(t,f1,'*',t,f2)
title('display two function')
xlabel('time input')
ylabel('magnitude')
grid;
gtext('function 1')
gtext('function 2')
pause % 暫停執行功能

例題 8.8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
clear                               % 清除舊變數
t=0:0.1:3;
f1=exp(-t).*sin(t)*10;
f2=t.^3-4*t.^2+t+2;
subplot(121),plot(t,f1,'*',t,f2)
title('display two function')
xlabel('time input')
ylabel('magnitude')
t=logspace(-1,1);
f3=exp(-t).*100;
f4=t.^3+4*t.^2+t+2;
subplot(222),loglog(t,f3,'*',t,f4)
title('display two function')
xlabel('time input')
ylabel('magnitude')
subplot
pause % 暫停執行功能

例題 8.9

1
2
3
4
5
6
7
8
9
10
clear                       % 清除舊變數
t=0:0.2:4;
a=[sin(t)];
subplot(221),bar(a)
subplot(222),bar(t,a)
number=[ 1 5 10 20 15 9]; % 設定人數在number這個向量之中
ga=50:10:100; % 設定分數的資料於ga這個向量之中
subplot(224),bar(ga,number) % 採用切換螢幕成四個圖的模式,位於右下方處
subplot % 切換回原來單一圖形顯示的模式
pause % 暫停執行功能

例題 8.10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
%
% 3d bar test
%
clear % 清除舊變數
y=[ 1 2];
z=[ 1 5 8 3 6
-3 6 2 7 -1];
bar3(y,z)
title('3d bar graph')
pause
clear % 清除舊變數
clf
y=[ 1 2 3 4 5];
z=[ 1 5 8 3 6 7
-3 6 2 7 -1 2
5 4 8 -4 6 7
3 -6 7 1 9 1
3 7 8 9 4 6];
bar3(y,z)
title('3d bar graph')

例題 8.11

1
2
3
4
5
6
7
8
9
10
11
12
%
% 3d bar test
%
clear % 清除舊變數
t=0:0.2:4; % 設定t的範圍及區間
a=[sin(t)]; % 把sin(t)的資料存於a向量之中
subplot(221),stairs(a) % 利用劃面切換功能,劃一個階梯圖在左上方。
subplot(223),stairs(t,a) % 利用劃面切換功能,劃一個階梯圖在左下方。
ga=[sin(t)]; % 重新設定個向量來存sin(t)的內容。
subplot(224),plot(t,ga) % 利用視窗的切換劃一個連續圖在右下方處
subplot % 切換回原來單一圖形顯示的模式
pause % 暫停執行功能

例題 8.12

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
%
% 3d bar test
%
clear % 清除舊變數

% 設定第一組圖形的函數及區間
t=0:0.1:3;
f1=exp(-t).*sin(t)*10;
f2=t.^3-4*t.^2+t+2;
plot(t,f1,'*',t,f2,'.')

% 系統維持住圖形的'開關打開'
hold
pause % 暫停執行功能

% 第二組圖形,此時會重疊到原來的圖形之中
plot(t,t,'+')
pause % 暫停執行功能

% 設定第三組圖形的函數,並繪製第三組圖形,此時仍然再度重疊到前二個圖形之中
t2=-10:0.1:10;
a=[3*sin(t2)
3*tanh(0.5*t2)];

% 加註解文字說明以及儲存圖形資料
plot(t2,a)
title('display two function')
xlabel('time input')
ylabel('magnitude')
pause % 暫停執行功能

% 系統維持住圖形的'開關關閉'
hold

% 是把前三個圖形單獨分別在同一個螢幕上顯示這三個圖形,以供比較之用。
subplot(221),plot(t,f1,'*',t,f2,'.')
subplot(222),plot(t,t,'+')
subplot(223),plot(t2,a)
subplot
pause % 暫停執行功能

例題 8.14

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
%
% 3d bar test
%
% axis test
%
clear
t=1:0.1:10;
y=exp(-t).*cos(7.*t);
plot(t,y)
axis([1 10 -1 1])
xlabel('x');
xlabel('y');
title('2D plot');
pause

plot(t,y)
axis('auto')
xlabel('x');
xlabel('y');
title('2D plot which axis is auto');
pause

plot(t,y)
axis('ij')
xlabel('x');
xlabel('y');
title('2D plot which axis is ij');
pause

plot(t,y)
axis('xy')
xlabel('x');
xlabel('y');
title('2D plot which axis is xy');
pause

plot(t,y)
axis('square')
xlabel('x');
xlabel('y');
title('2D plot which axis is square');
pause

plot(t,y)
axis('equal')
xlabel('x');
xlabel('y');
title('2D plot which axis is equal');
pause

z=exp(-2.*t).*cos(6.*t);
plot3(t,y,z)
axis([1 10 -1 1 -1 1])
xlabel('x');
xlabel('y');
xlabel('z');
title('3D line plot');
pause

plot3(t,y,z)
axis('equal')
xlabel('x');
xlabel('y');
xlabel('z');
title('3D line plot is equal');
pause

%
% 3-D objects
%
clear x,y,z;
[x y z]=sphere(15);

surf(x,y,z)
axis([-1.5 1.5 -1.5 1.5 -1.5 1.5])
xlabel('x');
ylabel('y');
zlabel('z');
title('3D surface of sphere');
pause

surf(x,y,z)
axis('square')
xlabel('x');
ylabel('y');
zlabel('z');
title('3D surface of sphere in square');
pause

surf(x,y,z)
axis('auto')
xlabel('x');
ylabel('y');
zlabel('z');
title('3D surface of sphere in auto');
pause

例題 8.15

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
%
% Ex815
%
clear
x=-5:0.1:5; % 資料的設定
y=-5:0.1:5;
[X Y]=meshgrid(x,y);
Z=exp(0.2.*Y).*sin(Y).*cos(X);

mesh(Z) % mesh的繪製
xlabel('x-axis')
ylabel('y-axis')
zlabel('z-axis')
title('3d graph')
pause

meshc(X,Y,Z) % meshc的繪製
xlabel('x-axis')
ylabel('y-axis')
zlabel('z-axis')
title('3d graph with contour')
pause

meshz(X,Y,Z) % meshz的繪製
xlabel('x-axis')
ylabel('y-axis')
zlabel('z-axis')
title('3d graph with curtain')
pause

例題 8.16

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%
% Ex816
%
clear
x=-5:0.1:5; % 資料的設定
y=-5:0.1:5;
[X Y]=meshgrid(x,y);
Z=exp(0.015.*Y).*sin(Y).*cos(X);
%
% Contour graph
%
contour(X,Y,Z) % 二維等高線圖
pause

contour3(X,Y,Z) % 三維等高線圖
pause

例題 8.21

1
2
3
4
5
6
7
8
9
10
11
12
13
14
%
% Ex821
%
% Polar corrdinate graph
%
clear
ang=0:0.1:2*pi; % 資料設定
mag=cos(ang).*sin(3*ang);

polar(ang,mag) % 第一個極座標
pause

polar(ang,mag,'*') % 第二個極座標
pause

例題 8.22

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
%
% 3-D objects
% ex822
clear
[x y z]=cylinder(28); % 資料產生

surf(x,y,z) % 柱形的surface圖
xlabel('x');
ylabel('y');
zlabel('z');
title('3D surface of cylinder(28)')
pause

mesh(x,y,z) % 柱形的mesh圖
xlabel('x');
ylabel('y');
zlabel('z');
title('3D surface of cylinder(28)')
pause

例題 8.23

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
%
% 3-D objects
% ex823
clear x,y,z
w=0:0.1:1.5*pi; % 資料設定
[x y z]=cylinder(cos(w));

surf(x,y,z) % surf的柱形圖
xlabel('x');
ylabel('y');
zlabel('z');
title('3D surface of cylinder(cos(w))')
pause

mesh(x,y,z) % mesh的柱形圖
xlabel('x');
ylabel('y');
zlabel('z');
title('3D mesh of cylinder(cos(w))')
pause





 

期末一定會考之題目

for二迴圈

1
2
3
4
5
6
7
clear                       % 清除舊變數

for i=1:10
for j=1:8
a(i,j) =i+j
end
end

進階for三迴圈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
%
% generator 3*3*3 matrix
%
clear % 清除舊變數
n=3;
for i=1:n
for j=1:n
for k=1:n
a(i,j,k)=i+j+k;
end
end
end
disp(' display a matrix')
a

global 全域值(Workspace)

Test 1

設置取 c 單一變數值之方式

  • 主程式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %
    % global test
    %
    clear % 清除舊變數
    global b % 宣告全域值
    a=1;
    b=1;
    c=ffff(a) % 執行副程式
    a=2;
    b=10;
    c=ffff(a) % 執行副程式
     
  • 副程式有以下兩種方式
  1. 存為ffff.m檔 (宣告全域值)

    1
    2
    3
    function r=ffff(a) 
    global b % 宣告全域值
    r=a*b;
  2. 存為ffff.m檔 (不宣告全域值)

    1
    2
    function r=ffff(a,b)
    r=a*b;

Test 2

cd 兩者變數值之方式,可以利用中括號之方式[c d]來進行設置。

  • 主程式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %
    % global test
    %
    clear % 清除舊變數
    global b % 宣告全域值
    a=1;
    b=1;
    c=ffff(a) % 呼叫副程式
    a=2;
    b=10;
    [c d]=ffff(a) % 呼叫副程式
     
  • 副程式有以下兩種方式
  1. 存為ffff.m檔 (宣告全域值)

    1
    2
    3
    4
    function [r k]=ffff(a)
    global b % 宣告全域值
    r=a*b;
    k=a+b;
  2. 存為ffff.m檔 (不宣告全域值)

    1
    2
    3
    function [r k]=ffff(a,b)
    r=a*b;
    k=a+b;

     

subplot 圖形視窗切割指令

subplot(n):功能切換設定
subplot:顯示方式復原
 
其中有關數值n的定義如下:數值n的定義功能

  1. 111:預設的數值,顯示單一個圖形。
  2. 121:顯示二個圖形時的設定,此數值表示此圖置於左邊的情形。
  3. 122:顯示二個圖形時的設定,此數值表示此圖置於右邊的情形。
  4. 221:顯示四個圖形時的設定,此數值表示此圖置於左上方的情形。
  5. 222:顯示四個圖形時的設定,此數值表示此圖置於右上方的情形。
  6. 223:顯示四個圖形時的設定,此數值表示此圖置於左下方的情形。
  7. 224:顯示四個圖形時的設定,此數值表示此圖置於右下方的情形。

polar 極座標的繪圖

(範例參閱8.21)






 

實質課堂操作

2019年09月18日

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
I=1;              %電流
V=5; %電壓
theta=10;
P=1*V*cos(theta); %功率


AA=[ 1, 1, 1; 2, 2, 2; 3, 3, 3];

A=[ 1 2 3
4 2 3
7 5 3]
B=[ 1 7 3
4 2 3
10 15 20];

a =input('要顯示的文字');
b =input('我的測試','s'); % s is string % s是字串
disp('要顯示的字串') %ans

H =[-1.2 sqrt(9) (1+2)*3/4]; %sqrt 開根號

C=A*B

C=[1+2i,3+4i]

%quit 離開
%inv 反矩陣

%向量
x=1:5
y=0:pi/4:pi % pi=%
z=6:-1:1

%指定矩陣
A(3,3) = A(1,3) + B(3,1)

 

2019年09月25日

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

i = 0;
a = 1;
b = 2;
c = 3;
for i = 1:10
i;
a=a+i;

end


while a==b
z=a+b;
end

if b~=c
d=b+c
else
d=b-c
end
x=(1:100)*10

plot(x)%顯示圖片 %bar(x)
title('圖表') %圖名稱
xlabel('資料數列') %x列
ylabel('voltage') %y列
fprintf('\n\n')
a
b
c

 

2019年10月2日

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
clear
%ex1
t1 = 0: 0.01 : 2 * pi;
plot(t1 , cos(6.*t1),'r');
xlabel('t');
ylabel('y');
grid;

%ex2
t2=1:0.1:10;
plot(t2,exp(-0.3*t2).*sin(t2));
% max最大值
% min最小值

%ex3
tc=clock;%時間
t=0:0.1:20;

plot(t,sin(2*t));
xlabel('t');
ylabel('y');
title('sin')
%gtext('sin')
grid;
tidata=clock-tc

%ex4

 

2019年10月9日

第一個程式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
%p3-13
clear

a=10;
b=100;
c=a+b;
%t=linspace(-5,5)
%y=sinc(t)
%plot(t,y)
%legth(x)顯示幾筆
%ones(3,200)
%T = t'矩陣轉字
% ... = 程式接續的指令ex 1+2+3+4+....4+6
%
clear
iqs = 0;
ids = 0;
iqr = 0;
idr = 0;

a=[iqs ids iqr idr];
aa=[1 2 3 4];
b=a+aa;
c=b';
t= 1:10;
s = [1 2 3 4 ...%;
5 6 7 8 ]; %(1*8矩陣)
x = randn(10,10); %%%%%%%%%%%%%%%%%%%%%%%%
%x = zeros (10,10) %10*10 塞0
%x = ones (10,10) %10*10 塞1

plot(t,x(1,1:10)); %10欄
%plot(t,x(1,:)) %所有欄

e = [ 1 2 5 6 4 8 2 5 8 5];
f = e(1,3:6)%指定位子

g = [ 1 2 5 5 6 8;
5 2 5 8 5 2;
5 5 2 5 8 5];
h = g(2:3,3:5)

%realmax整數最大值
a1 = 3+4i
realmax

dec2base(32,2) %32轉成2進制

第二個程式

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

Za=input('Za: ');
Zb=input('Zb: ');
Zc=input('Zc: ');

Z1=(Za*Zc)/(Za+Zb+Zc);
Z2=(Zb*Zc)/(Za+Zb+Zc);
Z3=(Za*Zb)/(Za+Zb+Zc);

fprintf('The results for T network\n')
Z1
Z2
Z3

 
 
 
 

2019年10月23日

1
2
3
4
5
6
7
8
9
10
A = randn(3,3)
%randn = 10 %%不能與內定指令衝突

%1-33頁
%max %最大值
%mean %平均值
%min %最小值
%sum %加總