2007/Apr/28

String Variable
การกําหนดค่าตัวแปรนอกจะกําหนดเป็นตัวเลขแล้ว เรายังสามารถกําหนดเป็นตัวหนังสือได้อีก
ด้วย โดยการกําหนดค่าตัวแปรที่เป็นตัวหนังสือหรือที่เรียกว่า string จะต้องใส่ค่าที่เราต้องการกําหนดใน
เครื่องหมาย quotation “'” ดังตัวอย่างเช่น
Str1='Tom';
Str2='Pookie';
การกําหนดค่าตัวแปรเป็น string จะมีประโยชน์ในกรณีที่ต้องส่งค่าตัวแปรที่เป็นตัวหนังสือไป
ให้ function เพื่อใช้ในการประมวลผลหรือแสดงคําสั่งที่ต้องการ
สําหรับการกําหนดตัวแปรให้เป็น matrix โดยมีค่าแต่ละ element เป็น string นั้นมีข้อจํากัดอย่าง
หนึ่งคือทุกตัวแปรจะต้องมีความยาวเท่ากัน ซึ่งข้อจํากัดนี้มาจากว่า matrix ต้องมีจํานวน column ในแต่ละ
row เท่ากัน ซึ่งจากข้อจํากัดนี้ทําให้เราอาจต้องเพิ่ม blank space มาขั้นในตัวแปรที่เป็น string แต่ละตัว
2.2 Matrix Operation
- Dot Product
Dot Product หรือ inner product เป็นการคํานวณหาค่า scalar value ของ vector ที่มีขนาดเท่ากัน ซึ่งถ้า
A และ B เป็น vector ที่มีขนาดเท่ากันจะได้
∑=
= •
N
i
i ib a B A
1
เมื่อ N เป็นจํานวน element ของ A และ B
ตัวอย่างเช่น A = [1 2 3] B = [4 5 6] จะได้ว่าถ้า C = A⋅B จะได้ (1)(4) + (2)(5) + (3)(6) = 4+10+18 =
32
MATLAB จะใช้คําสั่ง
C = dot(A,B)
Basic Operation 28
dot(A,B) คํานวณหา dot product ของ A และ B ถ้า A และ B เป็น matrix dot product จะเป็น row
vector ที่มี element ในแต่ละ column บรรจุค่า dot product ในแต่ละ column ของ A
และ B
ตัวอย่างเช่น
A=[1 2 3];B=[4 5 6];
ดังนั้น
dot(A,B)
ans =
32
􀁯 การคูณ Matrix
การที่ Matrix A และ B จะคูณกันได้ matrix ตัวแรกจะต้องมีจํานวน column เท่ากับจํานวน row ของ
ตัวที่สอง และผลจะได้ matrix ที่มีขนาดเท่ากับ row ของตัวแรก และ column ของตัวหลัง เช่น A มีขนาด
[m x n] และ B มีขนาด [p x q] AB จะมีค่าก็ต่อเมื่อ n = p และจะได้ matrix ขนาด m x q ดังนั้นโดยทั่วไป
AB ≠ BA หรือไม่มีการสลับที่การคูณของ matrix สําหรับ MATLAB ถ่า C = AB จะใช้
C = A * B
ถ้าจํานวน column A ไม่เท่ากับจํานวน row ของ B MATLAB จะแสดงข้อความบอกความผิดพลาด
- การคูณ Matrix ด้วย Scalar
การคูณ matrix ด้วย scalar นั้นจะเปนการคูณทุก element ของ matrix ด้วยค่าคงที่ เช่น A=[1 2]; จะ
ได
C =2*A
C =
2 4
􀁱 การบวก-ลบ Matrix
การที่ matrix จะบวก/ลบกันได้ต้องมีขนาดเท่ากัน และการบวก/ลบจะกระทําโดยบวก/ลบแต่ละ
element ของ matrix
A=[1 2 3];
B=[4 5 6];
C=A-B
C =
-3 -3 -3
- การยกกําลัง Matrix
Matrix ที่จะยกกําลังได้ต้องเป็น square matrix เท่านั้น โดย
Basic Operation 29
A2 = AA
MATLAB จะเขียน A2 เปน A^2 ดังนั้น
A^2 จะเทากับ A*A
A^3 จะเทากับ A*A*A
􀁳 Matrix Polynomial
สําหรับ polynomial function ของ x จะอยู่ในรูป
f x a x a x a x a n
n
n
n ( ) ... = + + + −

