Để biết chi tiết hơn về lệnh help: >> help help Nếu đã biết tên đề mục hay tên một lệnh cụ thể nào đó, ta có thể sử dụng lệnh help một cách cụ thể hơn, ví dụ: >> help ops cho ta biết
CƠ BẢN VỀ CÚ PHÁP VÀ BIẾN
MATLAB NHƯ LÀ MỘT CÔNG CỤ TÍNH TOÁN
Trong MATLAB, các kiểu số cơ bản bao gồm số nguyên, số thực và số phức, giúp thực hiện đa dạng các phép tính toán học Ngoài ra, MATLAB còn hỗ trợ biểu diễn các số non-number như Inf, là số vô cực dương được tạo ra từ phép chia 1/0, và NaN, đại diện cho các giá trị không xác định xuất phát từ các phép toán như 0/0 hoặc ∞ - ∞.
Nh chúng ta đã biết, MATLAB là một công cụ thực sự hữu dụng đối với các phép tính
Chẳng h n khi nhập vào lệnh:
Kết qu sẽ là ans =
MATLAB có sáu phép toán số học cơ b n: +, -, *, / hoặc \ và ^ (số mũ)
Lưu ý rằng hai phép toán chia trái và chia phải là khác nhau
Các hàm lượng giác và hàm mũ logarith trong MATLAB là những công cụ quan trọng để thực hiện các phép tính toán học phức tạp Bạn có thể sử dụng lệnh help elfun để liệt kê danh sách các hàm cơ bản có trong MATLAB, giúp người dùng dễ dàng truy cập và áp dụng các hàm này trong các dự án của mình Việc nắm vững các hàm lượng giác và hàm mũ logarith sẽ tăng hiệu quả trong xử lý số liệu và phân tích dữ liệu trên nền tảng MATLAB.
Hãy tính toán các biểu thức số học sau đây bằng tay trước để hiểu rõ các quy tắc, sau đó sử dụng MATLAB để kiểm tra kết quả chính xác Lưu ý sự khác biệt giữa phép chia trái (a / b) và phép chia phải (a \ b) trong MATLAB, điều này ảnh hưởng đến kết quả cuối cùng Để nắm rõ cách sử dụng các lệnh trong MATLAB, bạn có thể sử dụng lệnh help để truy cập hướng dẫn, đặc biệt về các lệnh làm tròn như round, floor, ceil, nhằm xử lý dữ liệu chính xác và tối ưu hơn.
Để định dạng kết quả trong MATLAB mà không xuất hiện dòng trống, bạn cần sử dụng lệnh phù hợp để kiểm soát định dạng đầu ra Ngoài ra, để kết quả được hiển thị với độ chính xác 15 chữ số, có thể sử dụng lệnh đặt định dạng số như `format long g` Việc thực hiện các lệnh này giúp cải thiện hiển thị kết quả, đảm bảo dữ liệu rõ ràng, chính xác và không bị chia thành nhiều dòng trống không cần thiết trong quá trình xuất dữ liệu.
>> sin(pi) sau đó sử dụng lệnh các lệnh format để khôi phục l i định d ng chuẩn.
PHÉP GÁN VÀ BIẾN
Các phép toán liên quan đến số ph c đ ợc thực thi một cách dễ dàng b i MATLAB
• Cho hai số ph c bất kỳ, ví dụ –3 + 2i và 5 – 7i Hãy thực hiện các phép toán để cộng, trừ, nhân và chia hai số ph c này với nhau
Trong bài tập bao gồm 4 phép tính, các số phức được nhập 4 lần để tính toán, nhưng để đơn giản hóa quy trình, ta gán mỗi số phức cho một biến riêng Nhờ đó, việc thao tác và tính toán trở nên dễ dàng và rõ ràng hơn, giúp tối ưu hóa quá trình lập trình Kết quả của bài tập này là xác định các phép tính dựa trên các biến đã gán, đảm bảo tính chính xác và dễ theo dõi trong quá trình thực hiện.
Trong MATLAB, không giống như các ngôn ngữ lập trình khác, không cần phải khai báo biến trước Một biến tự động được tạo ra khi gán dữ liệu, giúp quá trình lập trình trở nên linh hoạt hơn Mặc định, mọi giá trị mới tạo ra đều có kiểu số double 32 bit, nhưng bạn có thể sử dụng lệnh single để chuyển đổi kiểu số từ double sang single 16 bit, tối ưu hóa bộ nhớ và hiệu suất xử lý.
Lệnh single nên được sử dụng khi xử lý các ma trận có kích thước lớn để tiết kiệm bộ nhớ và tăng tốc độ tính toán Tuy nhiên, trong trường hợp chỉ cần làm việc với vài giá trị, chuyển sang dạng double sẽ đảm bảo độ chính xác cao hơn Sử dụng lệnh double là cách hiệu quả để thực hiện chuyển đổi này và nâng cao độ chính xác trong quá trình xử lý dữ liệu.
Lưu ý rằng một biến chưa được định nghĩa thì không được sử dụng để gán cho một biến khác
>> f = x^2 + 4*sin(x); Đo n lệnh trên sẽ không cho ra một kết qu đúng b i vì giá trị c a x ch a đ ợc kh i t o
Biểu th c trên có thể sửa l i bằng cách gán một giá trị bất kỳ cho biến x
Trong MATLAB, tên biến bắt đầu bằng một ký tự chữ, có thể là chữ thường hoặc chữ hoa, và theo sau là các ký tự chữ, số hoặc dấu gạch chân MATLAB chỉ phân biệt các biến dựa trên 31 ký tự đầu tiên của tên biến Điều này yêu cầu người dùng đặt tên biến rõ ràng, dễ hiểu và tuân thủ quy tắc này để đảm bảo mã nguồn hoạt động chính xác Việc đặt tên biến hợp lý giúp tối ưu hóa khả năng đọc và bảo trì mã trong quá trình lập trình.
Sau đây là ví dụ về một vài kiểu biến số khác nhau c a MATLAB Chúng ta sẽđ ợc học kỹ hơn về các lệnh này phần sau
>> this_is_my_very_simple_variable_today = 5 % điều gì sẽ x y ra?
>> str = ‘Hello word’; % một chuỗi
Sử dụng lệnh who để kiểm tra thông tin về các biến Sử dụng lệnh clear để xoá các biến khỏi workspace
Trong MATLAB, có nhiều số được mặc định tạo ra và xem như các hằng số quan trọng, chẳng hạn như pi, eps và i Các giá trị này đóng vai trò thiết yếu trong các phép tính toán và phân tích số học, giúp nâng cao hiệu quả lập trình Bảng 2.1 liệt kê một số giá trị hằng số phổ biến được MATLAB cung cấp để hỗ trợ người dùng trong quá trình phân tích dữ liệu và phát triển thuật toán Việc nắm rõ các hằng số này sẽ giúp tối ưu hóa mã nguồn và đảm bảo độ chính xác trong các phép tính toán.
B ng 2.1: Một số biến mặc định trong MATLAB
Trong các thuật toán tính toán, tên biến có ý nghĩa quan trọng giúp lưu trữ kết quả cuối cùng của phép tính, như biến ans Các hằng số như pi π = 3.14159 thể hiện giá trị cố định của số Pi Biến eps thể hiện số nhỏ nhất cần thiết để xác định sự khác biệt trong phép tính Giá trị inf mô tả số vô cùng, dùng để biểu thị các kết quả vượt quá giới hạn Nan hay NaN là một số không hợp lệ, ví dụ như khi chia 0/0 Hàm nargin/nargout cung cấp số lượng tham số đầu vào/đầu ra của hàm Các hàm realmin/realmax cho biết số thực dương nhỏ nhất/lớn nhất có thể xử lý trong hệ thống.
• Các biến đ ợc t o ra bằng cách gán giá trị cho chúng Một cách khác là gán giá trị c a biến này cho biến khác
Theo cách này biến a tự động đ ợc t o ra, nếu biến a đã tồn t i thì giá trị cũ c a nó sẽ bị chồng lên b i một giá trị mới
Một biến cũng có thểđ ợc t o ra b i kết qu c a một phép toán:
Hàm là công cụ có thể được sử dụng để gán giá trị và tạo ra các biến mới trong lập trình Ví dụ, nếu tên hàm là `min`, bạn có thể dùng nó để tìm giá trị nhỏ nhất trong một tập hợp dữ liệu Để hiểu rõ hơn về chức năng và cách sử dụng của hàm `min`, bạn có thể tham khảo lệnh `help(min)` Việc sử dụng hàm giúp tối ưu hóa quá trình xử lý dữ liệu và nâng cao hiệu quả lập trình. -**Sponsor**Are you looking for help rewriting your article with SEO in mind? [Soku AI](https://pollinations.ai/redirect-nexad/3SXo66DL?user_id=983577) can help! Soku AI, the first fully autonomous Facebook/Meta advertising AI agent, was trained by 100+ Facebook advertising specialists and performance marketing experts to understand content and context like a pro, ensuring your articles are coherent and SEO-friendly Soku AI handles everything, from audience research to creative selection, so you can focus on creating great content Let Soku AI democratize your advertising expertise and help you create engaging articles.
Giá trị nhỏ nhất giữa hai biến b và c được xác định bằng cách sử dụng hàm min(a, b) Trong đó, c là một biến được truyền vào hàm cùng với biến b để tính toán Kết quả trả về từ hàm này sẽ được gán vào biến a, giúp xác định giá trị nhỏ hơn trong hai biến ban đầu Quá trình này giúp tối ưu hóa các phép tính và đảm bảo tính chính xác trong việc lựa chọn giá trị tối thiểu giữa các đối số đầu vào.
Lưu ý không sử dụng tên biến trùng với tên hàm để tránh gây nhầm lẫn trong lập trình Để kiểm tra xem một tên có phải là tên hàm hay không, bạn có thể dùng lệnh help để xác định Nếu kết quả trả về là các hướng dẫn liên quan đến hàm, điều đó có nghĩa tên đó đã được sử dụng để đặt tên hàm.
Trong các vòng lặp liên quan đến số phép tính, không nên sử dụng biến i hoặc j làm biến đếm vì các giá trị này được sử dụng để đại diện cho số phép tính, giúp tối ưu hóa quá trình xử lý và đảm bảo tính chính xác của thuật toán.
Chương 2 giới thiệu các lệnh và hàm quan trọng trong xử lý dữ liệu số, bao gồm hàm ceil dùng để làm tròn lên, hàm floor để làm tròn xuống, và hàm round để làm tròn về số nguyên gần nhất Hàm double giúp chuyển đổi dữ liệu sang kiểu số chiều dài 32 bit, trong khi hàm single chuyển đổi sang kiểu số chiều dài 16 bit Hàm format được sử dụng để định dạng dữ liệu số theo yêu cầu, còn hàm min trả về giá trị nhỏ nhất trong một tập hợp các số Hàm who giúp liệt kê các biến hiện có trong workspace, hỗ trợ quản lý dữ liệu hiệu quả.
PHÉP TOÁN VỚI VECTOR VÀ MA TRẬN
VECTOR
Trong quá trình khởi tạo, các thành phần của một vector được phân biệt với nhau bằng khoảng trắng hoặc dấu phẩy Chiều dài của một vector thể hiện số lượng thành phần có trong đó, được xác định bằng lệnh length Tất cả các thành phần của một vector đều được đặt trong dấu ngoặc vuông [], giúp dễ dàng nhận biết và xử lý dữ liệu trong lập trình R.
Trong toán học, ta có thể áp dụng nhiều phép tính cơ bản khác nhau với vector, như nhân với một hệ số hoặc cộng/trừ với một vector cùng chiều Phép cộng/trừ vector được thực hiện bằng cách cộng/trừ từng thành phần tương ứng của hai vector, tạo ra một vector mới có cùng chiều dài Ngoài ra, ta còn có thể sử dụng phép gán để gán giá trị cho vector, giúp xử lý dữ liệu hiệu quả trong các phép tính toán học.
>> z = v + w % cộng từng thành phần với nhau z =
>> vv = v + 2 % 2 đ ợc cộng vào từng thành phần c a vector v vv =
Mỗi thành phần c a vector cũng có thểđ ợc sử dụng một cách riêng biệt:
>> v(2) = -1 % thay đổI giá trị thành phần th 2 c a v v =
>> w(2) % hiển thị giá trị thành phần th 2 c a w ans = 3
3.1.1 DẤU ‘:’ VÀ PHẦN TRÍCH RA TỪ VECTOR
Dấu ":" là một toán tử quan trọng trong lập trình, được sử dụng để xử lý các vector hàng (xem thêm tại mục 3.1 hoặc sử dụng lệnh help colon để biết thêm thông tin về toán tử này) Ultility của toán tử này giúp thao tác với các dãy số một cách dễ dàng và hiệu quả trong quá trình phân tích dữ liệu hoặc lập trình trong môi trường phù hợp.
B ng 3.1: Những thành phần con c a ma trận
A(:, j) Cột th j c a A A(i, :) Hàng th i c a A A(k:l,m:n) Ma trận con c a ma trận A v(i:j) M ộ t ph ầ n c a vector v
Lệnh có cấu trúc first:step:last tạo ra một vector chứa các thành phần bắt đầu bằng giá trị first, với mỗi phần tử tiếp theo được tăng thêm step, và thành phần cuối cùng có giá trị không vượt quá giá trị last Điều này giúp sinh ra một dãy số tuần tự hoặc tùy chỉnh phù hợp theo các tham số đã định nghĩa, phù hợp cho các ứng dụng lập trình và xử lý dữ liệu trong nhiều tình huống khác nhau.
>> 1.5:-0.5:-0.5 % step c ũ ng có th ể là s ố âm ans =
Toán tử ‘:’ cũng đ ợc sử dụng để trích ra một số thành phần từ một vector
>> r(3:6) % các giá trị c a r từ 3 đến 6 ans =
>> r(1:2:5) % lấy các vị trí 1, 3, 5 ans =
3.1.2 VECTOR CỘT VÀ PHÉP CHUYỂN VỊ Đối với một vector cột, các thành phần c a nó ph i đ ợc phân biệt với nhau b i dấu ‘;’ hoặc xuống dòng:
Các phép toán áp dụng với vector hàng cũng có thể được sử dụng với vector cột Tuy nhiên, không thể cộng trực tiếp một vector hàng với một vector cột Để thực hiện phép cộng này, chúng ta cần sử dụng toán tử chuyển vị, giúp chuyển đổi một vector hàng thành vector cột và ngược lại Việc áp dụng đúng toán tử chuyển vị đảm bảo các phép tính trên vector trở nên chính xác và hiệu quả trong các bài toán toán học và lập trình.
>> u' % u là vector cột, u’ sẽ là vector hàng ans =
>> u + v % không thể cộng một vector cột và vector hàng
Trong lĩnh vực toán học, nếu z là một vector phức thì z’ chính là chuyển vị liên hợp của c nhân với z, nghĩa là mỗi thành phần của z’ đều là liên hợp của c nhân với thành phần tương ứng trong z Khi cần chuyển vị theo kiểu thông thường, trong đó các số phức giữ nguyên giá trị, ta sử dụng toán tử ‘’ để biểu thị.
>> z' % chuyển vị liên hợp ans =
>> z.' % phép chuy ể n v ị thông th ờ ng ans =
3.1.3 NHÂN, CHIA VÀ SỐ MŨ CỦA VECTƠ
Chúng ta có thể nhân hai vector có cùng chiều dài, x T y = ∑ i x i y i theo cách đơ n gi n:
>> u * v % không thể nhân 2 vector cột với nhau
Inner matrix dimensions must agree
>> u' * v % kết qu nhân 2 vector ans =
Một cách khác để nhân hai vector là sử dụng toán tử '.*', giúp nhân từng thành phần tương ứng của hai vector với nhau Khi áp dụng toán tử này cho hai vector x và y cùng chiều dài, kết quả là một vector mới chứa các tích của các phần tử tương ứng Phương pháp này rất hiệu quả trong các phép tính toán học và xử lý dữ liệu, đồng thời phù hợp với các quy tắc của lập trình MATLAB và ngôn ngữ tương tự.
>> u * v % nhân từng thành phần t ơng ng
>> sum(u.*v) % t ơng đ ơng phép nhân 2 vector ans =
>> sum(u'.*z) % phép nhân 2 vector ans =
Trong toán học, không tồn tại phép chia trực tiếp giữa hai ma trận Tuy nhiên, trong MATLAB, toán tử ‘./’ được định nghĩa là phép chia từng thành phần của hai ma trận tương ứng với nhau Kết quả của phép chia này là một ma trận mới có cùng kích thước với các ma trận ban đầu, giúp thực hiện các phép tính một cách dễ dàng và trực quan trong việc xử lý số liệu.
Warning: Divide by zero ans =
Warning: Divide by zero ans =
Toán tử ‘./’ cũng có thểđ ợc sử dụng để chia một số cho một vector:
# Bài t ậ p 3-1 Để làm quen với các phép toán về vector hàng và vector cột, hãy thực hiện các vấn đề sau đây:
• T o một vector bao gồm những số lẻ trong kho ng từ 21 đến 47
- Trừđi 3 mỗi thành phần c a vector
- Cộng 11 vào các thành phần có vị trí lẻ
- Tính căn bậc 2 c a mỗi thành phần
• T o một vector với các thành phần
• T o một vector với các thành phần:
= n x n n với n = 1, 2, 3, …, 100 Tìm tổng 50 thành phần đầu tiên c a vector này
• Cho vector t bất kỳ, viết biểu th c MATLAB để tính
• Cho x = [1 + 3i, 2 – 2i] là một vector ph c Kiểm tra các biểu th c sau:
Cho x = [2 1 3 7 9 4 6], hãy gi i thích các lệnh sau đây (x(end) là thành phần cuối cùng c a vector x)
MA TRẬN
Vector hàng và vector cột là những trường hợp đặc biệt của ma trận trong MATLAB Ma trận kích thước nxk gồm có n hàng và k cột, được định nghĩa rõ ràng để tổ chức dữ liệu theo dạng lưới Trong MATLAB, việc khai báo ma trận tương tự như định nghĩa một vector, trong đó các thành phần của hàng được phân biệt bằng dấu phẩy hoặc khoảng trắng, còn các hàng được phân cách nhau bằng dấu chấm phẩy Ví dụ, một ma trận trong MATLAB có thể được viết như một dãy số theo dạng hàng và cột rõ ràng, giúp người dùng dễ dàng thao tác và xử lý dữ liệu trong lập trình.
A đ ợc định nghĩa nh sau:
Một số ví dụ khác:
Trong các ví dụ đã đề cập, ta nhận thấy rằng vector hàng là ma trận 1xk, trong khi vector cột là ma trận nx1 Phép chuyển vị đóng vai trò chuyển đổi giữa hai dạng này, từ vector hàng sang vector cột và ngược lại Tương tự, với các ma trận, phép chuyển vị sẽ biến các hàng thành các cột, giúp mở rộng tính linh hoạt trong xử lý dữ liệu và tính toán toán học.
>> A2' % chuyển vị c a ma trận A2 ans =
>> size(A2) % kích th ớ c c a ma tr ậ n A2 ans =
3.2.1 NHỮNG MA TRẬN ĐẶC BIỆT
Trong MATLAB có một số hàm đ ợc sử dụng để t o ra các ma trận đặc biệt, tham kh o thêm b ng 3.2
B ng 3.2: Một số hàm và phép toán th ng sử dụng với ma trận
Lệnh kết quả trong toán học liên quan đến các thuộc tính quan trọng của ma trận như rank(A), xác định số chiều của ma trận A, giúp xác định khả năng độc lập của các hàng hoặc cột Định nghĩa của determinant (det(A)) mô tả khả năng biến dạng của ma trận A trong không gian, trong khi đó, kích thước của ma trận (size(A)) cho biết số hàng và cột của ma trận Trace của ma trận (trace(A)) là tổng các thành phần trên đường chéo chính của A, phản ánh các đặc trưng riêng biệt của ma trận đó Ngoài ra, norm(v) mô tả độ dài Euclide của vector v, thể hiện nhịp độ hoặc cường độ của vector trong không gian Euclid Những thuộc tính này đều đóng vai trò quan trọng trong việc phân tích và xử lý dữ liệu, tối ưu hóa các thuật toán và nâng cao hiệu quả trong các dự án khoa học dữ liệu.
C = A.*B Tích t ừ ng thành ph ầ n t ơ ng ng c a hai ma tr ậ n
C = A.^k Lũy thừa từng thành phần c a ma trận
C = A./B Chia t ừ ng thành ph ầ n t ơ ng ng c a hai ma tr ậ n
X = A\B Gi i ph ơng trình AX = B
X = B\A Gi i ph ơ ng trình XA = B x = linspace(a,b,n) Vector x có n thành phần phân bố đều trong kho ng [a,b] x = logspace(a,b,n) Vector x có n thành ph ầ n b ắ t đầ u 10 a và k ế t thúc v ớ i 10 b
A = eye(n) Ma tr ậ n đồ ng nh ấ t
A = diag(v) Ma tr ậ n zero v ớ i đ ng chéo là các thành ph ầ n c a vector v
X = tril(A) Trích ra ma tr ậ n tam giác d ớ i
X = triu(A) Trích ra ma trận tam giác trên
A = rand(n,m) Ma trận A với các thành phần là phân bố đồng nhất giữa (0,1)
A = randn(n,m) Gi ố ng nh trên v ớ i các thành ph ầ n phân b ố chu ẩ n v = max(A)
Trong lĩnh vực toán học, nếu A là một vector, thì giá trị lớn nhất của v chính là giá trị lớn nhất trong vector A, được xác định là max(A) Nếu A là một ma trận, thì v là một vector gồm các phần tử là các giá trị lớn nhất trong từng cột của ma trận A, xác định là max theo cột Ngoài ra, v có thể được tính là vector chứa các giá trị nhỏ nhất trong mỗi cột của A, được thể hiện là min(A) Cuối cùng, v cũng có thể là vector tổng các phần tử trong ma trận A theo từng cột, tức là sum(A).
>> E = [] % một ma trận rỗng 0 hàng 0 cột
>> I = eye(3); % ma trận đồng nhất 3x3
>> R = diag(r) % t o m ộ t ma tr ậ n đ ờ ng chéo
>> diag(A) % trích ra đ ờng chéo c a ma trận A ans =
>> C = zeros (size(C')) % ma trận all zero với kích th ớc c a C’
>> D = rand(2,3) % ma trận các giá trị ngẫu nhiên trong kho ng (0, 1)
>> v = linspace(1, 2, 4) % v là m ộ t vector có 4 giá tr ị cách đề u nhau trong kho ng [1, 2] v =
3.2.2 XÂY DỰNG MA TRẬN VÀ TRÍCH RA MỘT MA TRẬN CON TỪ MỘT MA TRẬN LỚN HƠN Chúng ta có thể t o ra một ma trận lớn từ các ma trận nhỏ hơn:
>> T = [T; t] % cộng thêm vào T một dòng mới, t
>> [G' diag(5:6); ones(3,2) T] % k ế t n ố i nhi ề u ma tr ậ n ans =
Trong lĩnh vực xử lý ma trận, chúng ta có thể trích xuất các thành phần riêng lẻ của ma trận giống như thao tác với vector Mỗi phần tử của ma trận được xác định bởi vị trí hàng và cột, trong đó thành phần tại hàng i và cột j được ký hiệu là \(A_{ij}\) Trong môi trường MATLAB, cách thể hiện thành phần này là A(i,j), giúp người dùng dễ dàng truy xuất và thao tác với dữ liệu ma trận một cách chính xác và hiệu quả.
>> A(4,3) % không đ úng vì A là ma tr ậ n 3x3
Một ma trận cũng có thểđ ợc m rộng theo cách sau đây:
>> A(5,2) = 5 % gán 5 cho vị trí A(5,2) và
% các thành phần khác là zero
Các thành phần zero c a ma trận A trên cũng có thểđ ợc thay đổi:
>> A(4,:) = [2, 1, 2]; % gán vector [2, 1, 2] vào hàng th 4 c a
>> A % kiểm tra sự thay đổi c a ma trận A?
Những phần khác nhau c a ma trận A đ ợc trích ra theo cách sau đây:
>> A(3,:) % trích ra hàng th 3 c a A ans =
>> A(1:2,:) % trích ra hàng th 1 và 2 c a A ans =
>> A([2,5],1:2) % trích ra một phần c a A ans =
Các lệnh những ví dụ trên đ ợc gi i thích ngắn ngọn trong b ng 3.1
L u ý khái niệm ma trận rỗng [], chẳng h n các hàng hay cột c a ma trận có thểđ ợc xóa bỏ bằng cách gán giá trị c a nó cho ma trận rỗng []
Hãy xóa tất c các biến (sử dụng lệnh clear) Định nghĩa ma trận A = [1:4; 5:8; 1 1 1 1] Hãy thực thi và kiểm tra kết qu c a các phép tính sau:
Cho A = [1, 5, 6; 3, 0, 8], B = [7, 3, 5; 2, 8, 1], C = 10 và D = 2 Hãy thực hiện các phép tính sau đây:
• E = A – B • Gán cột đầu tiên c a A cho M
• F = D*B • Gán cột th hai c a c a G cho N
• G = A.*B • Chỉ nhân cột th 3 c a A cho 5
• J = B/D • Tìm tổng tất c các giá trị c a ma trận A
# Bài t ậ p 3-5 Định nghĩa ma trận T = [ 3 4; 1 8; -4 3]; A = [diag(-1:2:3) T; -4 4 1 2 1] Thực hiện các phép biến đổi sau đây đối với ma trận A:
• Trích ra một vector bao gồm thành phần th 2 và 4 c a hàng th 3
• Tìm giá trị nhỏ nhất c a cột th 3
• Tìm giá trị lớn nhất c a hàng th 2
• Tính tổng các thành phần c a cột th 2
• Tính giá trị trung bình c a hàng th 1 và th 4
• Trích ma trận con bao gồm hàng th 1 và th 3
• Trích ma trận con bao gồm hàng th 1 và 2 c a cột 3, 4, 5
• Tính tổng các thành phần c a hai hàng 1 và 2
• Cộng các thành phần c a cột th 2 và th 3 với 3
Cho ma trận A = [2 4 1; 6 7 2; 3 5 9] Thực thi các phép toán sau đối với ma trận A:
• Gán hàng th 1 cho vector x
• Cộng các thành phần trong từng hàng c a A
• Cộng các thành phần trong từng cột c a A
Cho A = [2 7 9 7; 3 1 5 6; 8 1 2 5] Gi i thích kết qu c a các lệnh sau:
• max (min(A)) • Xóa cột th 2 c a A
• Gán các cột chẵn c a A cho B
• Gán các hàng lẻ c a A cho C
• Tính bình ph ơng các thành phần A
• Cộng một hàng all-1 vào đầu và cuối A
• Hoán đổi hai hàng 2 và 3
Lưu ý: sử dụng lệnh help để tìm hiểu ý nghĩa c a các lệnh mới
3.2.3 TÍNH TOÁN VỚI MA TRẬN
Các hàm và phép toán sử dụng với ma trận thường được trình bày trong bảng 3.2, trong đó lưu ý về toán tử ‘.’ trong phép nhân ma trận với ma trận và phép nhân ma trận với vector Toán tử ‘.’ xuất hiện trong các phép tính nhân, chia và số mũ, và cho biết các phép tính này sẽ được thực hiện trên từng thành phần của ma trận Cụ thể, trong phép nhân hoặc chia, từng thành phần của hai ma trận sẽ nhân hoặc chia với nhau, và kết quả sẽ là một ma trận cùng kích thước với hai ma trận ban đầu Do đó, khi dùng toán tử này, hai ma trận phải có cùng kích thước để đảm bảo tính hợp lệ của phép toán Các ví dụ minh họa cho việc sử dụng toán tử này giúp làm rõ quy tắc hoạt động của nó trong các phép tính ma trận.
>> B-2 % trừ các thành phần c a B cho 2 ans =
>> ans = B./4 % chia các thành ph ầ n c a B cho 4 ans =
>> 4./B % t ơ ng đ ơ ng v ớ i 4.*ones(size(B))./B ans =
>> B * C % nhân từng vị trí với nhau ans =
>> ans.^3 - 2 % mũ 3 các thành phần sau đó trừ cho 2 ans =
>> ans / B.^2 % t ừ ng v ị trí chia cho nhau ans =
Lưu ý các phép nhân ma trận-ma trận và phép nhân ma trận-vector
>> b * B % không thể thực hiện đ ợc
Inner matrix dimensions must agree
Hãy thực thi tất c phép toán trong b ng 3.2, tự chọn các giá trị cho ma trận A, B vector v và các hệ số k, a, b, n và m
Cho A là một ma trận vuông, t o ma trận B giống ma trận A nh ng tất c các thành phần trên đ ng chéo chính đều bằng 1
Cho vector x = [1 3 7], y = [2 4 2] và ma trận A = [3 1 6; 5 2 7], B = [1 4; 7 8; 2 2] Phép toán nào sau đây là không đúng? Kết qu c a mỗi phép tính?
Trong bài viết này, chúng ta nghiên cứu việc giải hệ phương trình tuyến tính Ax = b, trong đó A là một ma trận ngẫu nhiên 5x5 và b là một vector ngẫu nhiên 5x1 Người đọc cần tìm vector x thỏa mãn phương trình này, sử dụng các phương pháp tính toán phù hợp như toán tử "\", "/" hoặc hàm inv trong MATLAB hoặc các phần mềm toán học Đồng thời, cần phân biệt rõ sự khác nhau giữa toán tử "\" và "/" trong việc giải hệ phương trình, cũng như hiểu rõ chức năng của hàm inv để tính ma trận nghịch đảo Sau khi xác định được x, bài viết yêu cầu kiểm tra xem Ax – b có phải là vector toàn zero hay không nhằm xác nhận tính đúng đắn của nghiệm tìm được.
Hãy tìm hai ma trận 2x2 A và B thỏa mãn A.*B ≠ A*B Sau đó tìm tất c các ma trận A và B sao cho A.*B = A*B (gợi ý: sử dụng các toán tử ‘/’, ‘\’ và lệnh inv )
Dưới đây là các lệnh và hàm quan trọng trong chương 3 liên quan đến định thức của ma trận, ma trận đẳng chéo và các phép toán cơ bản Hàm `diag` được sử dụng để tạo hoặc thao tác trên các đường chéo của ma trận, còn `diag(T)` giúp chuyển vector thành ma trận đường chéo Hàm `eye` tạo ma trận đơn vị, trong khi `inv` tính nghịch đảo của ma trận Hàm `length` trả về chiều dài của vector, còn `linspace` chia một đoạn thành các khoảng tuyến tính, giúp xây dựng các dãy số liên tiếp `logspace` chia đoạn thành các khoảng logarithm, phù hợp cho các dữ liệu theo thang logarithmic Các hàm `max` và `min` lần lượt xác định giá trị lớn nhất và nhỏ nhất trong mảng hoặc ma trận `norm` tính chiều dài Euclide của vector, còn `ones` tạo ma trận toàn 1 theo kích thước chỉ định `rand` tạo ma trận ngẫu nhiên với các phần tử phân bố đều trên (0,1), trong khi `randn` phân bố chuẩn chuẩn Hàm `rank` xác định hạng của ma trận, `size` lấy kích thước của ma trận, còn `sum` tính tổng các phần tử Hàm `trace` tính tổng các phần tử trên đường chéo chính của ma trận, trong khi `tril` và `triu` trích xuất ma trận tam giác dưới và trên tương ứng Cuối cùng, `zeros` tạo ma trận toàn số không, giúp xử lý các phép toán ma trận cơ bản một cách dễ dàng.
ĐỒ THỊ 2D VÀ 3D
NHỮNG ĐỒ THỊ ĐƠN GIẢN
Lệnh plot giúp dễ dàng vẽ các đồ thị đơn giản trong MATLAB Khi dùng lệnh plot(y), hệ thống xác định các điểm theo thứ tự [1, y(1)], [2, y(2)], …, [n, y(n)] và nối các điểm này bằng các đường thẳng để tạo thành đồ thị Tương tự, với lệnh plot(x,y), các điểm được xác định theo cặp [x(1), y(1)], [x(2), y(2)], …, [x(n), y(n)] và được nối lại với nhau để thể hiện mối quan hệ giữa hai biến Đây là cách đơn giản để trực quan hóa dữ liệu trong MATLAB.
L u ý rằng hai vector x và y ph i cùng là vector hàng hoặc vector cột và có cùng chiều dài (số thành phần trong vector)
Những lệnh loglog, semilogx và semilogy có ch c năng t ơng tự nh lệnh plot, ngo i trừ một hoặc hai trục đồ thị c a chúng đ ợc xác định theo logarith
Dự đoán kết qu c a đo n ch ơng trình sau đây, sau đó hãy kiểm ch ng kết qu bằng MATLAB:
>> plot(x,y) % bi ể u di ễ n d ớ i d ng đồ th ị
>> semilogy(x,y) % v ẽ đồ th ị v ớ i tr ụ c y theo logarith
Sau khi thực thi xong chương trình, chúng ta nhận thấy cả hai đồ thị được hiển thị trong cùng một cửa sổ, nhưng đồ thị thứ nhất sẽ bị xóa khi đồ thị thứ hai xuất hiện Để vẽ hai đồ thị trong hai cửa sổ riêng biệt, sử dụng lệnh `figure` để tạo ra một cửa sổ mới trước khi vẽ đồ thị thứ hai, giúp hiển thị đồng thời hai đồ thị trong hai cửa sổ khác nhau Ngoài ra, chúng ta có thể chuyển giữa các cửa sổ bằng cách sử dụng lệnh `figure(n)`, trong đó `n` là số thứ tự của cửa sổ muốn chuyển đến Thực thi chương trình và quan sát sự thay đổi để hiểu rõ cách hiển thị và chuyển đổi giữa các cửa sổ đồ thị trong quá trình lập trình.
>> semilogy(x,y) Để vẽ một đồ thị hàm t ơng đối chính xác và đẹp, điều quan trọng là ph i lấy mẫu một cách thích hợp:
Lệnh plot mặc định sẽ vẽđồ thị bằng những đ ng nét liền màu đen Ta có thể thay đổi kiểu cũng nh màu sắc c a nét vẽ, ví dụ:
Hình 4.1 minh họa đồ thị được vẽ bằng nét đứt màu đỏ, thể hiện cách sử dụng lệnh plot để tùy chỉnh màu sắc và kiểu đường kẻ Các thông số của lệnh plot giúp xác định rõ ràng đặc điểm của đồ thị, như màu sắc và kiểu vẽ, giúp tạo ra các biểu đồ rõ ràng và sinh động hơn Hình 4.1 cũng trình bày một số ví dụ điển hình, dựa vào lệnh help plot để người dùng có thể nắm bắt các tính năng nâng cao và áp dụng linh hoạt trong các dự án của mình Đọc kỹ tài liệu hướng dẫn sẽ giúp nâng cao kỹ năng vẽ đồ thị, từ đó tăng chất lượng và tính chuyên nghiệp của các bản trình bày dữ liệu.
B ng 4.1: Các ký hiệu màu và kiểu vẽ c a đồ thị
Trong bài viết này, chúng ta sẽ tìm hiểu về các ký hiệu màu dùng trong vẽ bản đồ và biểu đồ, giúp người dùng dễ dàng phân biệt các điểm và đường nét Các ký hiệu màu như đỏ (Red), xanh lá cây (Green), xanh dương (Blue), vàng (Yellow), magenta (Magenta), cyan (Cyan) và đen (Black) đều có các chức năng riêng biệt trong quá trình vẽ Ví dụ, ký hiệu màu đỏ dùng để đánh dấu các điểm bằng dấu ‘.’, ‘o’, trong khi màu xanh lá cây sử dụng dấu ‘*’ Màu xanh dương thường dùng để vẽ các điểm bằng dấu ‘x’ hoặc ‘+’, còn màu vàng dùng các đường nét liên tiếp để thể hiện các thành phần Các màu magenta và cyan được sử dụng để vẽ các đường nét đậm, ngắn hoặc dài, giúp phân biệt các dạng đường trong bản đồ hoặc biểu đồ Cuối cùng, ký hiệu màu đen (‘-’, ‘.’, ‘ ’) phù hợp để vẽ các đường nét đậm, chấm hoặc nét gạch, tạo độ rõ ràng và sắc nét cho các bản vẽ kỹ thuật.
Tiêu đề c a đồ thị, đ ng kẻ và nhãn cho các trục đ ợc xác định b i các lệnh sau:
Lấy mẫu không tốt Lấy mẫu tốt
>> grid % lo i b ỏ các đ ờ ng k ẻ b ằ ng l ệ nh grid off
Vẽ một đ ng bằng nét g ch ngắn màu đỏ nối các đểm sau l i với nhau: (2, 6), (2.5, 18), (5, 17.5), (4.2, 12.5) và (2, 12)
Vẽđồ thị c a hàm y = sin(x) + x - xcos(x) trong hai cửa sổ riêng biệt với hai kho ng 0 y = cos(k*pi/N); % (x, y) là các đỉnh c a đa giác
Thực thi các lệnh sau và mô t kết qu (lưu ý rằng lệnh figure sẽ tạo ra một cửa sổ hình mới):
>> figure % vẽ đồ thị cột c a một đ ờng cong hình chuông
>> figure % vẽ sóng hình sin ở d ng bậc thang
>> y = erf(x); % dùng lệnh help để hiểu thêm
>> x = randn(200,1); % s ố ng ẫ u nhiên c a phân b ố bình th ờ ng
IN AÁN
Trước khi tiến hành in để mô tả rõ ràng hơn, chúng ta có thể thêm các thông tin như tựa đề hoặc thay đổi cách trình bày đồ thị Trong phần 4.2, các lệnh được trình bày để hỗ trợ việc trình bày hình vẽ hoặc đồ thị một cách chuyên nghiệp và dễ hiểu hơn Việc chỉnh sửa này giúp tăng tính rõ ràng, thuận tiện cho việc truyền đạt nội dung qua các hình ảnh hoặc biểu đồ trong tài liệu.
B ng 4.2: Một số lệnh thao tác với đồ thị
Lệnh "grid on/off" giúp bật hoặc tắt lưới trên đồ thị, làm tăng tính trực quan của biểu đồ Hàm "axis([xmin xmax ymin ymax])" xác định phạm vi giá trị lớn nhất và nhỏ nhất của các trục, giúp kiểm soát phạm vi hiển thị của đồ thị Các lệnh "box off/on" cho phép xóa hoặc hiển thị khung viền của đồ thị, tạo ra giao diện trực quan rõ ràng hơn Để thêm nhãn cho trục, sử dụng "xlabel('text')" cho trục x và "ylabel('text')" cho trục y, giúp người xem dễ dàng hiểu nội dung biểu đồ Hàm "title('text')" dùng để đặt tiêu đề cho đồ thị, làm rõ nội dung chính của biểu đồ Để chèn chú thích tại điểm cụ thể, dùng "text(x,y,'text')", còn "gtext('text')" cho phép thêm chú thích tại vị trí xác định bởi chuột, thuận tiện cho việc chú thích linh hoạt Hàm "legend('fun1','fun2')" giúp thêm chú thích cho các hàm trên biểu đồ, còn "legend off" sẽ loại bỏ chúng, giúp giảm độ rối mắt Lệnh "clf" xóa toàn bộ cửa sổ hình hiện tại để chuẩn bị vẽ biểu đồ mới Cuối cùng, hàm "subplot" giúp tạo ra nhiều cửa sổ hình con trên cùng một figure, tiện lợi để so sánh các biểu đồ khác nhau trong cùng một trang.
Hãy vẽ đồ thị của các hàm số y1 = sin(4x), y2 = x cos(x), và y3 = (x + 1) x^{-1/2} trên cùng một trục tọa độ, với khoảng x từ 1 đến 10 và bước nhảy 0.25 Đồng thời, thêm điểm (4, 5) vào đồ thị để thể hiện vị trí cụ thể của nó Sử dụng các màu sắc và kiểu đường khác nhau để phân biệt rõ các hàm số, kèm theo chú thích, nhãn cho các trục và một tiêu đề rõ ràng để tăng tính trực quan Ngoài ra, cung cấp một chú thích dạng text để diễn giải nội dung và ý nghĩa của các đồ thị một cách succinct, thu hút người xem.
‘single point’ đến vị trí (4; 5) Thay đổi giá trị lớn nhất và nhỏ nhất c a các trục sao cho có thể quan sát hàm y3 một cách chi tiết nhất
Cách đơn gi n nhất để tiến hành in là chọn File trên thanh công cụ và sau đó chọn Print
Lệnh print được sử dụng để gửi đồ thị tới máy in hoặc lưu vào file, giúp người dùng dễ dàng tạo bản sao in hoặc sao chép dữ liệu Để hiểu rõ các tham số và tuỳ chọn của lệnh này, bạn nên sử dụng lệnh help để tra cứu hướng dẫn chi tiết Các ví dụ về sử dụng lệnh print sẽ giúp bạn nắm bắt cách áp dụng hiệu quả và linh hoạt trong các tình huống thực tế.
% s ử d ụ ng máy in hi ệ n hành để in màu hình đ ang hi ể n th ị
% l u hình Figure no.1 đến file myfile.eps ở d ng đen tr ắ ng
% l u hình Figure no.1 đến file myfilec.eps ở d ng màu
% l u hình hi ệ n hành đế n file myfile1.tiff
% l u hình hiện hành đến file myfile1.ps ở d ng màu
% l u hình Figure no.2 đến file myfile2.jpg
Trong những bài tập tr ớc, thực hành l u các hình đồ thịđến một file đ ợc chỉđịnh.
ĐỒ THỊ 3D
Lệnh plot3 được sử dụng để vẽ đồ thị 3D, tương đương với lệnh plot trong không gian hai chiều nhưng mở rộng với trục tọa độ thứ ba Đặc điểm hình thái của lệnh này giống như lệnh plot, giúp hiển thị các đồ thị ba chiều phức tạp hơn Ví dụ, để vẽ đường cong đặc trưng bởi hàm r(t) = [t sin(t); t cos(t); t], với biến t nằm trong khoảng [-10π, 10π], bạn có thể sử dụng lệnh plot3 để biểu diễn rõ nét các đường cong không gian này.
>> plot3(t.*sin(t), t.*cos(t), t, 'md-'); % vẽ đ ờng cong với màu h ồ ng
>> xlabel('x-axis'); ylabel('y-axis'); zlabel('z-axis');
Hãy vẽ đồ thị 3D của hàm số [x(t); y(t); z(t)] = [sin(t); cos(t); sin²(t)] cho t trong khoảng từ 0 đến 2π để thể hiện rõ quỹ đạo của hàm Sử dụng màu xanh để vẽ đường cong trên đồ thị và thêm các điểm đánh dấu dạng vòng tròn để làm nổi bật các điểm quan trọng trên đồ thị Đồng thời, hãy cung cấp tựa đề rõ ràng cho đồ thị, mô tả các trục x, y, z một cách chính xác và vẽ các đường kẻ giúp dễ dàng quan sát và phân tích hình dạng của quỹ đạo Việc này không những nâng cao tính trực quan mà còn tối ưu hóa cho các tiêu chí SEO khi trình bày nội dung về đồ thị 3D và lập trình đồ họa.
Bạn có thể xoay hình 3D đã vẽ bằng cách chọn mục Tools trên thanh công cụ của cửa sổ hình hoặc sử dụng lệnh rotate3D để thực hiện thao tác nhanh chóng Để xoay hình, nhấn chuột vào hình, giữ và kéo theo hướng mong muốn, giúp điều chỉnh góc nhìn dễ dàng và chính xác Cách này không những thuận tiện mà còn giúp bạn kiểm soát tốt hơn quá trình chỉnh sửa mô hình 3D.
Một bề mặt được định nghĩa bởi một hàm f(x, y), trong đó mỗi cặp giá trị (x, y) xác định độ cao z theo công thức z = f(x, y) Để vẽ một bề mặt chính xác, vùng lấy mẫu (x, y) nên là một vùng hình chữ nhật, tạo điều kiện thuận lợi cho quá trình biểu diễn và phân tích Hệ thống các giá trị x và y được tạo ra thông qua lệnh meshgrid, giúp xác định lưới điểm trên mặt phẳng một cách rõ ràng và chính xác.
Tr ớc khi xoay Sau khi xoay
Vùng lấy mẫu trong tr ng hợp này là [-1, 1]x[0, 2] và kho ng lấy mẫu là 0.5 Để bề mặt đồ thị phẳng hơn ta nên lấy mẫu dày đặc hơn
Thử thay lệnh mesh bằng lệnh waterfall và nhận xét sự khác nhau giữa hai lệnh
) xy y , x ( f = + t i vùng gần điểm (0, 0) L u ý nên sử dụng mật độ lấy mẫu dày đặc
Sử dụng lệnh mesh Sử dụng lệnh waterfall
Vẽ một bộ phận cầu với các thông số được định nghĩa theo công thức [x(t, s), y(t, s), z(t, s)] = [cos(t)cos(s), cos(t)sin(s), sin(t)] trong khoảng t, s = [0, 2π], sử dụng lệnh surf để tạo biểu đồ mặt phản chiếu Tiếp theo, áp dụng lệnh shading interp để loại bỏ các đốm màu đen không mong muốn, giúp hình ảnh trở nên mượt mà hơn Cuối cùng, sử dụng lệnh shading faceted để phục hồi lại hiệu ứng hình dạng ban đầu của mô hình, tạo ra một bức tranh rõ nét và chính xác hơn.
Vẽ hàm theo r và θ: [x(r, θ); y(r, θ); z(r, θ)] = [rcos(θ); rsin(θ); sin(6cos(r)-nθ)] Chọn n là một hằng số Quan sát sự thay đổi c a hình theo n
Trong MATLAB, hàm peaks là một hàm hai biến được xây dựng dựa trên phép biến đổi phân bố Gauss, giúp tạo ra các biến giá trị phù hợp để sử dụng trong các hàm đồ họa 3D như mesh, surf, pcolor, contour, giúp hiển thị đồ họa một cách trực quan và sinh động.
>> [X,Y,Z] = peaks; % t o các giá trị để vẽ,
Sử dụng lệnh mesh Sử dụng lệnh surf
>> contour (X,Y,Z,30); % vẽ đ ờng viền trong 2D
>> colorbar % thêm vào trục z một thanh màu t ơng ng v ớ i
>> contour3(X,Y,Z,30); % vẽ đ ờng viền trong 3D
>> pcolor(X,Y,Z); % giá trị z đ ợc thể hiện với giá trị
% màu t ơ ng ng, xem thêm l ệ nh colorbar
Lệnh "close all" được sử dụng để đóng tất cả các cửa sổ hình trong quá trình xử lý đồ họa Để đóng từng cửa sổ riêng lẻ, ta có thể sử dụng lệnh "close" hoặc "close(1)" để đóng cửa sổ hình Figure No.1 Trong ví dụ sau, chương trình được viết để xác định vị trí có giá trị nhỏ nhất trong đồ thị 3D, giúp phân tích dữ liệu hiệu quả hơn.
>> [mm,I] = min(Z); % mm là vector hàng ch a các giá tr ị nh ỏ nh ấ t
% I ch a các vị trí có giá trị nhỏ nhất
>> [Zmin, j] = min (mm); % Zmin là giá trị nhỏ nhất và j là vị trí
% t ơ ng ng Zmin mang giá tr ị c a
>> xpos = X(I(j),j); % giá trị t ơng ng c a X
>> ypos = Y(I(j),j); % giá tr ị t ơ ng ng c a Y
Thực hiện t ơng tựđể xác định đ ợc vị trí có giá trị lớn nhất:
Chúng ta cũng có thể kết hợp hai hay nhiều đồ thị vào trong cùng một hình
>> surf(peaks(25)+6); % dịch đồ thị theo trục z +6 đơn vị
Vẽ bề mặt c a hàm f(x,y)=xye − x 2 − y 2 với vùng lấy mẫu [-2, 2]x[-2, 2] Tìm vị trí, giá trị lớn nhất và nhỏ nhất c a hàm.
HÌNH ĐỘNG
Trong MATLAB, bạn có thể tạo ra hình chuyển động bằng cách vẽ một chuỗi các hình liên tiếp Để hiểu cách tạo ra hình động, hãy phân tích ví dụ sau với đồ thị của hàm số \(f(x) = \sin(nx)\), trong khoảng \(x = [0, 2\pi]\) và n từ 1 đến 5 Quá trình này giúp bạn hình dung rõ hơn cách các hình động được xây dựng từ các đồ thị tĩnh.
This MATLAB code generates multiple cosine functions, plotting cos(nx) for n from 1 to N over the interval [0, 2π] It dynamically updates the y-axis labels to reflect each function's expression, such as 'cos(x)', 'cos(2x)', etc., and includes appropriate axis labels and a title for clarity The plot uses a red line style, applies a tight axis, and enables grid lines for better visualization, making it ideal for illustrating the variations of cosine functions with different frequencies.
M(:,n) = getframe; pause(1.8) end movie(M) % ch y đ o n film
Các lệnh đ ợc tô đậm trên là các thành phần chính để t o nên một đo n hình chuyển động trong MATLAB
Trong chương trình này, cấu trúc vòng lặp for được sử dụng để tạo ra các khung cho đợn film, giúp quá trình xử lý diễn ra hiệu quả hơn Chúng ta sẽ đi sâu phân tích chi tiết về cách hoạt động của vòng lặp for trong phần nội dung tiếp theo để hiểu rõ hơn về vai trò của nó trong lập trình và tối ưu hóa quá trình tạo khung.
Lệnh strcat dùng để nối các chuỗi l i với nhau, sử dụng lệnh help strcat để hiểu rõ hơn
Trong quá trình chạy đoạn phim, đầu tiên hiển thị 5 khung hình, sau đó 5 khung hình tiếp theo xuất hiện với tốc độ nhanh hơn, tạo hiệu ứng chuyển động liên tục Lệnh `moviein(M)` thông báo cho MATLAB biết rằng một đoạn phim gồm M khung hình sẽ được tạo ra, các khung hình liên tiếp sẽ được xử lý bên trong vòng lặp để đảm bảo hình ảnh mượt mà Với lệnh `getframe`, các khung hình sẽ được lưu vào các cột của ma trận M, giúp quản lý dữ liệu hiệu quả Cuối cùng, lệnh `movie(M)` sẽ chạy đoạn phim đã được tạo, trình chiếu các khung hình theo đúng trình tự đã thiết lập, hỗ trợ việc hiển thị chuyển động một cách rõ ràng và liên tục.
Lưu ý rằng việc tạo ra đoạn film yêu cầu khá nhiều bộ nhớ, do vậy khi kết thúc công việc nên clear M ra khỏi workspace
Viết ch ơng trình t o một đo n film gồm có 5 frame là bề mặt c a hàm f(x; y) sin(nx)sin(ny) với x,y = [0; 2π] và n = 1 : 5 Thêm vào đo n film tựa đề, miêu t c a các trục
Danh sách các lệnh và hàm được giới thiệu trong chương 4
Các hàm vẽ đồ thị 2D như bar và barh giúp biểu diễn dữ liệu dưới dạng biểu đồ cột dọc và ngang, phù hợp cho việc so sánh dữ liệu Hàm errorbar cho phép hiển thị sai số hoặc độ lệch chuẩn của dữ liệu trên đồ thị Hàm fill sử dụng để tô màu một đa giác 2D, tạo trải nghiệm trực quan sinh động hơn cho biểu đồ Biểu đồ histogram (hist) giúp phân tích phân bố dữ liệu, trong khi loglog cung cấp khả năng vẽ đồ thị trên hệ trục logarithm để xử lý dữ liệu có giá trị lớn Hàm pie tạo biểu đồ hình tròn thể hiện tỷ lệ phần trăm, phù hợp cho phân tích phần trăm của các phần dữ liệu Hàm plot vẽ đồ thị trên hệ trục tuyến tính, là phương pháp phổ biến trong trực quan hóa dữ liệu Hàm polar cho phép vẽ đồ thị trên hệ trục cực, thích hợp cho các dữ liệu dạng góc hoặc xoay chiều Hàm semilogx và semilogy giúp vẽ đồ thị trên các hệ trục có trục hoành hoặc trục tung chia theo thang logarithm, phù hợp cho dữ liệu biến đổi theo logarit Cuối cùng, hàm stem dùng để vẽ đồ thị xung, thể hiện dữ liệu dạng cột đứng, dễ nhận biết các điểm phân bố.
Các hàm phục vụ cho đồ thị 2D giúp điều chỉnh giới hạn của các trục to độ, bật/tắt hộp của đồ thị (box on/off), và xóa hoặc hiển thị khung của đồ thị Các lệnh như clf giúp xóa cửa sổ hình hiển thị, closing đóng một hoặc nhiều figure hoặc tạo một figure mới để vẽ đồ thị Hàm grid hiển thị hoặc không hiển thị lưới ô vuông, gtext cho phép thêm dòng ký tự tại điểm xác định bởi con trỏ chuột, và hold on cho phép vẽ nhiều đồ thị cùng lúc trên cùng hệ trục Hold off sẽ xóa các đồ thị cũ trước khi vẽ đồ thị mới Hàm legend hiển thị các chú thích trên đồ thị, còn legend off sẽ tắt các chú thích này Hàm subplot chia figure thành nhiều phần, mỗi phần để vẽ một đồ thị riêng Các hàm text và title giúp thêm dòng ký tự tại điểm xác định hoặc hiển thị tiêu đề cho đồ thị, trong khi xlabel và ylabel cho phép hiển thị tên trục X và trục Y tương ứng, giúp tạo lập các biểu đồ rõ ràng và trực quan.
Các hàm vẽ đồ thị 3D bao gồm contour để vẽ các đường đồng mức, mesh và meshgrid để tạo đồ thị mặt lưới, cùng với surf giúp thể hiện bề mặt 3D có màu sắc rõ nét Đặc biệt, hàm pcolor tạo màu dựa trên ma trận tọa độ peaks, giúp hiển thị dữ liệu một cách trực quan Hàm plot3 minh họa đồ thị ba chiều cho hai biến, trong khi rotate3D on/off cho phép hoặc vô hiệu hoá khả năng xoay đồ thị 3D bằng chuột Chế độ shading cho phép lựa chọn kiểu phân màu của đồ thị, còn waterfall giúp tạo đồ thị dạng thác đổ cực kỳ ấn tượng và sinh động.
Các hàm liên quan đến hình động như getframe giúp lấy các khung hình trong runtime của movie Những khung hình này chứa các dữ liệu hình ảnh động được lưu trữ trong bộ nhớ của movie Khi hoạt động, các hàm này cho phép lấy và xử lý các frame hình động trong quá trình chạy của animation Việc này giúp hiển thị các đoạn phim ngắn động một cách chính xác và mượt mà hơn, đảm bảo sự linh hoạt và tối ưu trong quá trình xử lý hình ảnh động.
Các lệnh và hàm khác for end Th ự c hi ệ n vòng l ặ p có s ố l ầ n l ặ p h ữ u h n strcat Nối hai hay nhiều chuỗi với nhau
BIỂU THỨC RẼ NHÁNH
CÁC TOÁN TỬ LOGIC VÀ BIỂU THỨC QUAN HỆ
Trong MATLAB, để thực thi biểu thức rẽ nhánh, chương trình cần thực hiện các phép toán logic và dựa vào kết quả là ĐÚNG hay SAI (TRUE hay FALSE) Kết quả của một toán tử logic trong MATLAB là 1 nếu đúng và 0 nếu sai, giúp xác định điều kiện để điều hướng quá trình thực thi chương trình Các toán tử logic và biểu thức quan hệ như =, == và ~= cho phép so sánh hai ma trận cùng kích thước hoặc các giá trị đơn, trong đó một số thực có thể xem như ma trận 1x1 Sử dụng lệnh help relop giúp hiểu rõ hơn về các toán tử quan hệ, còn các hàm như xor, any, và all cũng được sử dụng như các toán tử logic để kiểm tra điều kiện trong mã MATLAB.
B ng 5.1: Toán tử logic và biểu th c quan hệ
Trong lập trình, các lệnh so sánh như (b > c) sẽ trả về giá trị 1 nếu b lớn hơn c, tương tự với các biểu thức khác như (b >= c), (b > 1 | b > 0 & 0 % ‘|’ là logic OR, ‘&’ là logic AND ans =
>> (1 | b > 0) & 0 % biểu th c này t ơng đ ơng với biểu th c ở trên ans =
Lưu ý rằng để tránh các trường hợp nhầm lẫn ta nên sử dụng dấu ngoặc để phân biệt các biểu th c logic có cấp độưu tiên khác nhau
• Dựđoán tr ớc kết qu và sau đó kiểm tra l i bằng MATLAB các biểu th c quan hệ trong b ng 5.1 với b = 0 và c = -1
• Dự đoán tr ớc kết qu và sau đó kiểm tra l i bằng MATLAB các toán tử logic (and, or) với b = [2, 31, -40, 0] và c = 0
• Định nghĩa hai vector ngẫu nhiên (randn(1,7)) và thực thi tất c các toán tử logic bao gồm c xor, any, và all
1 Cho x = [1, 5, 2, 8, 9, 0, 1] và y = [5, 2, 2, 6, 0, 0, 2] Thực thi và gi i thích kết qu c a các lệnh sau:
2 Cho x = 1 : 10 và y = [3, 5, 6, 1, 8, 2, 9, 4, 0, 7] Thực thi và gi i thích kết qu c a các lệnh sau:
Cho x = [3, 16, 9, 12, -1, 0, -12, 9, 6, 1] Thực thi các công việc sau:
• Gán các thành phần giá trị d ơng c a x bằng zero
• Nhân 2 các giá trị là bội số c a 3
• Nhân các giá trị lẻ c a x với 5
• Trích các giá trị c a x lớn hơn 10 thành vector y
• Gán các giá trị c a x nhỏ hơn giá trị trung bình c a nó thành zero
Thực thi các lệnh sau đây và l u ý giá trị c a z
Tr ớc khi tiếp tục, chắc chắn rằng b n đã hiểu đ ợc ý nghĩa và ho t động các biểu th c sau:
>> a = randperm(10); % hoán vị ngẫu nhiên
>> any(a > 5) % bằng 1 nếu bất kỳ thành phần nào
>> any(b < 5 & a > 8) % bằng 1 nếu tồn t i a và b sao cho
>> all(b > 2) % b ằ ng 1 n ế u t ấ t c các giá tr ị
Các thành phần của vector hoặc ma trận chỉ được trích ra khi chúng thỏa mãn một điều kiện cụ thể, giúp lọc dữ liệu chính xác hơn Sử dụng lệnh find trong MATLAB cũng cho ra kết quả tương tự, đó là vị trí của các phần tử thỏa mãn điều kiện đã đặt ra Ví dụ, lệnh find sẽ trả về các chỉ số của các phần tử trong vector hoặc ma trận thỏa mãn điều kiện, giúp phân tích dữ liệu nhanh chóng và hiệu quả Việc hiểu rõ cách sử dụng lệnh find và điều kiện lọc dữ liệu là rất quan trọng để tối ưu hóa quá trình xử lý dữ liệu trong lập trình MATLAB.
>> j = find(x == 1) % j là các vị trí c a x thỏa mãn x(j) = 1 j =
Một ví dụ khác là:
Với ma trận, lệnh find cũng đ ợc thực thi theo cách t ơng tự
Lệnh find sẽ sắp xếp ma trận A thành một vector cột theo thứ tự cột, sau đó nối các phần tử này thành một vector duy nhất Các phần tử trong vector này có vị trí k, trong đó giá trị của các thành phần lớn hơn hoặc bằng 2,5; A(k) chính là giá trị của các phần tử này Đồng thời, các chỉ số cột và dòng của các thành phần này cũng có thể được xác định thông qua các kết quả của lệnh find.
• Tìm các thành phần c a A nhỏ hơn –3
• Tìm các thành phần c a A lớn hơn –1 và nhỏ hơn 5
• Lo i bỏ các cột có ch a thành phần 0.
BIỂU THỨC ĐIỀU KIỆN
Cấu trúc điều kiện if được sử dụng để quyết định nhóm lệnh nào sẽ được thực thi dựa trên điều kiện đặt ra Trong các ví dụ về lệnh điều kiện, lệnh disp thường xuyên được sử dụng để hiển thị kết quả trên màn hình, giúp người dùng dễ dàng quan sát thông báo hoặc giá trị cần thiết Đây là các thành phần quan trọng trong lập trình điều kiện, giúp kiểm soát luồng thực thi của chương trình một cách linh hoạt và hiệu quả.
• Cấu trúc if … else … end
• Cấu trúc if … elseif … else … end if biểu th c logic lệnh thứ 1 lệnh th 1
Cú pháp if (a > 0) b = a; disp ('a is positive'); end
Trong lập trình, câu lệnh if được sử dụng để thực thi các lệnh khi biểu thức logic có giá trị TRUE (1) Các lệnh trong câu lệnh elseif sẽ được thực thi khi biểu thức logic tương ứng đạt giá trị TRUE Nếu không có biểu thức logic nào đúng, câu lệnh else sẽ đảm nhận việc thực thi các lệnh phù hợp, giúp kiểm soát luồng thực thi của chương trình một cách linh hoạt và chính xác.
Cú pháp if (height > 190) disp ('very tall'); elseif (height > 170) disp ('tall'); elseif (height < 150) disp ('small'); else disp ('average'); end
Ví dụ if biểu th c logic các lệnh được thực thi khi biểu th c logic TRUE else các lệnh được thực thi khi biểu th c logic FALSE end
Cú pháp if (temperature > 100) disp ('Above boiling.'); toohigh = 1; else disp ('Temperature is OK.'); toohigh = 0; end
Bạn có thể sử dụng một m-file trong MATLAB để thực thi các ví dụ đã học, trong đó m-file là tập hợp các lệnh được lưu trữ trong một tập tin có đuôi ".m" Để tạo m-file, bạn mở chương trình soạn thảo của MATLAB, nhập các lệnh cần thiết, rồi lưu lại với tên phù hợp, ví dụ "mytask.m" Để chạy m-file, chỉ cần gõ tên file đó trong cửa sổ lệnh của MATLAB Có thể tạo m-file trực tiếp trong MATLAB bằng cách chọn File → New → M-file và nhập chương trình vào cửa sổ mới, sau đó lưu lại trong thư mục MATLAB có thể truy cập Các lệnh trong m-file sẽ được thực hiện theo thứ tự, và để MATLAB có thể nhận diện và thực thi, m-file cần lưu trong các thư mục nằm trong danh sách đường dẫn của MATLAB Việc quản lý và sử dụng m-file là rất quan trọng để tự động hoá các quá trình trong MATLAB, và chúng ta sẽ đi sâu hơn về m-file trong các phần sau.
Ví d ụ 5-1 Tạo một m-file short.m ch a hai dòng lệnh sau đây và thực thi chúng bằng lệnh short x = 0:0.5:4; plot(x, sin(x), '*-');
Hãy xác định các giá trị tr về c a mỗi đo n ch ơng trình d ới đây, (lưu ý rằng không phải tất cả các lệnh đều đúng)
2 if s