1
1
1 0
โดย a a n n , ,... −1 เป็นสัมประสิทธิของ polynomial ถ้า x เป็น matrix จะเรียกว่า matrix polynomial โดยกําลัง
ของ matrix ก็จะใช้หลักการของการยกกําลัง matrix สําหรับ MATLAB สามารถจะเขียน polynomial ของ
matrix โดยใช้function polyvalm
polyvalm (a,x) เป็นการหาค่า polynomial ของ matrix x โดยใช้สัมประสิทธิ์ a ซึ่ง x เป็น
square matrix และ a เป็น row vector
สําหรับ operation ของ Matrix ในทางคณิตศาสตร์เบื้องต้นจะมีประมาณเท่าที่กล่าวมาแล้ว แต่สําหรับ
MATLAB จะมี operation ของ Matrix แบบอื่นๆ อีกมากมาย ทั้งที่มีนิยามตามคณิตศาสตร์และไม่มีในนิยาม
แต่สร้างขึ้นมาเพื่อให้สะดวกแก่การใช้งาน โดยเฉพาะการหาร การทํา operation ของ elements ซึ่งจะกล่าว
ในหัวข้ออื่นต่อไป
2.3 Matrix Functions
􀁮 Matrix Inverse
ถ้า A เป็น square matrix จะได้ว่า Inverse Matrix ของ A นิยมเขียน A-1 จะนิยามโดย
AA A A I − − = = 1 1
เมื่อ I เป็น identity matrix สําหรับ matrix ที่ไม่สามารถหาค่า inverse ของ matrix ได้จะเรียกว่า singular matrix
ส่วน matrix ที่หาค่า inverse ได้ จะเรียก nonsingular matrix การหาค่า inverse matrix ที่มีขนาดใหญ่เป็นเรื่อง
ยากในทางปฏิบัติ โดยเฉพาะการคํานวณตามหลักของพีชคณิต ดังนั้นส่วนใหญ่ในโปรแกรม
คอมพิวเตอร์นิยมใช้วิธีเชิงตัวเลขมากกว่า สําหรับ MATLAB ก็เช่นกันโดยคําสั่งที่ใช้จะใช้คําสั่ง inv
Basic Operation 30
inv(a) เป็นการคํานวณ inverse ของ matrix a ถ้า a เป็น singular matrix หรือเป็น matrix ที่
ไม่มี inverse MATLAB จะแสดงขอความบอกความผิดพลาด
ตัวอย่างเช่น A=[1 4;8 9];
inv(A)
ans =
-0.3913 0.1739
0.3478 -0.0435
- Rank of Matrix
ถ้าแต่ละ row ของ matrix แทนแต่ละสมการในพีชคณิตเชิงเส้น rank ของ matrix คือจํานวนสมการ
ที่ไม่ขึ้นต่อกันของระบบสมการนั้น เช่น
a =(1 2 3
2 4 6)
จะเห็นว่า row ที่ 2 เป็น 2 เท่าของ row แรก ดังนั้น row ทั้งสองจะขึ้นต่อกัน ทําให้ a นี้มี rank เท่ากับ 1
โดยทั่วไปแล้ว matrix ที่มี rank น้อยกว่าจํานวน row จะเป็น singular matrix สําหรับ MATLAB จะหา rank
จากคําสั่ง rank
rank(a) การคํานวณหา rank ของ matrix a
ตัวอย่างเช่น
a=[1 2 3;2 4 6];
rank(a)
ans =
1
- Determinant of Matrix
Determinant ของ square matrix เปนการหาคา scalar ของ matrix คําสั่งการหาคา determinant ของ
square matrix a ใน MATLAB คือ
det(a) หาค่า determinant ของ a
สําหรับ matrix มี determinate เท่ากับศูนย์matrix นั้นจะเป็น singular matrix การหา determinant โดย MATLAB
มีตัวอย่างเช่น
a=[1 2 3; 2 7 6; 5 4 8];
det(a)
ans =
-21
-การหาร Matrix
Basic Operation 31
ความจริงแล้ว matrix ไม่มีคุณสมบัติของการหาร แต่ MATLAB ได้สร้าง function นี้ขึ้นมาเพื่อ
สะดวกในการแก้ ระบบสมการ linear equations พิจารณา
Ax B =
ดังนั้น x A B = −1
ซึ่ง MATLAB จะใช้ สัญลักษณ์ x=A\B
∴ A\B = A-1B
หากพิจารณา
xA = B
จะได x = BA-1
ซึ่ง MATLAB จะใช B/A
ดังนั้น B/A = BA-1
-สําหรับ เครื่องหมาย / ใน MATLAB จะเรียก left matrix division
- สําหรับ เครื่องหมาย \ ใน MATLAB จะเรียก right matrix division
- วิธีเชิงตัวเลขที่ใช้ในการคํานวณหาค่า x MATLAB จะใช้ Gauss elimination numerical
Technique
สําหรับตัวอย่างในกรณีนี้จะอยู่ในหัวข้อการหาค่าคําตอบของระบบสมการเชิงเสน ซึ่งจะกล่าวถึงวิธีการ
นี้อย่างละเอียด
- Matrix Decomposition
โดยทั่วไปแลวเราสามารถจะแยก matrix A ออกเป็นผลคูณของ matrix 2 matrix ซึ่งเรียกว่า
Decomposition หรือ Factorization ของ matrix ในปญหาทางคณิตศาสตร์หลาย ๆ กรณี หากเราแยก matrix
ออกแล้ว จะสามารถลดการคํานวณต่างๆ ให้มีขั้นตอนน้อยลงได้ การ decomposed matrix ที่นิยมทํากันมี 3
วิธีคือ
- LU-decomposition หรือบางครั้งเรียก Triangular Factorization คือการแยก matrix ออกเป็นผล
คูณของสอง matrix โดยแยกเป็น lower triangular matrix และ upper triangular matrix
- Lower Triangular matrix, L, คือ matrix ที่มีค่าของ elements ที่อย่ด้านบนของ main diagonal เป็น
ศูนย์ (มีค่าเฉพาะที่อยู่มากว่า main diagonal) ตัวอย่างเช่น
L =
{1 0 0
4 2 0
5 6 3}
Basic Operation 32
- Upper Triangular matrix, U คือ matrix ที่มีคาของ elements ที่อยู่ด้านล่างของ main diagonal เป็น
ศูนย์ (มีค่าเฉพาะที่อยู่สูงกว่า main diagonal) ตัวอย่างเช่น
U =
{1 2 3
0 4 5
0 0 6}
ดังนั้น สําหรับการแยก A ออกเป็นผลคูณของสอง matrix หรือ
A = LU
สําหรับ MATLAB จะใช้
[L,U]= lu(A) คํานวณหา matrix ที่ได้จากการแยก A ออกเป็น Lower triangular L และ
upper triangular U ซึ่งทําให้ LU = A และ Matrix A จะต้องเป็น Square
Matrix เท่านั้น
ตัวอย่างเช่น
A=[1 3 2;-2 –6 1;2 5 7];
[L,U]=lu(A)
LD =
-0.5000 0 1.0000
1.0000 0 0
-1.0000 1.0000 0
UD =
-2.0000 -6.0000 1.0000
0 -1.0000 8.0000
0 0 2.5000
- LU-decomposition อาจหาคําตอบได้ไม่เหมือนกับการแยกด้วยมือ แต่นั้นไม่สําคัญเนื่องจากคําตอบของ
การหา LU-decomposition ไม่ได้มีคํ าตอบเดียว และในการหาทั้ งสองแบบนี้ได้รวม permutes lower
triangular factor แล้ว
สําหรับในกรณีที่ต้องการทราบ permuted lower triangular factor ด้วยจะใช้คําสั่ง
[L,U,P]= lu(A)
L =
1.0000 0 0
-1.0000 1.0000 0
-0.5000 0 1.0000
U =
-2.0000 -6.0000 1.0000
0 -1.0000 8.0000
0 0 2.5000
P =
0 1 0
0 0 1
1 0 0
Basic Operation 33
และ PA = LU
- QR-Decomposition เป็นอีกวิธีหนึ่งในการแยก matrix ออกเป็น orthonormal matrix Q และ upper
triangular matrix, R (ซึ่งบางครั้งเรียก right hand matrix เพราะมีค่าเฉพาะด้านขวามือของ main diagonal
เท่านั้น) โดย orthogonal matrix คือ matrix ที่มีคุณสมบัติ
I QQT =
หรือ
Q QT − = 1
สําหรับ MATLAB ใช้
[Q,R]= qr(A) คํานวณหา matrix Q และ R ซึ่งทําให้ A = QR โดย Q เป็น orthonormal
และ R เป็น upper triangular matrix โดยที่ A ไม่จําเป็นจะต้องเป็น Square
Matrix
เช่น
A=[1 2 3; 5 8 7];
[Q,R]=qr(A)
Q =
-0.1961 -0.9806
-0.9806 0.1961
R =
-5.0990 -8.2369 -7.4524
0 -0.3922 -1.5689
-Singular Value decomposition (SVD) เป็นการ decomposed matrix ออกเป็นผลคูณของ matrix 3
matrix คือ
A = QSV
โดย Q และ V เป็น orthonormal matrix และ S เป็น diagonal matrix สําหรับ MATLAB ใช้
[Q,S,V]=svd(A) decompose A ออกเป็น A = QSV เมื่อ Q และ V เป็น orthonormal
และ s เป็น diagonal matrix
-สําหรับการ decompose ทั้ง 3 กรณีนั้น ถ้า A มีขนาดเป็น [m x n] จะได้
- U, L และ R มีขนาดเดียวกันกับ A
- Q มีขนาดเป็น m x m
- V มีขนาดเป็น n x n
- S มีขนาดเป็น m x n
Basic Operation 34
ตัวอย่างเช่น
A=[1 4;8 9];
[L,U]=lu(A)
L =
0.1250 1.0000
1.0000 0
U =
8.0000 9.0000
0 2.8750
[Q,R]=qr(A)
Q =
-0.1240 -0.9923
-0.9923 0.1240
R =
-8.0623 -9.4266
0 -2.8528
[Q,S,V] = svd(A)
Q =
0.2966 0.9550
0.9550 -0.2966
S =
12.5963 0
0 1.8259
V =
0.6301 -0.7765
0.7765 0.6301
􀁳 Array Operation
ในหลายๆ กรณีเรามีความจําเป็นที่จะคูณหรือหารเฉพาะ element ของ matrix เท่านั้น ซึ่งนิยม
เรียก element - by - element operation หรือ array operation ตัวอย่างเช่นพิจารณา
A = [1 2 3 4];
B = [2 4 4 5];
จะพบว่า A * B จะไม่สามารถหาค่าได้ แต่หากเราต้องการ matrix C ซึ่งมีค่าเป็น c ab i i i = หรือ
( ) ( ) ( ) c A B 1 1 1 = * , ( ) ( ) ( ) c A B 2 2 2 = * ,...
เราจะสามารถใช้คําสั่ง array operation ได้โดยใช้ “.” แลวตามด้วย “ * ”
C = A.*B
ทํานองเดียวกัน หากต้องการหาค่า D ซึ่งมี element แต่ละ clement เท่ากับผลหารของแต่ละ element ของ A
หารดวย B ในตําแหนงเดียวกัน จะใช “ . ” แลวตามดวย “ / ” เชน
D = A./B
สวนการยกกําลัง
E = A.^B
Basic Operation 35
จะไดวา E จะมี element แตละตัวเทากับ element นั้นของ A ยกกําลังดวย element ที่ตําแหนงเดียวกันของ B
ตัวอบางเชน
A=[1 2 3 4 5];
B=[4 5 9 10 2];
A.*B
ans =
4 10 27 40 10
B.^A
ans =
4 25 729 10000 32
􀀰 การใช Array operation สําหรับ matrix จะตองใชไดกับ matrix ที่มีขนาดเทากันเทานั้น
􀁴 ลําดับการคํานวณ
ขั้นตอนการคํานวณใน MATLAB ก็เชนเดียวกันกับพีชคณิต ทั่วไปคือจะทําตามลําดับดังนี้คือ
(1) คํานวณในวงเล็บกอน โดยเริ่มจากวงเล็บในสุดกอน
(2) ยกกําลัง โดยเริ่มจากซายไปขวา
(2) คูณหรือหาร โดยเริ่มจากซายไปขวา
(3) บวก หรือ ลบ โดยเริ่มจากซายไปขวา
􀀰 เพื่อใหลําดับการคํานวณเปนไปตามที่ตองการควรใชวงเล็บเขาชวย เพื่อปองกันความผิดพลาดที่อาจ
เกิดขึ้นได
􀁵 การจัดเรียง Matrix ใหม
ในหลายกรณี เรามีความจําเปนตองจัด matrix ใหอยูในรูปอื่นๆ เพื่อความเหมาะสม เพื่อใชใน
การคํานวณที่เราตองการ ซึ่ง MATLAB มี function ตอไปนี้
rot90(A) จะหมุน matrix A ไป 90° ทวนเข็มนาฬิกา
rot90(A,n) จะหมุน matrix A ไป 90° เปนจํานวน n ครั้ง ในทิศทวนเข็มนาฬิกา
fliplr(A) พลิก Matrix A จากซายไปขวาคือเอา column ซายสุดไปไวขวาสุดแลว
สลับที่กันตอ ๆ ไปจนครบ
flipud(A) พลิก Matrix A จากบนลงลางคือเอา row บนสุดไปไวลางสุดแลวสลับที่
กันตอๆ ไปจนครบ
reshape(A,m,n) จัด matrix A ใหมใหมีขนาดเปน [m x n] โดย element ของ matrix A เดิม
ตองมีจํานวนเทากับ mn ดวย และ MATLAB จะพิจารณาเพิ่มหรือลด
ขนาดไปทีละ column ของ A
Basic Operation 36
diag(x) ถา x เปน matrix จะไดผลเปน vector ที่มี main diagonal ของ x เปน
element ถา x เปน vector จะไดผลเปน matrix ที่มี vector A เปน diagonal
triu(A) สราง square matrix จาก matrix A โดยตัดสวนที่อยูต่ากวา main diagonal
ของ A ใหเปนศูนย
triu(A,k) สราง square matrix จาก matrix A โดยตัดสวนที่ตํากวา diagonal ที่ k ของ
A ใหเปนศูนย
tril(A) สราง square matrix จาก matrix A โดยตัดสวนที่อยูสูงกวา main diagonal
ของ A ใหเปนศูนย
tril(A,k) สราง square matrix จาก matrix A โดยตัดสวนที่อยูสูงกวา diagonal ที่ k
ของ A ใหเปนศูนย
ตัวอยางเชนกําหนดให
A=[1 2 3;0 2 4;3 6 8]
A =
1 2 3
0 2 4
3 6 8
rot90(A)
ans =
3 4 8
2 2 6
1 0 3
tril(A)
ans =
1 0 0
0 2 0
3 6 8
triu(A,2)
ans =
0 0 3
0 0 0
0 0 0
diag(A)
ans =
1
2
8
flipud(A)
ans =
3 6 8
0 2 4
1 2 3
Basic Operation 37
2.4 Multidimensional Arrays
ตามที่กลาวมาแลววาเดิมนั้น MATLAB จะจํากัดตัวแปรอยูในลักษณะ 2 มิติ แตสําหรับ MATLAB
version 5 ขึ้นไปจะสามารถจํากัดตัวแปรใหมีมิติมากกวา 2 ได ยกตัวอยางเชนเรามีตัวแปรที่เปน Matrix 2
มิติดังนี้
x=[1 3 5; 4 2 8]
x =
1 3 5
4 2 8
y=[7 1 4;2 0 1]
y =
7 1 4
2 0 1
z=[4 2 1;3 6 9]
z =
4 2 1
3 6 9
จากนั้นเราตองการที่จะรวมตัวแปรทั้ง 3 นี้ใหเปนตัวแปรเดียวกัน นั่นคือตองมีการสรางมิติที่ 3
ขึ้นมาสําหรับตัวแปรตัวนี้ ตัวแปรที่มี 3 มิตินี้สามารถจิตนาการไดวา เหมือนกับการที่เรานําตัวแปร x, y,
z มาเขียนไวบนกระดาษแตละหนาจากนั้นเย็บกระดาษทั้งสามหนาเขาดวยกัน การที่จะบอกตําแหนง
ของคาใดคาหนึ่งจะตองบอกใหชัดเจนวาอยูที่หนาใด row ใด และ column ใด ซึ่งจะเปนการบอกทั้งสาม
มิตินั่นเอง สวนตัวแปรที่มีมิติมากกวานี้ก็สามารถที่จะสรางไดเชนกัน สําหรับการรวบรวมหรือเรียงตอ
(concatenates) ตัวแปรทั้งสามที่กลาวมาแลวก็สามารถทําไดโดยใชคําสั่ง cat ดังนี้
d=cat(3,x,y,z)
d(:,:,1)=
1 3 5
4 2 8
d(:,:,2)=
7 1 4
2 0 1
d(:,:,3)=
4 2 1
3 6 9
size(d)
ans =
2 3 3
ซึ่งจากเดิมที่ x, y, z มีมิติเปน 2 x 3 เราจะได d มีขนาดเปน 2 x 3 x 3 สําหรับรายระเอียดของการใช cat มี
ดังนี้
Cat(dims,A1,A2,A3,...)
Basic Operation 38
เปนการเรียง matrix A1, A2, A3,... ซึ่งเปน matrix ซึ่งมีขนาดเทากัน
รวบรวมเขาไวดวยกันทั้งหมดจํานวน dims matrix
สําหรับคําสั่งที่ใชกับ Multi-dimensional Array มีดังนี้
ndim(A) จะใหคําตอบเปนจํานวน dimension ของ A
B = permute(A,order) การสลับจัดเรียงตัวแปร A ใหมใหเปน B ซึ่งมี order ตามที่ตองการ
โดย order เปน vector ที่กําหนดขนาดของ B และตัวแปรที่กําหนด
ใหมจะตองมีจํานวน element เทากับตัวแปรเดิม
ipermute(A,order) ยอนกลับคําสั่ง permute(A, order)
shiftdim(A,n) ขามสลับ dimension ของ A ไปจํานวน n
B = squeeze(A) เปนการยาย dimension ที่เทากับ 1 ออกไป ซึ่งจะได B ซึ่งมี element
ทุกตัวเหมือน A แตมิติใดที่เทากับ 1 จะถูกกําจัดออกไป สําหรับ
คําสั่งนี้จะไมมีผลกระทบตอ matrix ดังนั้นหากใชคําสั่งนี้กับ vector
ก็จะไดผลออกมาเปน vector เชนเดิม
ตัวอยางของคําสั่งเหลานี้เชน
x=[1 3 5;4 2 8];
y=[7 1 4;2 0 1];
z=[4 2 1;3 6 9];
d=cat(3,x,y,z);
e = permute(d,[3 1 2])
e(:,:,1) =
1 4
7 2
4 3
e(:,:,2) =
3 2
1 0
2 6
e(:,:,3) =
5 8
4 1
1 9
f = ipermute(e,[3 1 2])
f(:,:,1) =
1 3 5
4 2 8
f(:,:,2) =
7 1 4
2 0 1
f(:,:,3) =
4 2 1
3 6 9
g=shiftdim(d,2)
g(:,:,1) =
1 4
7 2
Basic Operation 39
4 3
g(:,:,2) =
3 2
1 0
2 6
g(:,:,3) =
5 8
4 1
1 9
p=rand(2,1,4,3);
size(p)
ans =
2 1 4 3
p=squeeze(p);
size(p)
ans =
2 4 3
สําหรับการที่จะกําหนดเลือกคาตัวแปรที่ตําแหนงใดก็สามารถจะกําหนดไดโดยบอกตําแหนงที่
เราตองการ เชนตองการทราบคาที่ตําแหนง 1-1-3 ของตัวแปร g ตามตัวอยางขางบนจะใช
g(1,1,3)
ans =
5
2.5 Cell Arrays
สําหรับโครงสรางตัวแปรใหมอีกแบบหนึ่งของ MATLAB 5 ก็คือการที่มี cell array ซึ่งใน version
กอนหนานี้ แตละ element ของ matrix ตองเปนตัวเลขหรือตัวหนังสือเทานั้น สําหรับความหมายของ cell
array ก็คลายกับวาเปนการยอมใหในแตละ element ของ matrix เปน matrix ไดนั่นเอง
- การกําหนด Cell Arrays
การกําหนด cell arrays จะใชวงเล็บปกกา { } ซึ่งสามารถทําได 2 วิธีคือ
- กําหนดแบบ cell index
x(1,1)={[1 2;3 4]};
x(1,2)={5};
x(2,1)={linspace(0,10,10)};
x(2,2)={'Text Only'};
􀂾 กําหนดแบบ content addressing
x{1,1}=[1 2;3 4];
x{1,2}=5;
x{2,1}=linspace(0,10,10);
x{2,2}='Text Only';
ซึ่งทั้งสองแบบนี้จะใหผลเหมือนกันและสามารถที่จะใชแทนกันได จากตัวอยางขางบนเราได
สราง matrix x ซึ่งมีขนาด 2 x 2 โดยแตละ element จะมี cell ยอยลงไปอีก เชน x(1,1) จะเปน matrix ขนาด 2
x 2 ซอนอยูเปนตน หากเราตองการทราบคาและขนาดของ x ก็สามารถใชคําสั่ง
Basic Operation 40
x
x =
[2x2 double] [ 5]
[1x10 double] 'Text Only'
size(x)
ans =
2 2
และชนิดของ x สามารถทราบไดจาก
class(x)
ans =
cell
นั่นคือ x เปน cell arrays หากตองการทราบคาทั้งหมดที่บรรจุใน x ก็สามารถใชคําสั่ง celldisp ไดดังนี้
celldisp(x)
x{1,1} =
1 2
3 4
x{2,1} =
Columns 1 through 7
0 1.1111 2.2222 3.3333 4.4444 5.5556 6.6667
Columns 8 through 10
7.7778 8.8889 10.0000
x{1,2} =
5
x{2,2} =
Text Only
หรือหากตองการเจาะจง cell ก็สามารถกําหนดไดโดยใชวงเล็บปกกาเชน
x{1,2}
ans =
5
สําหรับการสราง cell array ตามแบบที่เคยสรางใน matrix แบบเดิมก็ยังคงสามารถกระทําได โดย
ใชเครื่องหมายปกกาแทนวงเล็บใหญสวนการแบง column ยังคงใช ; เหมือนเดิม เชน
y={[1 3; 5 6], [2 3; 5 7]; ['TOM';'TON'],[2+i 5+4i]}
y =
[2x2 double] [2x2 double]
[2x3 char ] [1x2 double]
ในการสราง cell array ที่วางเปลาสามารถทําไดโดยใชคําสั่ง cell เชน
Z=cell(2,2)
z =
[] []
[] []
􀁯 การรวม เปลี่ยนรูปและกําหนดคา Cell Array
Basic Operation 41
การรวมหรือเปลี่ยนรูป cell array ก็สามารถกระทําไดเหมือนการรวม matrix ปกติที่เราทําผานมา
เชนจากตัวแปรที่กําหนดในตัวอยางที่ผานมาคือ
x
x =
[2x2 double] [ 5]
[1x10 double] 'Text Only'
y
y =
[2x2 double] [2x2 double]
[2x3 char ] [1x2 double]
หากเราตองการรวมหรือเปลี่ยนรูปก็สามารถทําไดดังนี้
a=[x y]
a =
[2x2 double] [ 5] [2x2 double] [2x2 double]
[1x10 double] 'Text Only' [2x3 char ] [1x2 double]
b=[x;y]
b =
[2x2 double] [ 5]
[1x10 double] 'Text Only'
[2x2 double] [2x2 double]
[2x3 char ] [1x2 double]
หากตองการตัด matrix บางสวนก็สามารถใช colon operator ไดเชน
c=b(2:3,1)
c =
[1x10 double]
[2x2 double]
และหากตองการเปลี่ยนรูปก็สามารถใช คําสั่ง reshape ได เชน
c=reshape(b,2,4)
c =
[2x2 double] [2x2 double] [ 5] [2x2 double]
[1x10 double] [2x3 char ] 'Text Only' [1x2 double]
สําหรับการกําหนดคา หรือเขาเปลี่ยนแปลงคาใน cell array เราก็สามารถกระทําได โดย
- ถา cell นั้นเปนตัวแปรตัวเดียวหรือตองการทราบคาทั้งหมดใน cell นั้นก็สามารถกําหนดคา
โดยใชเครื่องหมายปกกาบอกตําแหนงได
- ถา cell นั้นเปน matrix ซอนอยูใหใชเครื่องหมายปกกากําหนดตําแหนง cell แลวตอดวย
วงเล็บกําหนดตําแหนงใน matrix นั้นอีกครั้งหนึ่ง
- ถาหากวาตองการทราบหรือกําหนดคาเปนชวงสามารถทําไดโดยใชคําสั่ง deal
Basic Operation 42
เชนจากตัวอยางขางบนถา
c
c =
[2x2 double] [2x2 double] [ 5] [2x2 double]
[1x10 double] [2x3 char ] 'Text Only' [1x2 double]
c{1,4}
ans =
2 3
5 7
c{1,4}(2,1)
ans =
5
[p q] = deal(c{1,2:3})
p =
1 3
5 6
q =
5
􀁰 Cell Array และ Character String
สําหรับ character string เดิมนั้นหากจะนํามารวมอยูใน matrix แลวขอที่ควรระวังก็คือ ทุกแถว
จะตองมีจํานวน column เทากันซึ่งในทางปฏิบัติที่เกี่ยวของกับตัวหนังสือแลวการทําเชนนั้นคอนขางที่จะ
ยุงยาก แตในกรณีของ MATLAB 5.x การใช cell arrays จะชวยใหเราสามารถบรรจุ character string ที่มีความ
ยาวตางกันลงไปอยูใน column เดียวกันของ cell ได ตัวอยางเชน
x={'Tom';'Pookie';'Tata';'Nut';'Christina';'Mai'}
x =
'Tom'
'Pookie'
'Tata'
'Nut'
'Christina'
'Mai'
class(x)
ans =
cell
size(x)
ans =
6 1
ซึ่งจะเห็นวาตัวแปร x เปน cell array ที่มี 6 row x 1 column และในแตละ row ไมจําเปนตองมีความ
ยาวเทากัน ซึ่งการปรับปรุงเชนนี้จะทําใหมีความสะดวกในการกรอกขอมูลมากขึ้นกว่าเดิมมาก
edit @ 2007/05/09 17:26:36
ชื่อ: 
เว็บไซต์: 
คอมเมนต์:




smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry
มีที่เปิดคอร์สสอนMATLAB บ้างมั้ยค่ะ จำเป็นต้องเรียนรู้อ่ะค่ะ ช่วยตอบกลับในเมล phloplay@hotmail.com ด้วยนะคะ ขอบคุณค่ะ
#1  by  ดาว (124.121.202.10) At 2007-11-20 20:28, 
sad smile love
#2  by   (203.158.118.14) At 2007-11-30 11:36, 
เปิดสอนรึป่าวค่ะ ถ้าเปิดช่วยโฆษนาด้วย
#3  by   (203.158.118.14) At 2007-11-30 11:38, 
thank you so much

,it's very helpful

^_^
#4  by  Goople (58.64.107.156) At 2008-09-14 22:36, 
อย่างงี้อ่ะนะ เรียกแนะนำ ยาวเป็นพรืดเลยคับ แค่ก็อบมาวางรึเปล่า
#5  by  บ้าป่ะ (203.131.209.37) At 2008-10-01 23:43, 
โหวววว...
แล้ว simulate ข้อมูลขึ้นมาได้มั๊ยคะ

???

>_<
#6  by  มินต์ (125.24.83.137) At 2008-10-18 13:06, 
อยากทราบว่า รับค่า 1234 เข้ามา
แล้วต้องหาค่า ให้มานเป็น 1+2+3+4 จะมีวิธีอย่างไรคับ ช่วยหน่อยคับ ขอบคุณครับ
#7  by  ช่วยหน่อยคับ (125.25.204.114) At 2008-10-25 17:40, 

<< Home