Giới thiệu phần mềm Matlab
Matlab là gì?
MATLAB là phần mềm được phát triển bởi công ty The MATHWORKS, hỗ trợ tính toán khoa học và kỹ thuật trên máy tính cá nhân, với ma trận là yếu tố cơ bản trong các tính toán.
MATLAB là từ ghép của MATRIX và LABORATORY, hiện được sử dụng rộng rãi trong nghiên cứu các vấn đề tính toán kỹ thuật Chương trình này hỗ trợ tính toán và mô phỏng dao động, lý thuyết điều khiển tự động, kỹ thuật thống kê xác suất, xử lý tín hiệu số, phân tích dữ liệu, và dự báo chuỗi quan sát.
Matlab hoạt động dựa trên một tập hợp các lệnh được điều khiển qua bàn phím trong cửa sổ điều khiển, đồng thời hỗ trợ lập trình thông qua cú pháp script file Với hàng trăm lệnh và bộ lệnh có sẵn, Matlab ngày càng được mở rộng nhờ vào các Toolbox và hàm ứng dụng do người dùng phát triển.
Matlab là một công cụ mạnh mẽ và hiệu quả cho việc giải quyết các bài toán toán học, đặc biệt là hệ phương trình tuyến tính và thao tác với ma trận Nó cũng hỗ trợ tốt cho việc truy xuất và thao tác đồ họa trong không gian 2D và 3D, cùng khả năng tạo hoạt cảnh giúp mô tả bài toán một cách sinh động Với hơn 25 Toolbox khác nhau, Matlab cung cấp cho người dùng nhiều lựa chọn phong phú, hỗ trợ đắc lực cho các lĩnh vực nghiên cứu đa dạng.
Môi trường làm việc của Matlab
Matlab là phần mềm hỗ trợ tính toán và hiển thị, có khả năng hoạt động trên nhiều loại hệ thống máy tính, từ máy tính cá nhân đến các siêu máy tính.
MATLAB 5.1, 5.2, 6.5, 7.0 hoạt động trong môi trường WINDOWS Chương trình Matlab có thể chạy liên kết với các chương trình ngôn ngữ cấp cao như C, C++, Fortran Việc cài đặt MATLAB thật dễ dàng và ta cần chú ý việc dùng thêm vào các thư viện trợ giúp hay muốn liên kết phần mềm này với một vài ngôn ngữ cấp cao
Sau khi khởi động màn hình Matlab có giao diện như trên hình:
Hình 1.1 Màn hình khởi động của Matlab
Cửa sổ thư mục hiện tại (Current Directory Browser) cho phép người dùng dễ dàng nhận biết và chuyển đổi giữa các thư mục trong môi trường làm việc, đồng thời hỗ trợ mở file và tạo thư mục mới một cách nhanh chóng.
Cửa sổ Command Windows trong Matlab là nơi thực hiện các thao tác nhập dữ liệu và xuất kết quả tính toán Dấu nhấp nháy >> cho biết chương trình đã sẵn sàng để hoạt động.
Cửa sổ Command history (3): Lưu trữ tất cả các lệnh đã thực hiện trong cửa sổ
Trong Command Windows (2), người dùng có thể dễ dàng lặp lại lệnh trước đó bằng cách nháy đúp chuột vào lệnh đó Ngoài ra, người dùng cũng có khả năng cắt, sao chép hoặc xóa cả nhóm lệnh hoặc từng lệnh riêng lẻ một cách thuận tiện.
Cửa sổ Workspace browser (4): Tất cả các biến, các hàm tồn tại trong môi trường công tác đều được hiện tại cửa sổ này
Cửa sổ Editor : soạn thảo chương trình
Ngoài ra còn có Cửa sổ trợ giúp Help rất phong phú giúp người sử dụng trong quá trình tính toán Bằng câu lệnh Help [command]
Các phím chức năng đặc biệt (chuyên dùng) và các lệnh dùng cho hệ thống:
Bảng 1.1 Các phím chức năng đặc biệt và công dụng
Ctrl + P hoặc Gọi lại lệnh vừa thực hiện trước đó từ cửa sổ lệnh của
Matlab Ctrl + n hoặc Gọi lại lệnh đã đánh vào trước đó
Ctrl + f hoặc Chuyển con trỏ sang phải một ký tự
Ctrl + b hoặc Chuyển con trỏ sang trái một ký tự
Ctrl + l hoặc Ctrl + Chuyển con trỏ sang phải một từ
Ctrl + r hoặc Ctrl + Chuyển con trỏ sang trái một từ
Ctrl + a hoặc HOME Chuyển con trỏ về đầu dòng
Ctrl + k Xóa cho đến dòng cuối cùng
Các lệnh trên cũng như sau này được viết từ của sổ lệnh của Matlab
Bảng 1.2 Các lệnh hệ thống
Casesen off Bỏ thuộc tính phân biệt chữ hoa và chữ thường
Trong Matlab, để sử dụng thuộc tính chữ hoa và chữ thường, bạn có thể sử dụng lệnh "casesen" Để xóa cửa sổ dòng lệnh, hãy sử dụng lệnh "clc", trong khi lệnh "clf" sẽ giúp xóa cửa sổ đồ họa Cuối cùng, để thoát khỏi chương trình Matlab, bạn có thể sử dụng lệnh "exit" hoặc "quit".
Ctrl + C Dừng chương trình khi nó rơi vào tình trạng lặp không kết thúc
Input Nhập dữ liệu từ bàn phím
Load Tải các biến đã lưu trong một file đưa vào vùng làm việc
Pause Ngừng tạm thời chương trình
Save Lưu giữ các biến vào file có tên là matlab.mat
Demo Lệnh cho phép xem các chương trình mẫu (minh họa khả năng làm việc của Matlab)
Edit Lệnh để vào cửa sổ soạn thảo văn bản (dùng để viết một chương trình)
+ Tệp * m: Tệp soạn thảo chương trình Scripts, hàm function, lưu trữ số liệu
+ Tệp *.mat: Tệp lưu trữ số liệu (ở cửa sổ Workspace ) >> save ; >> load *.mat
+ Tệp *.fig: Tệp lưu trữ các tệp đồ hoạ
+ Tệp *.mdl : Tệp sơ đồ khối Simulink
MATLAB cung cấp các công cụ mạnh mẽ cho việc hiển thị véc tơ và ma trận dưới dạng đồ thị, đồng thời cho phép chú thích và in ấn đồ thị một cách trực quan.
Hình 1.2 Đồ họa trong Matlab
1.4 Lập trình ứng dụng trong Matlab
Matlab là phần mềm phổ biến cho lập trình tính toán trong kỹ thuật, được sử dụng rộng rãi tại các trường đại học trên toàn thế giới Nhờ vào các Toolbox được thiết kế sẵn, Matlab giúp việc tính toán trở nên đơn giản và hiệu quả hơn so với nhiều ngôn ngữ lập trình khác Một trong những Toolbox quan trọng là Control System Toolbox, cung cấp nền tảng cho thiết kế hệ thống điều khiển.
Matlab Nó chứa các hàm cho việc mô phỏng, phân tích và thiết kế các hệ thống trong tự động điều khiển
Hộp công cụ Nhận diện Hệ thống Miền Tần số bao gồm các tệp m giúp mô phỏng các hệ thống tuyến tính dựa trên phép đo đáp ứng tần số của hệ thống.
+ Fuzzy Logic Tollbox: Cung cấp một tập hợp đầy đủ các công cụ cho việc thiết kế, mô phỏng và phân tích các hệ thống logic mờ (Fuzzy Inferencs)
Công cụ Phân Tích Phổ Bậc Cao cung cấp các giải pháp hiệu quả cho việc xử lý tín hiệu, đặc biệt là trong việc phân tích các tín hiệu phát sinh từ quá trình phi tuyến hoặc bị nhiễu phi Gaussian Những phương pháp này rất hữu ích trong việc hiểu rõ hơn về đặc tính của tín hiệu trong các điều kiện phức tạp.
Hộp công cụ Xử lý Ảnh chứa các công cụ thiết yếu cho việc xử lý ảnh, bao gồm thiết kế bộ lọc, lưu trữ ảnh, nâng cấp chất lượng ảnh, cũng như phân tích và thống kê dữ liệu hình ảnh.
Model Predictive Control Toolbox rất hữu ích cho các ứng dụng điều khiển có nhiều biến đầu vào và đầu ra, đặc biệt trong lĩnh vực kỹ thuật hóa chất, nơi mà các giới hạn thường xuyên xuất hiện.
Mu-Analysis và Syntheris Toolbox cung cấp các công cụ chuyên môn hóa cho việc tối ưu hóa điều khiển, đặc biệt trong lĩnh vực robot cao cấp và các hệ thống đa biến tuyến tính.
The Signal Processing Toolbox offers a range of tools for signal processing applications, including audio formats like compact discs and digital tapes, video technologies such as digital HDTV and image processing and compression, as well as telecommunications for fax and telephone systems Additionally, it finds uses in medical fields and geographical analysis.
Hộp công cụ thiết kế điều khiển phi tuyến cho phép phát triển các hệ thống điều khiển tuyến tính và phi tuyến, áp dụng các kỹ thuật tối ưu hóa dựa trên miền thời gian.
+ Optimization Tollbox: Các lệnh dùng cho sự tối ưu hóa các hàm tuyến tính và phi tuyến tổng quát
+ Symbolic Match Toolbox: Bao gồm các công cụ cho việc tính toán trên các biểu thức
+ System Identification Toolbox: Tập hợp các công cụ cho ước lượng và nhận dạng (tìm mô hình toán học cho một hệ thống vật lý)
+ Robust Control System: Các công cụ cho phép phân tích và tổng hợp các hệ thống điều khiển bằng robot
+ Simulink: Mô phỏng động học tuyến tính và phi tuyến
Ngoài ra còn có các Toolbox khác như NAG Foundation Toolbox, Quantitative Feedback Workshop, Spline Toolbox, Statics Toolbox
Một khả năng khác cần phải nhắc đến của Matlab là biểu diễn data bằng đồ thị hai chiều, ba chiều bằng các lệnh (hàm) khá đơn giản
Lập trình ứng dụng trong Matlab
Matlab là phần mềm phổ biến cho lập trình tính toán trong kỹ thuật, được sử dụng rộng rãi tại nhiều trường đại học trên thế giới Nhờ vào các Toolbox được thiết kế sẵn, Matlab giúp công việc tính toán trở nên đơn giản và hiệu quả hơn so với nhiều ngôn ngữ lập trình khác Một trong những Toolbox quan trọng là Control System Toolbox, cung cấp nền tảng thiết kế điều khiển hiệu quả.
Matlab Nó chứa các hàm cho việc mô phỏng, phân tích và thiết kế các hệ thống trong tự động điều khiển
Hộp công cụ Nhận diện Hệ thống Miền Tần số bao gồm các tệp m giúp mô phỏng các hệ thống tuyến tính dựa trên phép đo đáp ứng tần số của hệ thống.
+ Fuzzy Logic Tollbox: Cung cấp một tập hợp đầy đủ các công cụ cho việc thiết kế, mô phỏng và phân tích các hệ thống logic mờ (Fuzzy Inferencs)
Hộp công cụ Phân tích Phổ Bậc Cao cung cấp các công cụ chuyên dụng cho xử lý tín hiệu dựa trên phổ bậc cao Các phương pháp này đặc biệt hiệu quả trong việc phân tích tín hiệu có nguồn gốc từ các quá trình phi tuyến hoặc bị nhiễu phi Gaussian.
Hộp công cụ Xử lý Ảnh cung cấp một loạt công cụ chuyên dụng cho việc xử lý ảnh, bao gồm thiết kế bộ lọc, lưu trữ ảnh, nâng cấp chất lượng ảnh, cùng với các tính năng phân tích và thống kê hiệu quả.
Model Predictive Control Toolbox là công cụ đặc biệt hữu ích cho các ứng dụng điều khiển có nhiều biến ngõ vào và ngõ ra, đặc biệt trong lĩnh vực kỹ thuật hóa chất, nơi mà việc tuân thủ các giới hạn là rất quan trọng.
Mu-Analysis và Syntheris Tollbox cung cấp các công cụ chuyên môn hóa cho việc điều khiển tối ưu hóa, đặc biệt trong lĩnh vực robot cao cấp và các hệ thống đa biến tuyến tính.
The Signal Processing Toolbox offers a range of tools for signal processing applications across various fields Key applications include audio processing for compact discs and digital tapes, video processing for digital HDTV and image compression, telecommunications for fax and telephone systems, as well as uses in medical and geographical contexts.
Bộ công cụ Thiết kế Điều khiển Phi tuyến cho phép người dùng thiết kế các hệ thống điều khiển tuyến tính và phi tuyến, ứng dụng kỹ thuật tối ưu hóa dựa trên miền thời gian.
+ Optimization Tollbox: Các lệnh dùng cho sự tối ưu hóa các hàm tuyến tính và phi tuyến tổng quát
+ Symbolic Match Toolbox: Bao gồm các công cụ cho việc tính toán trên các biểu thức
+ System Identification Toolbox: Tập hợp các công cụ cho ước lượng và nhận dạng (tìm mô hình toán học cho một hệ thống vật lý)
+ Robust Control System: Các công cụ cho phép phân tích và tổng hợp các hệ thống điều khiển bằng robot
+ Simulink: Mô phỏng động học tuyến tính và phi tuyến
Ngoài ra còn có các Toolbox khác như NAG Foundation Toolbox, Quantitative Feedback Workshop, Spline Toolbox, Statics Toolbox
Một khả năng khác cần phải nhắc đến của Matlab là biểu diễn data bằng đồ thị hai chiều, ba chiều bằng các lệnh (hàm) khá đơn giản
Xử lý dữ liệu mảng trong Matlab và các ứng dụng….11 2.1 Các phương pháp tạo mảng dữ liệu
Dùng toán tử “:”
=: :
Sẽ tạo ra véc tơ hàng có phần tử đầu tiên là giá trị , gia số giữa các phần tử là
, giá trị phần tử cuối cùng không vượt quá
Chú ý : Nếu bỏ qua trị số của , máy sẽ nhận gia số =1
Nếu nhập vào sau dấu nhắc dòng lệnh Y=1:2:10
Ta nhận được véc tơ hàng:
Nếu nhập vào sau dấu nhắc dòng lệnh: Y=1:9
Ta nhận được véc tơ:
Dùng hàm linspace và logspace
=linspace(, , )
Hàm sẽ tạo ra một véc tơ có số phần tử là , với các phần tử có giá trị được phân bố đều giữa MinVal và MaxVal Gia số giữa các phần tử được tính bằng (MaxVal - MinVal) / (Num - 1), trong đó phần tử đầu tiên có giá trị bằng MinVal và phần tử cuối cùng có giá trị bằng MaxVal.
Ta nhận được véc tơ ans 1 3 5 7 9 11 ứng dụng: Hàm linspace rất tiện dụng trong việc xác định véc tơ các giá trị trên trục hoành khi vẽ đồ thị
Cú pháp của hàm này tương tự như hàm linspace, nhưng các phần tử trong dãy được biến thiên theo quy luật của hàm số mũ, với gia số của các số mũ tăng đều và có giá trị bằng nhau.
Sẽ cho kết quả: ans 10 100 1000 10000 100000 1000000
2.1.4 Sử dụng các mảng chuẩn a, Ma trận có các phần tử bằng 0 ứng dụng: Ma trận có các phần tử bằng 0 thường dùng trong các trường hợp sau:
Dùng làm ma trận mồi trong phép tính tổng nhiều ma trận (dùng vòng lặp)
Dùng để tạo ma trận có nhiều phần tử bằng 0 rất thường gặp trong kỹ thuật
Cú pháp : =zeros(, )
Tạo ra ma trận với các phần tử 0, có số hàng là , số cột là
0 0 0 b, Ma trận có các phần tử bằng 1 ứng dụng: Ma trận có các phần tử bằng 1 thường dùng trong các trường hợp sau:
Dùng làm ma trận mồi trong phép tính tích các phần tử tương ứng của nhiều ma trận (dùng vòng lặp)
Ma trận có các phần tử bằng nhau được sử dụng để thực hiện phép tính cộng hoặc trừ từng phần tử của ma trận với cùng một số.
Cú pháp : =ones(, )
Tạo ra ma trận với các phần tử 1, có số hàng là , số cột là
3.5000 3.5000 c, Ma trận đơn vị Để tạo ma trận đơn vị, ta dùng hàm eye;
=eye(, ); hoặc
Cú pháp thứ nhất sẽ tạo ra ma trận đơn vị chữ nhật, có số hàng bằng và số cột bằng
Cú pháp thứ hai sẽ tạo ra ma trận đơn vị có số hàng bằng số cột bằng
Sẽ tạo ra ma trận
Sẽ tạo ra ma trận
0 0 0 1 d, Tạo các mảng đường chéo ứng dụng:
Mảng đường chéo thường gặp ở các ma trận độ cứng và ma trận khối lượng trong tính toán bền
+ V là một véc tơ hàng, hoặc cột, hoặc có thể là ma trận
+ n là số nguyên chỉ đường chéo nào của ma trận sẽ đặt các phần tử của véc tơ V
Nếu V là một véc tơ, hàm sẽ tạo ra một ma trận vuông với các phần tử trên đường chéo chính là các phần tử của véc tơ V.
+ Nếu V là một ma trận, sẽ trả kết quả là véc tơ cột của các phần tử nằm trên đường chéo của ma trận V
+ Nếu không chỉ ra n, các phần tử của V sẽ nằm trên đường chéo chính
6 e, Mảng các số ngẫu nhiên ứng dụng:
Mảng các số ngẫu nhiên dùng nhiều trong đồ hoạ hoặc tạo các nhiễu trong mô phỏng và sử lý số liệu thực nghiệm
= rand(số hàng, số cột)
Tạo ra mảng các số ngẫu nhiên với số hàng, cột chỉ định f, Mảng tạo từ tệp
Để gọi các mảng từ tệp m.file vào môi trường Matlab, người dùng chỉ cần nhập tên của tệp m.file sau dấu nhắc của Matlab và nhấn Enter Phương pháp này rất tiện lợi khi làm việc với dữ liệu dạng mảng được xuất ra từ các chương trình tính toán khác.
2.2 Tham chiếu tới các phần tử của mảng, tạo các mảng con
2.2.1 Nguyên tắc tham chiếu tới các phần tử của mảng
+ Để tham chiếu đến một phần tử của mảng, ta cần chỉ ra chỉ số hàng và cột của phần tử (đặt trong dấu ngoặc đơn)
Ví dụ: Để tham chiếu đến phần tử nằm ở hàng số 2 và cột số 3 của ma trận M ta viết
Để tham chiếu đến một nhóm phần tử trong mảng, thay vì chỉ định chính xác chỉ số của từng phần tử, chúng ta cần chỉ ra mảng chứa các chỉ số của những phần tử cần tham chiếu.
M1= M([1 2],[3 2]) sẽ cho ta một ma trận mới:
+ Dấu : Để chỉ toàn bộ các chỉ số của hàng và cột
M1=M(:,1) sẽ cho ra véc tơ bao gồm các phần tử trên cột thứ nhất của ma trận M
M1=M(2,:) sẽ cho ra véc tơ bao gồm các phần tử trên hàng thứ hai của ma trận M
Từ khoá end là chỉ số cuối cùng của hàng hoặc cột của mảng
Sẽ tạo ra ma trận M1 từ hàng 2 và 4 của ma trận M, mỗi hàng lấy ra từ phần tử thứ 3 đến phần tử cuối cùng
2.2.2 các ứng dụng của việc truy cập các phần tử của mảng a, Lấy các phần tử của mảng ra để tính toán
Sẽ tính tổng bình phương các giá trị của phần tử thứ 2 và thứ 5 của véc tơ V
Sẽ tìm ra hiệu của hai phần tử ở hàng 1 cột 2 và hàng 2 cột 3 của ma trận M c, Thay đổi giá trị của từng phần tử của mảng
Ví dụ: Để tạo ra ma trận
M , ta thực hiện theo các bước sau:
Tạo ma trận với các phần tử 0: M=zeros(3,3);
Sau đó gán lại các phần tử khác 0 của ma trận: M(1,1)=1;M(3,2)=3; d, Tạo các mảng con từ mảng cơ sở
Ví dụ: Để lấy ra hàng đầu tiên của ma trận M ta dùng lệnh:
V=M(1,:) Để tạo ra véc tơ mới bằng cách bỏ đi phần tử đầu tiên của véc tơ V, ta dùng lệnh:
Để loại bỏ các phần tử không cần thiết khỏi mảng trong lập trình, bạn có thể sử dụng cú pháp gán giá trị cho các phần tử đó bằng rỗng: "[ ]" Ví dụ, nếu bạn có một mảng V, bạn có thể loại bỏ phần tử đầu tiên bằng cách gán V1 = V(2:end).
Ví dụ: nếu ta có ma trận M 2 3 4
Sau khi dùng phép gán: M(:,1)=[ ]
Để tạo mảng từ các mảng thành phần, ta sử dụng dấu "[ ]" và chỉ rõ các phần tử cần đưa vào mảng Nếu các phần tử nằm trên cùng một hàng, chúng được cách nhau bằng dấu cách Để xuống dòng, ta sử dụng dấu ";".
Nếu ta có 2 véc tơ: V1=[3 5 7 9], V2=[4 6 8 2 7 3]
2.3 Các phép tính thực hiện trên mảng
Mảng mới M được tạo ra bằng cách cộng từng phần tử tương ứng của các mảng M1, M2, M3, với kích thước tương đương Điều này có nghĩa là mỗi phần tử trong mảng M sẽ là tổng của các phần tử cùng chỉ số từ các mảng thành phần.
Các mảng M1, M2, phải có cùng kích thước
M=M1 - M2 - M3- ý nghĩa: Tạo ra mảng M với các phần tử M(i,j)=M1(i,j)-M2(i,j)-M3(i,j)- Điều kiện:
Các mảng M1, M2, phải có cùng kích thước
M=A*B ý nghĩa: Nếu A là ma trận có kích thước (i x k) và B là ma trận có kích thước (k x j), ta sẽ nhận được ma trận M có kích thước là (i x j) với: M(i,j) M(i,t).M(t,j) k
Điều kiện: số cột của ma trận A phải bằng số hàng của ma trận B
M=A^n, trong đó n là số nguyên dương
Có kết quả như là phép nhân n ma trận A với nhau: Điều kiện: Các ma trận A phải là ma trận vuông
2.3.5 Phép chia hai ma trận
Phép chia ma trận hoàn toàn giống như phép nhân với ma trận nghịch đảo: M=A/B M=A*B -1 Điều kiện:
Các ma trận A, B phải là các ma trận vuông cùng kích thước
2.3.6 Sử dụng các toán tử với dấu "."
Các toán tử có dấu "." (xem bảng dưới ) sẽ cho phép thao thác trên từng phần tử của mảng
Bảng 2.1 Các toán tử với dấu “.”
+ Cộng (không có toán tử +)
- Trừ (không có toán tử -) * Nhân từng phần tử / Chia từng phần tử ^ Luỹ thừa từng phần tử ' Phép chuyển vị
VD1: Xác định véc tơ S, với các phần tử được xác định bằng quan hệ:
S(i)=Y(i+1)-2*Y(i); i=1 đến n-1, với Y =[3.5 6.2 7.0 5.4 6.2] ở đây ta sử dụng biểu thức véc tơ:
VD2: tính giá trị của véc tơ V mà các phần tử của nó được xác định bằng biểu thức: V(i)=2*Y(i)-b, với Y =[3.5 6.2 7.0 5.4 6.2], b=1.5 ở đây ta sử dụng biểu thức véc tơ:
VD3: giải hệ phương trình:
Ta tạo ra các ma trận: M=[4 0 7; 3 5 -4;2 5 1]; Y=[5;12;4] nghiệm của hệ được xác định bằng biểu thức:
Biểu thức trên cho kết quả:
2.4 Các hàm dùng trên mảng
Tất cả các hàm tính toán trên dữ liệu số đều có thể thực hiện trên dữ liệu mảng, và cho kết quả là mảng có cùng kích cỡ
Ví dụ: Để vẽ đồ thị của hàm số:
Ta sử dụng các lệnh sau:
Y=(sin(X).^2+2*cos(2*X))./(ones(1,20)+cos(X).^2); plot(X,Y)
2.4.2 Các hàm dùng cho việc xử lý dữ liệu a Hàm sum
Nếu A là một véc tơ, hàm sẽ trả về tổng các phần tử của véc tơ đó Còn nếu A là một ma trận, hàm sẽ trả về một véc tơ hàng, trong đó mỗi phần tử là tổng các phần tử của từng cột trong ma trận A Ngoài ra, cũng có các hàm để lật ma trận.
Hàm flipud(A), chuyển các hàng từ dưới lên trên
Hàm fliplr(A) , chuyển các hàng từ phải sang trái
Ví dụ: Nếu ta có ma trận M 4 0 7
Sẽ đưa ra két quả ans 2 5 1
Sẽ đưa ra kết quả ans 7 0 4
1 5 2 c Hàm lấy ra ma trận đường chéo
Hàm triu(A), lấy ra ma trận đường chéo phía trên
Hàm tril(A), lấy ra ma trận đường chéo phía dưới
Ví dụ: Nếu có ma trận M ở trên
Khi dùng hàm triu(M), Ta nhận được: ans 4 0 7
Nếu dùng hàm: tril(M), ta sẽ nhận được: ans 4 0 0
S=size(A) : đưa ra véc tơ hàng chỉ số lượng hàng và cột của ma trận
[r,c]=size(A) gán số hàng cho r, số cột cho c
Ví dụ: Nếu có ma trận M ở trên
Nếu gọi lệnh : S=size(M) , ta nhận được:
Nếu A là một véc tơ, thì B = cumsum(A) sẽ tạo ra véc tơ B với các phần tử là tổng tích lũy của các phần tử trong véc tơ A, được xác định theo công thức.
Nếu A là một ma trận, hàm cumsum(A) sẽ trả về một ma trận có kích thước giống hệt A, trong đó mỗi phần tử tương ứng là tổng tích lũy của các phần tử theo từng cột của ma trận A.
Hàm B = cumsum(A, dim) sẽ tạo ra ma trận B có kích thước tương tự như ma trận A, với các phần tử của B là tổng tích lũy dọc theo hàng hoặc cột của A, tùy thuộc vào giá trị của Cụ thể, cumsum(A, 1) tính tổng dọc theo các cột, trong khi cumsum(A, 2) tính tổng dọc theo các hàng.
Tính toán độ lệch giữa các phần tử trong mảng
Y = diff(X, n ) diff(S) đạo hàm của S theo biến tự do diff(S,’v’) đạo hàm của S theo biến v diff(S,’v’,n) đạo hàm cấp n của S theo v
Chú ý: Trong đó S là hàm toán học
Y = diff(X) tính ra độ lệch giữa các phần tử kề nhau của véc tơ X
Nếu X là véc tơ kết quả đưa ra là véc tơ ít hơn X 1 phần tử:
Nếu X là ma trận , hàm diff(X) đưa ra kết quả là ma trận cột các độ lệch :
Y = diff(X, n ) Đưa ra véc tơ độ sai lệch bậc n : như vậy diff(X,2) cho ra cùng kết quả với diff(diff(X))
Vớ dụ: Tính đạo hàm của y = sinx 3 syms x % khai bao x la bien kieu symbolic y=sin(x^3); z=diff(y) % dao ham cua y z 3*cos(x^3)*x^2 % sinh vien kiem tra ket qua
>>pretty(z) % hien thi dang quen thuoc
2.5 Các ví dụ ứng dụng
2.5.1 Tính toán độ cứng của nhíp:
Hệ số thực nghiệm α được xác định là 0.85, trong khi mô đun đàn hồi của vật liệu E có giá trị là 2,1 x 10^6 Công thức ak+1 = l1 - lk+1 được sử dụng, trong đó lk là 1/2 chiều dài của lá nhíp thứ k, tính từ quang treo đến đầu mút của lá.
Yk Bảng 2.2 Chỉ số các lá nhíp
Dữ liệu đã biết Chỉ số của lá Bề rộng b, cm Bề dầy lá nhíp h, cm Mô men quán tính J, cm 4
1/2 Chiều dài các lá nhíp (tính từ quang treo đến đầu mút của lá) l(1)h.5;l(2)g.2;l(3)W.6;l(4)P.4;l(5)C.0;l(6)5.0;l(7)(.0;l(8) 6;l(9)=1 3.0
Các lệnh Matlab dùng để tính độ cứng của nhíp
%% Tính toán các đặc tính hình học của lá nhíp
Yk=1./Jk;Yk(10)=0;DYk=-diff(Yk); a=l(1)*ones(1,10)-l;a=a(2:10);
%% Tính độ cứng của nhíp
Sau khi chạy được kết quả
2.5.2 Tính toán bền các lá nhíp
Phản lực tác động tại các đầu mút của lá nhíp được xác định từ hệ phương trình:
Trong đó Ak, Bk, Ck được xác định từ các biểu thức:
1 k k ở đây: lk là 1/2 chiều dài của lá nhíp thứ k (tính từ quang treo đến đầu mút của lá)
Jk là mô men quán tính mặt cắt ngang của lá nhíp thứ k :
Ví dụ : Tính ứng xuất tác dụng lên các lá nhíp có số liệu cho trong bảng dưới đây
Bảng 2.3 Dữ liệu các lá nhíp và tải trọng
Khoảng cách giữa bu lông ngàm nhíp: 12 cm
Tải trọng đặt lên nhíp 900 Kg
Jk=b*h.^3/12;Jk1=Jk(2:6);Jk=Jk(1:5);
A=0.5*Jk1./Jk.*(3*Lk./Lk1-ones(1,5));
C=0.5*(Lk1./Lk).^3.*(3*Lk./Lk1-ones(1,5)); p=zeros(5,1);p(1)=-Q/2*A(1);
%% Thiết lập ma trận hệ số
M=diag(Ak,-1)+diag(Bk)+diag(Ck,1);
%% Tính toán các phản lực
Tham chiếu tới các phần tử của mảng, tạo mảng con
và sử lý số liệu thực nghiệm
= rand(số hàng, số cột)
Tạo ra mảng các số ngẫu nhiên với số hàng, cột chỉ định f, Mảng tạo từ tệp
Để gọi mảng từ tệp m.file vào môi trường Matlab, người dùng chỉ cần nhập tên tệp sau dấu nhắc và nhấn Enter Việc này rất tiện lợi, đặc biệt khi dữ liệu dạng mảng được xuất ra từ các chương trình tính toán khác.
2.2 Tham chiếu tới các phần tử của mảng, tạo các mảng con
2.2.1 Nguyên tắc tham chiếu tới các phần tử của mảng
+ Để tham chiếu đến một phần tử của mảng, ta cần chỉ ra chỉ số hàng và cột của phần tử (đặt trong dấu ngoặc đơn)
Ví dụ: Để tham chiếu đến phần tử nằm ở hàng số 2 và cột số 3 của ma trận M ta viết
Để tham chiếu đến một nhóm phần tử trong mảng, thay vì chỉ định chính xác chỉ số của từng phần tử, chúng ta cần chỉ ra mảng chứa các chỉ số của những phần tử mà chúng ta muốn tham chiếu.
M1= M([1 2],[3 2]) sẽ cho ta một ma trận mới:
+ Dấu : Để chỉ toàn bộ các chỉ số của hàng và cột
M1=M(:,1) sẽ cho ra véc tơ bao gồm các phần tử trên cột thứ nhất của ma trận M
M1=M(2,:) sẽ cho ra véc tơ bao gồm các phần tử trên hàng thứ hai của ma trận M
Từ khoá end là chỉ số cuối cùng của hàng hoặc cột của mảng
Sẽ tạo ra ma trận M1 từ hàng 2 và 4 của ma trận M, mỗi hàng lấy ra từ phần tử thứ 3 đến phần tử cuối cùng
2.2.2 các ứng dụng của việc truy cập các phần tử của mảng a, Lấy các phần tử của mảng ra để tính toán
Sẽ tính tổng bình phương các giá trị của phần tử thứ 2 và thứ 5 của véc tơ V
Sẽ tìm ra hiệu của hai phần tử ở hàng 1 cột 2 và hàng 2 cột 3 của ma trận M c, Thay đổi giá trị của từng phần tử của mảng
Ví dụ: Để tạo ra ma trận
M , ta thực hiện theo các bước sau:
Tạo ma trận với các phần tử 0: M=zeros(3,3);
Sau đó gán lại các phần tử khác 0 của ma trận: M(1,1)=1;M(3,2)=3; d, Tạo các mảng con từ mảng cơ sở
Ví dụ: Để lấy ra hàng đầu tiên của ma trận M ta dùng lệnh:
V=M(1,:) Để tạo ra véc tơ mới bằng cách bỏ đi phần tử đầu tiên của véc tơ V, ta dùng lệnh:
Để loại bỏ các phần tử không cần thiết trong mảng, ta có thể sử dụng cú pháp gán giá trị của các phần tử cần loại bỏ thành rỗng: "[ ]" Ví dụ, trong đoạn mã V1=V(2:end), ta chỉ giữ lại các phần tử từ vị trí thứ hai đến cuối mảng.
Ví dụ: nếu ta có ma trận M 2 3 4
Sau khi dùng phép gán: M(:,1)=[ ]
Để tạo mảng từ các mảng thành phần, ta sử dụng dấu "[ ]" và chỉ rõ các phần tử bên trong Nếu các phần tử nằm trên cùng một hàng, chúng được ngăn cách bằng dấu cách Để xuống dòng, sử dụng dấu ";" để phân tách các phần tử.
Nếu ta có 2 véc tơ: V1=[3 5 7 9], V2=[4 6 8 2 7 3]
Các phép tính thực hiện trên mảng
Mảng mới M được tạo ra bằng cách cộng các phần tử tương ứng của các mảng M1, M2, M3, , với kích thước của M bằng với kích thước của các mảng thành phần Mỗi phần tử trong mảng M sẽ là tổng của các phần tử tương ứng từ các mảng M1, M2, M3, và các mảng khác.
Các mảng M1, M2, phải có cùng kích thước
M=M1 - M2 - M3- ý nghĩa: Tạo ra mảng M với các phần tử M(i,j)=M1(i,j)-M2(i,j)-M3(i,j)- Điều kiện:
Các mảng M1, M2, phải có cùng kích thước
M=A*B ý nghĩa: Nếu A là ma trận có kích thước (i x k) và B là ma trận có kích thước (k x j), ta sẽ nhận được ma trận M có kích thước là (i x j) với: M(i,j) M(i,t).M(t,j) k
Điều kiện: số cột của ma trận A phải bằng số hàng của ma trận B
M=A^n, trong đó n là số nguyên dương
Có kết quả như là phép nhân n ma trận A với nhau: Điều kiện: Các ma trận A phải là ma trận vuông
2.3.5 Phép chia hai ma trận
Phép chia ma trận hoàn toàn giống như phép nhân với ma trận nghịch đảo: M=A/B M=A*B -1 Điều kiện:
Các ma trận A, B phải là các ma trận vuông cùng kích thước
2.3.6 Sử dụng các toán tử với dấu "."
Các toán tử có dấu "." (xem bảng dưới ) sẽ cho phép thao thác trên từng phần tử của mảng
Bảng 2.1 Các toán tử với dấu “.”
+ Cộng (không có toán tử +)
- Trừ (không có toán tử -) * Nhân từng phần tử / Chia từng phần tử ^ Luỹ thừa từng phần tử ' Phép chuyển vị
VD1: Xác định véc tơ S, với các phần tử được xác định bằng quan hệ:
S(i)=Y(i+1)-2*Y(i); i=1 đến n-1, với Y =[3.5 6.2 7.0 5.4 6.2] ở đây ta sử dụng biểu thức véc tơ:
VD2: tính giá trị của véc tơ V mà các phần tử của nó được xác định bằng biểu thức: V(i)=2*Y(i)-b, với Y =[3.5 6.2 7.0 5.4 6.2], b=1.5 ở đây ta sử dụng biểu thức véc tơ:
VD3: giải hệ phương trình:
Ta tạo ra các ma trận: M=[4 0 7; 3 5 -4;2 5 1]; Y=[5;12;4] nghiệm của hệ được xác định bằng biểu thức:
Biểu thức trên cho kết quả:
Các hàm dùng trên mảng
Tất cả các hàm tính toán trên dữ liệu số đều có thể thực hiện trên dữ liệu mảng, và cho kết quả là mảng có cùng kích cỡ
Ví dụ: Để vẽ đồ thị của hàm số:
Ta sử dụng các lệnh sau:
Y=(sin(X).^2+2*cos(2*X))./(ones(1,20)+cos(X).^2); plot(X,Y)
2.4.2 Các hàm dùng cho việc xử lý dữ liệu a Hàm sum
Nếu A là một véc tơ, hàm sẽ trả về tổng các phần tử của véc tơ đó Ngược lại, nếu A là một ma trận, hàm sẽ trả về một véc tơ hàng, trong đó mỗi phần tử là tổng các phần tử của từng cột trong ma trận A Ngoài ra, các hàm lật ma trận cũng được áp dụng để xử lý dữ liệu một cách hiệu quả.
Hàm flipud(A), chuyển các hàng từ dưới lên trên
Hàm fliplr(A) , chuyển các hàng từ phải sang trái
Ví dụ: Nếu ta có ma trận M 4 0 7
Sẽ đưa ra két quả ans 2 5 1
Sẽ đưa ra kết quả ans 7 0 4
1 5 2 c Hàm lấy ra ma trận đường chéo
Hàm triu(A), lấy ra ma trận đường chéo phía trên
Hàm tril(A), lấy ra ma trận đường chéo phía dưới
Ví dụ: Nếu có ma trận M ở trên
Khi dùng hàm triu(M), Ta nhận được: ans 4 0 7
Nếu dùng hàm: tril(M), ta sẽ nhận được: ans 4 0 0
S=size(A) : đưa ra véc tơ hàng chỉ số lượng hàng và cột của ma trận
[r,c]=size(A) gán số hàng cho r, số cột cho c
Ví dụ: Nếu có ma trận M ở trên
Nếu gọi lệnh : S=size(M) , ta nhận được:
Nếu A là một véc tơ, thì B = cumsum(A) sẽ tạo ra véc tơ B, trong đó các phần tử là tổng tích lũy của các phần tử trong véc tơ A, được tính theo công thức cụ thể.
Nếu A là một ma trận, hàm cumsum(A) sẽ trả về một ma trận có kích thước tương đương với A, trong đó mỗi phần tử là tổng tích lũy của các phần tử trong từng cột của ma trận A.
Hàm B = cumsum(A, dim) tạo ra ma trận B có kích thước tương đương với ma trận A, trong đó các phần tử của B là tổng tích lũy của các phần tử trong ma trận A theo chiều hàng hoặc cột, tùy thuộc vào giá trị của Cụ thể, cumsum(A, 1) tính tổng dọc theo các cột, trong khi cumsum(A, 2) tính tổng dọc theo các hàng.
Tính toán độ lệch giữa các phần tử trong mảng
Y = diff(X, n ) diff(S) đạo hàm của S theo biến tự do diff(S,’v’) đạo hàm của S theo biến v diff(S,’v’,n) đạo hàm cấp n của S theo v
Chú ý: Trong đó S là hàm toán học
Y = diff(X) tính ra độ lệch giữa các phần tử kề nhau của véc tơ X
Nếu X là véc tơ kết quả đưa ra là véc tơ ít hơn X 1 phần tử:
Nếu X là ma trận , hàm diff(X) đưa ra kết quả là ma trận cột các độ lệch :
Y = diff(X, n ) Đưa ra véc tơ độ sai lệch bậc n : như vậy diff(X,2) cho ra cùng kết quả với diff(diff(X))
Vớ dụ: Tính đạo hàm của y = sinx 3 syms x % khai bao x la bien kieu symbolic y=sin(x^3); z=diff(y) % dao ham cua y z 3*cos(x^3)*x^2 % sinh vien kiem tra ket qua
>>pretty(z) % hien thi dang quen thuoc
Các ví dụ ứng dụng
2.5.1 Tính toán độ cứng của nhíp:
Hệ số thực nghiệm α được xác định là 0.85, trong khi mô đun đàn hồi của vật liệu E có giá trị là 2,1 x 10^6 Công thức ak+1 = l1 - lk+1 sử dụng với lk là 1/2 chiều dài của lá nhíp thứ k, tính từ quang treo đến đầu mút của lá.
Yk Bảng 2.2 Chỉ số các lá nhíp
Dữ liệu đã biết Chỉ số của lá Bề rộng b, cm Bề dầy lá nhíp h, cm Mô men quán tính J, cm 4
1/2 Chiều dài các lá nhíp (tính từ quang treo đến đầu mút của lá) l(1)h.5;l(2)g.2;l(3)W.6;l(4)P.4;l(5)C.0;l(6)5.0;l(7)(.0;l(8) 6;l(9)=1 3.0
Các lệnh Matlab dùng để tính độ cứng của nhíp
%% Tính toán các đặc tính hình học của lá nhíp
Yk=1./Jk;Yk(10)=0;DYk=-diff(Yk); a=l(1)*ones(1,10)-l;a=a(2:10);
%% Tính độ cứng của nhíp
Sau khi chạy được kết quả
2.5.2 Tính toán bền các lá nhíp
Phản lực tác động tại các đầu mút của lá nhíp được xác định từ hệ phương trình:
Trong đó Ak, Bk, Ck được xác định từ các biểu thức:
1 k k ở đây: lk là 1/2 chiều dài của lá nhíp thứ k (tính từ quang treo đến đầu mút của lá)
Jk là mô men quán tính mặt cắt ngang của lá nhíp thứ k :
Ví dụ : Tính ứng xuất tác dụng lên các lá nhíp có số liệu cho trong bảng dưới đây
Bảng 2.3 Dữ liệu các lá nhíp và tải trọng
Khoảng cách giữa bu lông ngàm nhíp: 12 cm
Tải trọng đặt lên nhíp 900 Kg
Jk=b*h.^3/12;Jk1=Jk(2:6);Jk=Jk(1:5);
A=0.5*Jk1./Jk.*(3*Lk./Lk1-ones(1,5));
C=0.5*(Lk1./Lk).^3.*(3*Lk./Lk1-ones(1,5)); p=zeros(5,1);p(1)=-Q/2*A(1);
%% Thiết lập ma trận hệ số
M=diag(Ak,-1)+diag(Bk)+diag(Ck,1);
%% Tính toán các phản lực
Các công cụ toán học thông thường của Matlab …
Các công cụ xử lý đa thức
3.1.1 Định nghĩa đa thức trong MATLAB
- Malab sử dụng một véc tơ hàng để định nghĩa các hệ số của đa thức
Số lượng phần tử trong véc tơ tương ứng với bậc của đa thức cộng thêm 1; ví dụ, một đa thức bậc 3 sẽ có 4 hệ số Phần tử đầu tiên của véc tơ là hệ số của bậc cao nhất, trong khi các phần tử không có giá trị sẽ được coi là có hệ số bằng 0.
- Giá trị của đa thức xác định bằng hàm polyval: polyval(p,x)
Ví dụ: Xác định trị số của đa thức P=X 4 +3X 3 -2X+5 tại điểm X=4.5 ta dùng các lệnh sau: p=[1 3 0 -2 5]; v=polyval(p,4.5)
3.1.2 Các phép tính trên đa thức a, Giải các phương trình đại số bậc cao
Hàm r = roots(c) trả về một véc tơ r chứa các nghiệm của đa thức C Véc tơ hàng C bao gồm các hệ số của đa thức, với n+1 phần tử, đa thức sẽ có dạng tương ứng.
Chú ý: hàm ngược của roots là hàm poly: P=poly(r) sẽ đưa ra véc tơ hệ số của đa thức có nghiệm là véc tơ r
Ví dụ: Đa thức (s 3 – 6s 2 – 72s – 27) được mô tả trong Matlab bằng véc tơ : p = [1 -6 -72 -27]
Nghiệm của đa thức được xác định bằng lệnh: r = roots(p) r 12.1229
-0.3884 b, Cộng (trừ ) các đa thức
Cộng trừ trực tiếp các hệ số, các đa thức phải cùng cỡ hoặc được biến đổi cho cùng cỡ c, Nhân hai đa thức:
Nếu véc tơ u có m phần tử và véc tơ v có n phần tử, thì véc tơ w sẽ có chiều dài là n + m - 1 Phần tử thứ k của véc tơ w được tính theo công thức: w(1) = u(1) * v(1), w(2) = u(1) * v(2) + u(2) * v(1), và w(3) = u(1) * v(3) + u(2) * v(2) + u(3) * v(1).
Hàm deconv trong MATLAB thực hiện phép chia đa thức v cho đa thức u, cho ra hai véc tơ q và r Véc tơ q đại diện cho đa thức kết quả, trong khi véc tơ r mô tả phần dư của phép chia Kết quả có thể được diễn đạt bằng công thức v = conv(u, q) + r.
Tích của hai đa thức sẽ là: c = conv(u,v) c 10 40 100 160 170 120
Nếu sử dụng hàm chia đa thức ta nhận được
[q,r] = deconv(c,u) q 10 20 30 r 0 0 0 0 0 0 e, Đạo hàm các đa thức
Hàm polyder có khả năng tính đạo hàm của đa thức, bao gồm cả tích và thương của hai đa thức Khi sử dụng k = polyder(p), kết quả trả về là véc tơ hệ số của đạo hàm đa thức p Tương tự, k = polyder(a, b) sẽ cung cấp véc tơ hệ số của đạo hàm tích hai đa thức a và b.
[q,d] = polyder(b,a) đưa ra kết quả là đa thức tử số (véc tơ q) và đa thức mẫu số (véc tơ d) của đạo hàm thương hai đa thức b/a
Thí dụ: Đạo hàm của tích: có thể nhận được bằng lệnh a = [3 6 9]; b = [1 2 0]; k = polyder(a,b) k 12 36 42 18
Kết quả này đại diện cho đa thức :
Ta sẽ nhận được q -18 -18 r 1 4 4 0 0, có nghĩa là đạo hàm biểu thức:
Công cụ nội suy
3.2.1 Hàm nội suy một biến:
Cú pháp: yi = interp1(x,Y,xi) yi = interp1(x,Y,xi, method )
Trong đó, x và y là hai véc tơ có cùng kích thước, xác định các điểm (xi, yi) Véc tơ x cần được sắp xếp theo thứ tự tăng dần hoặc giảm dần, với các giá trị xi nằm trong khoảng từ x(1) đến x(n) Phương pháp nội suy được quy định bởi method, với các giá trị tương ứng.
'linear' chế độ nội suy tuyến tính (default) 'nearest' chế độ nội suy sử dụng giá trị ở nút gần nhất 'spline' nội suy hàm spline bậc 3
'cubic' chế độ nội suy đa thức bậc 3
Ví dụ ta có các dữ liệu dân số của nước mỹ ở các thời điểm cách nhau 10 năm như sau t = 1900:10:1990; p = [75.995 91.972 105.711 123.203 131.669
150.697 179.323 203.212 226.505 249.633]; hàm: interp1(t,p,1975) sẽ cho ta giá trị nội suy về dân số vào năm 1975: với kết quả là: ans 214.8585
3.2.2 Hàm nội suy hai biến: a, Dùng hàm interp2
ZI = interp2(X,Y,Z,XI,YI, method )
Hàm ZI = interp2(X,Y,Z,XI,YI) tạo ra ma trận ZI, chứa các giá trị tương ứng với các phần tử trong ma trận XI và YI thông qua phép nội suy hai biến từ các ma trận X, Y và Z Để thực hiện phép nội suy này, các ma trận X và Y cần phải được sắp xếp theo thứ tự tăng hoặc giảm dần và có cùng kích thước, điều này được đảm bảo bởi lệnh meshgrid.
Trong MATLAB, hàm interp2 cho phép sử dụng các ma trận XI và YI để tính toán giá trị tại các điểm (XI(i,j), YI(i,j)) Ngoài ra, người dùng có thể nhập các véc tơ hàng và cột xi và yi, và hàm interp2 sẽ tự động chuyển đổi chúng thành các ma trận tương tự như khi sử dụng lệnh meshgrid(xi,yi).
ZI = interp2(Z,XI,YI) sẽ coi như các véc tơ X = 1:n và Y = 1:m, ở đây [m,n] size(Z)
ZI = interp2(X,Y,Z,XI,YI,method) cho phép sử dụng các phương pháp nội suy khác nhau:
'linear' chế độ nội suy tuyến tính (default) 'nearest' chế độ nội suy sử dụng giá trị ở nút gần nhất 'spline' nội suy hàm spline bậc 3
Chế độ nội suy đa thức bậc 3 'cubic' giúp tăng tốc độ nội suy khi các mốc nội suy cách đều Để đạt được hiệu quả cao hơn, chúng ta có thể sử dụng các chế độ khác như '*linear', '*cubic', '*spline', hoặc '*nearest'.
Ta có dữ liệu về tiền lương của công nhân ở các năm từ 1950 đến 1999 theo thời gian phục vụ như sau: years = 1950:10:1990; service = 10:10:30; wage = [150.697 199.592 187.625
Từ cơ sở dữ liệu này ta có thể xác định được tiền lương của công nhân ở năm 1975 với
15 năm phục vụ: w = interp2(service,years,wage,15,1975) w 190.6287 b, Sử dụng hàm meshgrid
Tạo ra ma trận x và y dùng cho đồ thị ba chiều và xác định giá trị của hàm 2 biến
Hàm [X,Y] = meshgrid(x,y) chuyển đổi các véc tơ x và y thành các ma trận X và Y, phục vụ cho việc tính toán giá trị của hàm hai biến và tạo đồ thị lưới ba chiều Các hàng trong ma trận X là bản sao của véc tơ x, trong khi các cột của ma trận Y là bản sao của véc tơ y.
[X,Y] = meshgrid(x) có ý nghĩa giống như [X,Y] = meshgrid(x,x) [X,Y,Z] = meshgrid(x,y,z) Tạo ra các mảng 3 chiều dùng để xác định giá trị hàm 3 biến hoặc để vẽ đồ thị khối 3 chiều
Hàm meshgrid hoạt động tương tự như hàm ndgrid, nhưng có sự khác biệt ở thứ tự của hai tham số đầu vào và đầu ra, tức là thứ tự này bị hoán đổi giữa hai hàm.
[X,Y,Z] = meshgrid(x,y,z) sẽ cho cùng kết quả như câu lệnh
[Y,X,Z] = ndgrid(y,x,z) meshgrid chỉ dùng trong không gian hai hoặc 3 chiều
3.2.3 Phép nội suy 3 biến và n biến a, Sử dụng hàm interpn
VI = interpn(X1,X2,X3, ,V,Y1,Y2,Y3, ) Nội suy để tìm giá trị
VI của hàm nhiều biến V được xác định tại các điểm thông qua các véc tơ Y1, Y2, Y3, Để định nghĩa hàm V, cần sử dụng các mảng X1, X2, , Xn nhằm xác định các điểm mà dữ liệu của hàm được đưa ra.
Hàm interpn có khả năng xử lý các ma trận Y1, Y2, Y3, để tạo ra véc tơ VI với các giá trị tương ứng tại các điểm (Y1(i,j), Y2(i,j), Y3(i,j), ) Chúng ta có thể thay thế các ma trận này bằng các véc tơ y1, y2, y3, và trong trường hợp này, interpn sẽ chuyển đổi các véc tơ thành ma trận tương tự như khi sử dụng hàm ndgrid(y1, y2, y3, ).
VI = interpn(V,Y1,Y2,Y3, ) Nội suy như trên và coi X1 1:size(V,1), X2 = 1:size(V,2), X3 = 1:size(V,3),
VI = interpn( ,method) xác định phương pháp nội suy
'linear' đối với nội suy tuyến tính (mặc định)
'cubic' nội suy đa thức bậc 3
'spline' nội suy spline bậc ba
'nearest' nội suy lấy giá trị nút gần nhất b, Sử dụng hàm ndgrid
Tạo ra mảng n chiều dùng để xác định giá trị của hàm nhiều biến và nội suy
Hàm ndgrid(x1, x2, x3, ) chuyển đổi các véc tơ x1, x2, x3 thành các mảng X1, X2, X3, giúp xác định giá trị của hàm nhiều biến hoặc thực hiện nội suy cho hàm nhiều biến Mỗi chiều thứ i của mảng Xi là bản sao của các phần tử trong véc tơ xi.
[X1,X2, ] = ndgrid(x) có cùng kết quả như [X1,X2, ] ndgrid(x,x, )
Sử dụng hàm ndgrid để vẽ đồ thị lưới hàm : Z x 1 e x 1 2 x 2 2
Hình 3.1 Đồ thị lưới sử dụng hàm ndgrid
Hàm ndgrid hoạt động tương tự như hàm meshgrid, nhưng với hai đối số đầu của các biến vào và ra được tráo đổi Điều này có nghĩa là cú pháp sử dụng hàm ndgrid sẽ khác so với hàm meshgrid.
[X1,X2,X3] = ndgrid(x1,x2,x3) cho kết quả cũng giống như câu lệnh
3.2.4 Nội suy bằng hàm polyfit
Hàm p = polyfit(x,y,n) xác định các hệ số của đa thức bậc n phù hợp với dữ liệu x và y, dựa trên nguyên tắc tối thiểu hóa độ lệch bình quân bình phương Kết quả trả về là một véc tơ p có độ dài n+1, chứa các hệ số của đa thức được sắp xếp theo thứ tự giảm dần của số mũ.
[p,s] = polyfit(x,y,n) đưa ra đa thức hệ số p, s dùng để ước lượng sai số
3.2.5 Nội suy bằng hàm spline
Cú pháp yy = spline(x,y,xx) pp = spline(x,y)
Hàm spline cho phép tạo ra hàm nội suy bậc 3 bằng cách nhận các giá trị y tại các điểm x Cụ thể, hàm yy spline(x,y,xx) sẽ trả về giá trị của hàm tại các điểm được chỉ định trong véc tơ xx Để có được dạng pp của hàm nội suy, ta sử dụng lệnh pp = spline(x,y), và kết quả có thể được tính toán với lệnh ppval.
Thể hiện dữ liệu về dân số của mỹ (tính bằng đơn vị triệu người), biểu thức spline(t , p , 2000)
Sử sụng hàm spline bậc 3 để ngoại suy và dự đoán dân số năm 2000 kết quả sẽ là: ans 270.6060
Tối ưu các hàm số
3.3.1 Xây dựng các hàm người dùng trong Matlab a, Một số nguyên tắc cơ bản
Tên của hàm và tên của M-file cần phải trùng nhau
Tên của hàm có thể chứa tới 31 ký tự, không có khoảng trống và bắt đầu bằng chữ cái
Để định nghĩa một hàm, dòng đầu tiên phải bắt đầu bằng từ khóa "function", theo sau là các biến chứa kết quả trả về của hàm, tên hàm và các biến đại diện cho dữ liệu đầu vào.
Các dòng hướng dẫn (sẽ được hiện ra khi dùng lệnh help trong matlab) được đưa vào ngay sau dòng đầu tiên, ở cột thứ nhất cần có dấu %
Tất cả các lệnh tiếp theo sẽ tạo thành thân hàm, nơi mà các lệnh này sử dụng dữ liệu đầu vào để sản xuất dữ liệu đầu ra.
Hàm sẽ dừng lại khi đến cuối tệp hoặc gặp từ khoá return
Khi sử dụng lệnh error, hàm có thể ngừng hoạt động và trả điều khiển về cửa sổ lệnh Đồng thời, hàm cũng có khả năng gọi các tệp script, nhưng các biến trong tệp này chỉ tồn tại trong môi trường làm việc của hàm.
Nhiều hàm có thể tồn tại trong một tệp, các hàm con thường đặt sau hàm chính theo bất kỳ trật tự nào
Các hàm con có thể được gọi từ hàm chính hoặc từ bất kỳ hàm con nào khác Để định nghĩa biến tổng thể, ta sử dụng lệnh global, trong khi đó, biến cục bộ chỉ có hiệu lực trong phạm vi của hàm mà nó được khai báo.
Mô tả global X Y Z định nghĩa X, Y, và Z là các biến tổng thể
Trong Matlab, mỗi hàm thường được định nghĩa bởi tệp M-file và có các biến cục bộ, tách biệt với các hàm khác Tuy nhiên, có những trường hợp cần gọi biến được định nghĩa trong các hàm khác Những biến có thể sử dụng chung trong nhiều hàm này được gọi là biến tổng thể (global variable).
Khi định nghĩa biến tổng thể (dùng lệnh global) nhưng chưa gán giá trị, các biến này có giá trị bằng 0
Trong môi trường làm việc của MATLAB, nếu có một biến trùng tên với biến tổng thể mà bạn đã định nghĩa, MATLAB sẽ cảnh báo và hiển thị giá trị hiện tại của biến liên quan đến biến tổng thể đó.
Sử dụng hàm clear global để xóa các biến tổng thể khỏi môi trường làm việc, trong khi hàm clear chỉ xóa biến khỏi môi trường làm việc hiện tại mà không làm ảnh hưởng đến giá trị của biến tổng thể.
3.3.2 Tìm điểm 0 của hàm số
Cú pháp z = fzero(' fun ',x,tol)
Hàm fzero('fun',x, tol) tìm điểm mà tại đó hàm fun nhận giá trị 0
Trong lệnh này : fun là một chuỗi chỉ ra tên của tệp dùng để định nghĩa hàm số thực
Nếu x là một giá trị vô hướng thì fzero sẽ tìm ra điểm 0 gần với giá trị của x của hàm được định nghĩa
Nếu x là một véc tơ có hai phần tử, hàm fzero sẽ xác định điểm không nằm trong khoảng giá trị giữa hai phần tử đó Tham số tol quy định sai số tương đối của nghiệm tìm được Nếu không chỉ định giá trị tol, hàm sẽ sử dụng giá trị sai số tương đối mặc định.
Tìm nghiệm của phương trình X 3 -2X-5=0 ở gần điểm x=2
Trước hết ta phải viết một M.file định nghĩa hàm f: function y = f(x) y = x.^3-2*x-5; Để xác định nghiệm gần x=2 ta gọi lệnh sau trong môi trường Matlab: z = fzero('f',2) z 2.0946
Hàm fzero được sử dụng để xác định điểm mà đồ thị của hàm số cắt trục hoành, không phải là điểm mà đồ thị chỉ tiếp xúc với trục hoành.
Dùng để xác định cực tiểu của hàm 1 biến
Cú pháp x = fmin(' fun ',x1,x2) x = fmin(' fun ',x1,x2,options)
Hàm fun là một chuỗi chỉ tên được định nghĩa trong tệp M.file, nhằm khảo sát và xác định giá trị x, tại đó hàm này đạt giá trị cực tiểu cục bộ trong khoảng x1 y=int(S,x,0,1) % tích phân S theo x trên cận [0,1]
>>subs(y) % đổi sang kiểu số b, Sử dụng hàm cumtrapz
Z = cumtrapz(Y) Tính toán tích phân số tích luỹ của hàm đưa ra bởi véc tơ y với đối số là các khoảng chia đơn vị cách đều
Z = cumtrapz(X,Y) là hàm dùng để tính toán tích phân số tích lũy của một hàm, với véc tơ Y là đầu vào và véc tơ X làm đối số Để thực hiện phép tính này, X và Y cần có cùng chiều dài, hoặc X có thể là véc tơ cột trong khi Y là một mảng hai chiều.
Cho kết quả là ans 0 1.0000 2.0000
3.0000 3.5000 8.0000 c, Sử dụng hàm quad, quad8
Cú pháp: q = quad(' fun ',a,b) q = quad(' fun ',a,b,tol) q = quad8( )
Hàm Quad cho phép tính diện tích dưới đồ thị của hàm số thông qua các phương pháp số, cụ thể là tích phân Cú pháp `q = quad('fun', a, b)` sẽ trả về kết quả của phép tích phân số của hàm 'fun' trong khoảng từ a đến b, với 'fun' yêu cầu trả về một véc tơ khi đầu vào là một véc tơ Để quy định sai số tương đối, bạn có thể sử dụng cú pháp `q = quad('fun', a, b, tol)`, trong đó giá trị mặc định của tol là 1.e-3 Bạn cũng có thể sử dụng véc tơ 2 phần tử `tol = [rel_tol, abs_tol]` để thiết lập đồng thời sai số tương đối và tuyệt đối.
Chú ý: Hàm Quad và Quad8 đều sử dụng phương pháp simson để tính tích phân,
Trong đó hàm quad8 sử dụng phương pháp bậc cao
3.4.2 Đạo hàm các hàm số
Tính toán độ lệch và xấp xỉ các đạo hàm
Y = diff(X) tính ra độ lệch giữa các phần tử kề nhau của véc tơ X
Nếu X là véc tơ kết quả đưa ra là véc tơ ít hơn X 1 phần tử:
Nếu X là ma trận , hàm diff(X) đưa ra kết quả là ma trận cột các độ lệch :
Y = diff(X, n ) Đưa ra véc tơ độ sai lệch bậc n : như vậy diff(X,2) cho ra cùng kết quả với diff(diff(X))
Giá trị diff(y)./diff(x) đưa ra kết quả đạo hàm của hàm số y(x)
Lập trình ứng dụng trong Matlab
Các loại dữ liệu dùng trong Matlab
MATLAB sử dụng chế độ ghi số thập phân thông thường với tùy chọn về số chữ số sau dấu phẩy và dấu +, - trước giá trị số (xem lệnh format) Ngoài chế độ ghi số thập phân, người dùng có thể sử dụng kiểu ghi với chữ cái e để xác định số mũ cơ số 10 Đối với số phức, phần ảo được thêm hậu tố là chữ cái i hoặc j Dưới đây là một số ví dụ về dữ liệu số hợp lệ có thể sử dụng trong MATLAB.
Tất cả các số được lưu trữ trong bộ nhớ nội bộ với định dạng dài, bao gồm 16 chữ số sau dấu phẩy, và có giá trị giới hạn từ 10^(-308) đến 10^(308).
Các hằng số thường được sử dụng trong Matlab
Bảng 4.1 Các hằng số thường sử dụng trong Matlab
4.1.2 Các phép tính trên số phức
Số phức được nhập ở dạng Phần thực + phần ảo i
4.1.2.2 các phép tính thực hiện trên số ảo
- Phép cộng: Sử dụng toán tử +, pi 3.14159265 i Đơn vị ảo, -1 j Đơn vị ảo (tương tự i) eps Độ chính xác tương đối của số thực, 2 -52 realmin
Giá trị nhỏ nhất của số thực, 2 -1022 realmax Giá trị lớn nhất của số thực, (2-)2 1023 Inf Vô cùng lớn
NaN Không phải là số
- Phép trừ: Sử dụng toán tử -,
- Phép nhân: Sử dụng toán tử *,
- Phép chia: Sử dụng toán tử /
4.1.2.3 Các hàm xử lý số phức a Hàm real
Lấy ra giá trị phần thực của số phức
Ví dụ: Nếu ta có X=3 +4i, real(X) sẽ cho giá trị 3 b hàm imag
Lấy ra phần ảo của số phức
Ví dụ: với X lấy giá trị như trên, imag(X) sẽ cho giá trị 4 c Hàm conj
Tìm số phức liên hợp của số phức đã cho
Ví dụ: với X lấy giá trị như trên, conj(X) sẽ cho giá trị 3-4i
4.1.3.1 phép gán và tham chiếu đến dữ liệu dạng chuỗi
Phép gán: ='chuỗi'
Tham chiếu đến dữ liệu
Chuỗi là một véc tơ hàng với số phần tử tương ứng với số chữ cái trong chuỗi Để truy cập từng chữ cái, ta chỉ cần gọi phần tử tương ứng trong chuỗi.
Các ví dụ: nếu gán x='String Mat', ta sẽ nhận được x String Mat
Khi gọi x(1), ta nhận được ans = S nếu gọi x(1:6), ta sẽ nhận được ans = String
4.1.3.2 Tạo các mảng với phần tử là chuỗi a, Tạo véc tơ cột các chuỗi:
Nhập trực tiếp yêu cầu các chuỗi có chiều dài bằng nhau, tương tự như các phần tử trong mảng số Nếu các chuỗi có chiều dài khác nhau, cần thêm khoảng trống vào cuối chuỗi ngắn hơn để đảm bảo tính đồng nhất.
Dùng các hàm : char, str2mat, strvcat
Cú pháp: char('chuỗi 1', 'chuỗi 2', ) str2mat('chuỗi 1', 'chuỗi 2', ) strvcat('chuỗi 1', 'chuỗi 2', )
Chú ý : hai hàm char và str2mat có cùng cú pháp, sẽ chèn cả các chuỗi rỗng vào mảng, còn strvcat sẽ bỏ qua chuỗi rỗng
Ví dụ: x=char('first','second', '', 'third') và x=str2mat('first','second', '', 'third') sẽ cho cùng kết quả là véc tơ cột có 4 phần tử x first second third
Tuy nhiên hàm: x= strvcat ('first','second', '', 'third'), sẽ cho kết quả là véc tơ cột có 3 phần tử: x first second third b, Tạo mảng hoặc véc tơ hàng các chuỗi
Mảng khối được nhập như mảng thông thường, chỉ khác là mảng được bao bằng dấu {}
Các phần tử của mảng khối sẽ là các chuỗi ví dụ: x={'first' 'second' 'third'} x 'first' 'second' 'third'
Nếu gọi : x(1), ta nhận được ans 'first'
4.1.3.3 Các hàm dùng trên chuỗi a, Hàm chuyển đổi từ ký tự sang mã ascci và ngược lại
Cú pháp: double(t), t là chuỗi sẽ trả một véc tơ hàng với các phần tử là mã ascci của các ký tự tương ứng trong chuỗi
Chú ý : hàm này có thể dùng trên véc tơ
Ví dụ: a='abc' a abc double(a) ans 97 98 99
* Hàm char: chuyển từ mã ascci sang ký tự
Ví dụ: char(65) sẽ cho ta A
Nếu đối số là mảng các số nguyên, ta nhận được chuỗi ký tự
Hàm char không chỉ chuyển đổi mã ASCII thành ký tự mà còn có khả năng tạo mảng các chuỗi và biến đổi các mảng khối thành mảng thông thường.
Hàm S = char(C) chuyển đổi mảng khối các chuỗi c thành mảng ký tự s, trong đó mỗi phần tử của c trở thành một hàng trong s Ví dụ, với mảng khối x = {'3.123' '4.578'}, kết quả của char(x) sẽ là một mảng ký tự tương ứng.
4.587 b, Hàm chuyển đổi từ dữ liệu số sang chuỗi và ngược lại
* chuyển từ số sang chuỗi: int2str, num2str, mat2str
Hàm int2str: chuyển số nguyên sang chuỗi
Cú pháp : str = int2str(N)
Mô tả: str = int2str(N) Chuyển số nguyên sang chuỗi với định dạng của số nguyên
N có thể là một số nguyên riêng lẻ hoặc mảng các số nguyên Các giá trị thực sẽ được làm tròn trước khi chuyển đổi
Chuyển cỏc ký tự trong một chuỗi sang số thứ tự tương ứng trong bảng mó ASCII
Ví dụ: int2str(2+3) là chuỗi '5' int2str(3.5) =4
Chuyển đổi từ số thực sang chuỗi
Cú pháp str = num2str(A) str = num2str(A,precision) str = num2str(A,format)
Hàm num2str được sử dụng để chuyển đổi các số thực thành chuỗi, rất hữu ích trong việc thêm nhãn hoặc tiêu đề cho đồ thị Cú pháp str = num2str(a) cho phép chuyển đổi mảng A thành chuỗi str với 4 chữ số sau dấu phẩy và số mũ nếu cần Để chỉ định độ chính xác, bạn có thể sử dụng str = num2str(a, precision), trong đó 'precision' quy định số chữ số sau dấu phẩy, với mặc định là 4 Ngoài ra, str = num2str(A, format) cho phép chuyển đổi mảng A theo định dạng được quy định bởi 'format' Ví dụ, num2str(pi) cho kết quả là 3.142, num2str([1/3 3/6]) cho kết quả 0.33333 0.5, và num2str(3/7, 5) cho kết quả 0.42857.
Cú pháp: str = mat2str(A) str = mat2str(A,n)
Hàm `mat2str(A)` chuyển đổi ma trận A thành chuỗi, tối ưu hóa cho dữ liệu đầu vào của hàm `eval` với độ chính xác cao nhất Để chuyển đổi ma trận A thành chuỗi với n chữ số sau dấu phẩy, bạn có thể sử dụng cú pháp `mat2str(A,n)`.
Chú ý: Hàm mat2str chỉ được thực hiện trên các giá trị số, véc tơ hoặc mảng chữ nhật
Câu lệnh b = mat2str(A) cho kết quả: b [1 2 ;3 4 ]
* chuyển từ chuỗi sang số, thực hiện các phép tính: hàm eval
Cú pháp eval( expression ) [a1,a2,a3, ] = eval( expression ) eval( expression,catch_expr ) Công dụng: Chuyển đổi chuỗi ký tự thành biểu thức
Hàm eval(expression) thực hiện biểu thức được mô tả trong chuỗi 'expression' Bạn có thể tạo 'expression' bằng cách kết hợp các chuỗi con và các biến trong ngoặc vuông theo định dạng: expression = [string1, int2str(var), string2, ].
Hàm `eval(expression)` thực thi biểu thức `expression` và trả về kết quả trong các biến đầu ra được chỉ định Biểu thức cần được định dạng như sau: `eval('[a1,a2,a3, ] = function(var)')` Ngoài ra, `eval(expression, catch_expr)` cho phép thực thi biểu thức `expression` và nếu có lỗi xảy ra, nó sẽ thực hiện biểu thức `catch_expr` Trong trường hợp `expression` gặp lỗi, chúng ta có thể lấy chuỗi báo lỗi thông qua hàm `lasterr`.
- Nếu ta có x='5+6-sin(pi)', hàm y=eval(x) sẽ cho kết quả: y
- eval(['sin(pi/2)' '+' 'cos(pi)']), cho kết quả là 0
Chuyển chuỗi (dạng số) sang số thực
- Giải thích: s: chuỗi dạng số n: số thực
Cú pháp: s = sprintf(format,A, ) [s,errrmsg] = sprintf(format,A, )
Câu lệnh `s = sprintf(format, A, )` được sử dụng để định dạng dữ liệu trong ma trận A dựa trên chuỗi mẫu 'format', và kết quả sẽ được lưu vào biến chuỗi s `sprintf` có chức năng tương tự như `fprint`, nhưng khác ở chỗ `fprint` thường được dùng để xuất dữ liệu ra tệp.
Chuỗi định dạng quy định cách thức ghi chú, căn chỉnh, số lượng chữ số và độ rộng của trường Nó có khả năng chứa dữ liệu số, chữ cái và các ký tự điều khiển theo một cấu trúc nhất định.
[s,errrmsg] = sprintf(format,A, ) sẽ trả các dòng báo lỗi vào chuỗi errrmsg
Bảng dưới đây sẽ mô tả các ký tự không nhìn thấy được sử dụng trong định dạng của lệnh sprintf
Bảng 4.2 Các ký tự thoát ký tự Mô tả
\t lùi vào một bước tab
Bảng 4.3 Các quy định chuyển đổi ký tự điều khiển Mô tả
%d chế độ ghi số thập phân dùng dấu chấm động
%e ghi bằng số e (sử dụng e)
%E ghi bằng số e (sử dụng E)
%f Cho phép quy định số chữ số xuất ra
%g Chế độ ghi ngắn gọn %e, %f, Các chữ số 0 phía sau không được in ra
%G Giống %g, nhưng sử dụng E thay cho e
Bảng 4.4 Các ký tự khác
Ký tự Mô tả Ví dụ
Dấu (-) Left-justifies the converted argument in its field %-5.2d
Dấu (+) Luôn in dấu (+ hoặc -) trước số xuất ra %+5.2d
Số (0) Đưa vào các số 0 thay cho các khoảng trống %05.2d
Số nguyên Quy định số lượng chữ số ít nhất được in ra %6f
Số với dấu chấm động)
Số với dấu xác định số lượng chữ số được in sang phải dấu chấm phân cách
Bảng 4.5 Một số ví dụ lệnh sprintf
Lệnh Kết quả sprintf('%0.5g',(1+sqrt(5))/2) 1.618 sprintf('%0.5g',1/eps) 4.5036e+15 sprintf('%15.5f',1/eps) 4503599627370496 sprintf('%d',round(pi)) 3 sprintf('%s','hello') hello sprintf('The array is %dx%d.',2,3) The array is 2x3 sprintf('\n') Xuống dòng
* hàm sscanf Đọc chuỗi theo định dạng quy định, hàm có ý nghĩa như là hàm ngược của sprintf
A = sscanf(s,format,size) [A,count,errmsg,nextindex] = sscanf( )
Hàm `sscanf(s, format)` được sử dụng để đọc dữ liệu từ chuỗi `s`, chuyển đổi dữ liệu theo định dạng được chỉ định trong `format`, và trả về kết quả dưới dạng ma trận `a` Chức năng của `sscanf` tương tự như `fscanf`, nhưng `fscanf` chủ yếu được sử dụng để đọc dữ liệu từ tệp.
Hàm `sscanf(s, format, size)` cho phép đọc một số lượng phần tử nhất định được xác định bởi `size` và chuyển đổi chúng theo định dạng được chỉ định trong `format` Giá trị của `size` có thể nhận nhiều giá trị khác nhau.
Bảng 4.6 trình bày các giá trị size trong hàm sscanf, trong đó n được sử dụng để đọc n phần tử và trả về véc tơ cột, trong khi inf cho phép đọc đến cuối tệp và trả kết quả ra véc tơ cột.
[m,n] Đọc đủ số phần tử để điền vào ma trận m x n phần tử
Nếu ma trận A là kết quả chỉ của việc sử dụng các ma trận chuyển đổi, và size không ở dạng [M,N], véc tơ hàng sẽ được trả
Các lệnh nhập, xuất dữ liệu
4.2.1 Các lệnh nhập dữ liệu
4.2.1.1 Nhập từ bàn phím: Lệnh input
=input('lời nhắc')
=input('lời nhắc', 's')
=Input('lời nhắc') Sẽ hiển thị lời nhắc và chờ người dùng nhập dữ liệu, các dữ liệu này sẽ được gán cho
Khi sử dụng hàm =Input('lời nhắc', 's') để nhập chuỗi, có hai cú pháp khác nhau Cú pháp đầu tiên yêu cầu bạn đặt chuỗi trong dấu nháy đơn (' '), trong khi cú pháp thứ hai cho phép bạn nhập trực tiếp nội dung mà không cần dấu nháy.
Nếu ta ấn enter khi xuất hiện lời nhắc, Matlab sẽ trả kết quả là ma trận rỗng Để xuống dòng ta sử dụng dấu '\n'
Khi sử dụng lệnh s=input('nhập giá trị x= '), máy sẽ hiển thị lời nhắc "nhập giá trị x=" và chờ người dùng nhập giá trị Nếu người dùng nhập số 5, giá trị 5 sẽ được gán cho biến s.
4.2.1.2 Nhập từ hộp thoại: Lệnh inputdlg
Cú pháp: answer = inputdlg(prompt) answer = inputdlg(prompt,title) answer = inputdlg(prompt,title,lineNo) answer = inputdlg(prompt,title,lineNo,defAns)
Prompt: là các dòng nhắc trên các trường dữ liệu, được nhập ở dạng mảng khối các chuỗi lời nhắc
Title: là tiêu đề của hộp thoại, nhập vào ở dạng chuỗi
LineNo: là số nguyên quy định số dòng cho mỗi trường nhập dữ liệu
DefAns: là một mảng khối các chuỗi gán giá trị mặc định
Các dữ liệu nhập vào được gán cho answer dưới dạng mảng khối các chuỗi
Ví dụ prompt = {'Enter matrix size:','Enter colormap name:'}; title = 'Input for peaks function'; lines= 1; def = {'20','hsv'}; answer = inputdlg(prompt,title,lines,def);
Sẽ đưa ra hộp thoại:
Hình 4.1 Hộp thoại lệnh inputdlg
Nếu nhập ở hai hộp các giá trị 40 và red, sau đó nháy OK, ta nhận được: answer={'20' 'red'}
Kết quả nhập vào được lưu trữ dưới dạng mảng khối các chuỗi, vì vậy để sử dụng các giá trị này, ta cần dùng hàm char để chuyển đổi thành mảng thông thường Sau đó, có thể sử dụng các hàm sscanf hoặc eval để chuyển đổi dữ liệu sang dạng số.
4.2.1.3 Nhập dữ liệu từ tệp: Lệnh fread
[A,count] = fread(fid,size,precision)
- Dữ liệu đọc được sẽ ghi vào mảng A, count sẽ ghi lại số phần tử được đọc
- Fid là chỉ số của tệp được mở lấy ra từ lệnh fopen
Kích thước: Định nghĩa số lượng phần tử được lấy ra n: Đọc n phần tử và xuất ra dưới dạng véc tơ cột inf: Đọc đến cuối mảng, các phần tử sẽ được đưa vào ma trận cột.
Để điền vào ma trận m x n, cần đọc đủ số phần tử Các phần tử sẽ được sắp xếp theo thứ tự các cột Nếu không đủ số phần tử, hệ thống sẽ tự động thêm vào các phần tử có giá trị 0.
Bảng 4.7 Ý nghĩa precision trong lệnh fread
4.2.1.4 Mở tệp để ghi hoặc đọc dữ liệu, Lệnh fopen:
Cú pháp: fid = fopen( filename , permission ) Permission: quy định chế độ mở, có thể lấy các giá trị:
- 'w': mở ra để ghi , nếu tệp đã có, nó sẽ xoá toàn bộ nội dung tệp và ghi lại
- 'a': mở ra để ghi thêm
Filename: là tên của tệp sẽ mở được đặt trong dấu ' '
Kết quả sẽ trả ra chỉ số của tệp được mở (con trỏ tham chiếu đến tệp) và gán cho biến fid
To close a specified file, use the command `status = fclose(fid)`, and to close all open files, use `status = fclose('all')` Additionally, to import data from an ASCII formatted file, the `fscanf` command is utilized.
Hàm fscanf(fid, format) cho phép đọc dữ liệu từ tệp với con trỏ fid theo định dạng được chỉ định bởi chuỗi format Trong cú pháp thứ hai, [A, count] = fscanf(fid, format, size), tham số size xác định số lượng phần tử sẽ được đọc, với size có thể nhận nhiều giá trị khác nhau.
Bảng 4.8 Giá trị size trong lệnh fscanf n Đọc n phần tử và trả véc tơ cột inf Đọc đến cuối tệp và trả kết quả ra véc tơ cột
[m,n] Đọc đủ số phần tử để điền vào ma trận m x n phần tử
Số phần tử được đọc thành công sẽ được trả cho biến count
Ví dụ: ta có tệp dữ liệu có tên là 'd:\data\dl.dat' có các số liệu sau:
2.675 6.876 4.576 3.456 Đoạn chương trình sau sẽ đọc dữ liệu từ tệp xếp thành ma trận (4,2) và gán cho biến M f=fopen('d:\data\dl.dat','r');
4.2.2 Các lệnh xuất dữ liệu
4.2.2.1 lệnh disp cú pháp: disp(A)
Hiển thị văn bản hoặc mảng
Mô tả disp(X) Hiển thị giá trị các mảng mà không đưa ra tên mảng, nếu x chứa chuỗi, chuỗi sẽ được in ra màn hình
Cú pháp: count = fprintf(fid, format ,A, ) fprintf( format ,A, )
Hàm `fprintf(fid, format, A, )` dùng để định dạng dữ liệu trong phần thực của ma trận A theo chuỗi định dạng 'format' và ghi vào tệp thông qua con trỏ 'fid' Hàm này sẽ trả về số lượng byte đã được ghi.
- fid là chỉ số của tệp được mở ra để ghi dữ liệu, nhận được từ lệnh fopen Nếu bỏ qua fid, kết quả sẽ in ra màn hình
- format là chuỗi quy định định dạng sẽ xuất ra (xem lệnh sprintf)
Các câu lệnh x = 0:.1:1; y = [x; exp(x)]; fid = fopen('exp.txt' , 'w'); fprintf(fid,'%6.2f %12.8f\n',y); fclose(fid)
Tạo ra tệp dữ liệu có tên exp.txt chứa các dữ liệu:
Dòng lệnh: fprintf('A unit circle has circumference %g.\n',2*pi)
Hiển thị trên màn hình dòng chữ
A unit circle has circumference 6.283186 Để chèn dấu ' ta phải dùng hai dấu ' Ví dụ: fprintf(1,'It''s Friday.\n')
Hiển thị trên màn hình: It's Friday
B = [8.8 7.7; 8800 7700] fprintf(1,'X is %6.2f meters or %8.3f mm\n',9.9,9900,B)
Ghi dữ liệu ra tệp ở dạng mã nhị phân
Cú pháp: count = fwrite(fid,A,precision)
Hàm fwrite(fid, A, precision) trong Matlab cho phép ghi các phần tử của ma trận A vào tệp được chỉ định bởi 'fid' Dữ liệu sẽ được chuyển đổi theo độ chính xác được xác định trong 'precision' và được ghi theo thứ tự cột Tham số 'count' sẽ trả về số lượng phần tử đã được ghi thành công vào tệp, trong khi 'fid' là con trỏ tệp được nhận từ lệnh fopen.
Các lệnh phân nhánh
4.3.1.1 Cú pháp: if expression statements end hoặc if expression statement1 else statements2 end
Hoặc if expression1 statements1 elseif expression2 statements2 else statements3 end
Trong các cú pháp đưa ra ở trên:
- expression là các biểu thức lô gíc, quy tắc viết các biểu thức lô gíc sẽ được trình bày ở dưới đây
- statement là các biểu thức, dòng lệnh của matlab
Trong cú pháp 1, máy kiểm tra biểu thức logic và nếu đúng, sẽ thực hiện các lệnh trong khối if; ngược lại, nếu sai, máy sẽ bỏ qua khối lệnh này và tiếp tục với các lệnh tiếp theo sau câu lệnh if.
Trong cú pháp 2, nếu biểu thức lôgic đúng, máy sẽ thực hiện các câu lệnh statements1; ngược lại, nếu biểu thức lôgic sai, máy sẽ thực hiện các câu lệnh statements2.
Trong cú pháp 3: Nếu expression1 đúng, máy sẽ thực hiện biểu thức statements1
If expression1 is false, the machine will evaluate expression2; if this logical expression is true, the machine will execute statements2; otherwise, it will perform statements3.
Matlab cho phép sử dụng các toán tử lôgic sau:
Bảng 4.9 Các toán tử Logic
STT Toán tử ý nghĩa Ví dụ
1 = = kiểm tra liệu hai biểu thức có bằng nhau không A=B
Để kiểm tra xem mảng X có rỗng hay không, sử dụng hàm kiểm tra trả về giá trị đúng (1) nếu X rỗng và sai (0) nếu không Hàm isequal(a,b ) với cú pháp k = isequal(A,B, ) sẽ xác định tính đồng nhất giữa các mảng, trả về giá trị đúng lôgic khi các mảng có cùng dạng, kích cỡ và nội dung Hàm này rất hữu ích trong việc so sánh nhiều mảng mà không gây lỗi khi kích thước của chúng khác nhau Ngoài ra, hàm ischar(x) cũng được sử dụng để kiểm tra xem x có phải là chuỗi ký tự hay không.
Cho kết quả đúng nếu x là dữ liệu dạng chuỗi d, Các hàm strcmp(s1,s2), strcmp(s1, s2, n)
- Hàm strcmp(s1,s2) so sánh hai chuỗi s1, s2 Nếu hai chuỗi giống nhau sẽ trả kết quả đúng
- Hàm strcmp(s1,s2,n) cho kết quả đúng nếu n ký tự đầu tiên của hai chuỗi như nhau
Khi đối số trong các hàm lôgic là ma trận, máy sẽ kiểm tra từng cặp phần tử trong ma trận Nếu cặp phần tử đúng, giá trị trả về là 1, ngược lại nếu sai, giá trị là 0 Kết quả cuối cùng sẽ là một ma trận chứa các giá trị 1 và 0 Để so sánh hai ma trận, chúng cần phải có cùng kích thước.
The syntax for a switch statement is: `switch switch_expr case case_expr statement, ,statement case { case_expr1,case_expr2,case_expr3, } statement, ,statement otherwise statement, ,statement end` In this context, `switch_expr` refers to an expression that evaluates to either a string or a number.
- Nếu trả ra một số các biểu thức : switch_expr== case_expr Sẽ được thử
Khi lệnh switch được gọi, giá trị của biểu thức switch_expr sẽ được tính toán và so sánh với từng biểu thức case_expr theo thứ tự đã định Nếu một trong các phép so sánh trả về kết quả đúng, nhóm câu lệnh tương ứng sẽ được thực hiện, sau đó thoát khỏi lệnh switch để tiếp tục với các câu lệnh tiếp theo Đối với trường hợp biểu thức case_expr là một mảng khối, từng phần tử trong mảng sẽ được so sánh, và chỉ cần một phép so sánh đúng, khối lệnh trong nhánh case tương ứng sẽ được thực thi.
Nếu tất cả các biểu thức case_expr đều không phù hợp với giá trị của switch_exp
Nhóm lệnh dưới otherwise sẽ được thực hiện
Disp(['unknow unit:' units]) End
Các vòng lặp
4.4.1 Vòng lặp xác định: for
The syntax "for = expression statements end" represents an expression that yields an array This loop executes statements a number of times equal to the number of columns in the array, with the variable taking on the value of the corresponding row vector in each iteration.
Ví dụ: Tạo mảng có các phần tử a(i,j)=1/(i+j-1) a = zeros(n,n) % Preallocate matrix for i = 1:n for j = 1:n a(i,j) = 1/(i+j -1); end end
4.4.2 Vòng lặp không xác định: while
Cú pháp while statements end
Trong đó : là một biểu thức logíc
Khi thực hiện câu lệnh, máy sẽ kiểm tra biểu thức lôgíc; nếu giá trị biểu thức đúng, các câu lệnh trong vòng lặp sẽ được thực hiện Sau khi hoàn thành, máy sẽ quay lại để kiểm tra lại giá trị của biểu thức lôgíc.
Nếu giá trị của biểu thức lô gíc là sai, vòng lặp sẽ kết thúc
Ví dụ a = 0; fa = -Inf; b = 3; fb = Inf; while b-a > eps*b x = (a+b)/2; fx = x^3-2*x-5; if sign(fx) == sign(fa) a = x; fa = fx; else b = x; fb = fx; end end x
Là đoạn chương trình cho phép ta xác định nghiệm của phương trình :
Thoát khỏi vòng lặp một cách cưỡng bức
Mô tả: break Dừng việc thực thi vòng lặp for hoặc while Khi có nhiều vòng lặp lồng vào nhau, break sẽ chỉ thoát khỏi vòng lặp gần nhất
Using the break command in the given problem simplifies the program significantly The initial values are set with a = 0, fa = -Inf, b = 3, and fb = Inf A while loop continues as long as the difference between b and a is greater than eps multiplied by b Within the loop, the midpoint x is calculated as (a+b)/2, and the function fx is evaluated as x^3 - 2*x - 5 If fx equals zero, the loop breaks; otherwise, if the signs of fx and fa are the same, a is updated to x, and fa is updated to fx If the signs differ, b is updated to x, and fb is updated to fx The final value of x is then returned.
Các chương trình con
4.5.1 Phương pháp xây dựng các hàm và chương trình con
Hàm được viết trong m file, tên của m file được bắt đầu bằng ký tự chữ hoặc số và có phần mở rộng là m
Dòng đầu tiên của hàm m file trong Matlab cần phải bao gồm từ khóa "function" và phải tuân thủ đúng cú pháp quy định Cú pháp chuẩn là: function [biến ra1, biến ra2 ] = (biến vào1, biến vào2 ).
Tên của m file phải trùng với
Hàm stat trong tệp stat.m được định nghĩa để tính toán độ lệch chuẩn và giá trị trung bình của một véc tơ x Hàm này nhận đầu vào là véc tơ x, sau đó tính số lượng phần tử n, giá trị trung bình bằng tổng các phần tử chia cho n, và độ lệch chuẩn bằng căn bậc hai của tổng bình phương sai số chia cho n.
Chúng ta có thể định nghĩa hàm con trong hàm chính bằng cách sử dụng từ khóa function bên dưới thân của hàm chính Ví dụ, trong tệp stat.m, hàm con avg được định nghĩa để tính giá trị trung bình Hàm stat nhận đầu vào là x, tính số lượng phần tử n, và gọi hàm avg để tính giá trị trung bình Để tính độ lệch chuẩn, hàm stat sử dụng công thức với hàm avg để lấy giá trị trung bình, từ đó tính toán độ lệch chuẩn.
Khi Matlab không nhận diện một tên hàm, nó sẽ tìm kiếm tệp có tên trùng khớp với tên hàm đó Nếu tìm thấy, Matlab sẽ biên dịch tệp và lưu vào bộ nhớ Một cách tổng quát, khi người dùng nhập một tên vào Matlab, hệ thống sẽ kiểm tra theo trình tự đã định.
1 Kiểm tra xem đó có phải là tên biến
2 Kiểm tra xem đó có phải là tên hàm nội trú trong Matlab
3 Kiểm tra xem đó có phải là hàm m file
Khi gọi một m.file từ dòng nhắc hoặc từ một m.file khác, hàm sẽ được đưa vào bộ nhớ và giữ nguyên cho đến khi bạn thoát khỏi Matlab hoặc sử dụng lệnh clear.
4.5.2 Các đối số vào, ra
- Hàm m-file có thể không chứa đối số nào
- Hàm có thể được gọi với số đối số ra hoặc vào ít hơn số đối số được khai báo trong hàm
Số lượng đối số đầu vào và đầu ra khi gọi hàm có thể được xác định thông qua hai hàm nargout và nargin Cần lưu ý rằng nargout và nargin không phải là biến, do đó không thể thực hiện phép toán trên chúng.
- Khi hàm được gọi ra các biến sử dụng trong hàm chỉ tồn tại tạm thời trong vùng bộ nhớ dành cho hàm
Hàm trong Matlab cho phép sử dụng không giới hạn số lượng tham số đầu vào Để thực hiện điều này, tham số đầu vào cuối cùng cần được khai báo là "varargin", giúp biến đầu vào được xem như một mảng với số lượng phần tử vô hạn.
- Tương tự hàm cũng có thể chứa vô hạn các thông số ra khi ta khai báo bằng varargout
Bên trong hàm M-file các hàm nargin và nargout chỉ ra có bao nhiêu đối số vào và ra được sử dụng khi hàm được gọi ra
Ví dụ: function [x,y]=test(fileName, filePath, Num)
The article discusses the use of the functions `nargin` and `nargout` in MATLAB programming It specifies default values for parameters when fewer than three arguments are provided, setting `Num` to [2,20], the `filePath` to 'c:\My Documents' when only one argument is given, and the `fileName` to 'f.dat' when no arguments are supplied The full file name is constructed by concatenating the file path and file name, and the file is opened for reading The data is read into the variable `k`, and the file is subsequently closed If there are no output arguments, the data is plotted; otherwise, the first and second rows of data are assigned to `x` and `y`, respectively.
4.5.2.2 Câu lệnh varagin và varagout
Cho phép định nghĩa vô số biến vào và ra của hàm trong Matlab
Cú pháp: function varargout = foo(n) y = function bar(varargin)
Hàm varargout = foo(n) cho phép trả về một số lượng không giới hạn các biến từ hàm foo.m, trong khi hàm y = function bar(varargin) chấp nhận nhiều biến đầu vào từ hàm bar.m.
Các câu lệnh `varargin` và `varargout` chỉ được sử dụng trong hàm m.file để chứa các biến tùy chọn đầu vào và đầu ra Chúng cần được định nghĩa là biến cuối cùng trong danh sách khai báo của câu lệnh function.
Hàm sau đây: function myplot(x,varargin) plot(x,varargin{:})
Hàm myplot sẽ thu thập tất cả các biến đầu vào sau biến đầu tiên vào biến varagin, sử dụng danh sách phân biệt bằng dấu ':' để truyền các tham số tùy chọn cho lệnh plot Khi gọi myplot(sin(0:.1:1),'color',[.5 7 3],'linestyle',':'), biến varargin sẽ chứa mảng 1 x 4 với các giá trị: 'color', [.5 7 3], 'linestyle', và ':'.
Hàm sau đây: function [s,varargout] = mysize(x) nout = max(nargout,1)-1; s = size(x); for i=1:nout, varargout(i) = {s(i)}; end
Sẽ đưa ra kích cỡ của mảng x và có thể tuỳ chọn đưa ra từng thành phần của véc tơ cỡ của mảng x Do vậy nếu ta gọi:
Ta sẽ nhận được s = [4 5], rows = 4, cols = 5
Ví dụ: Xây dựng hàm giải phương trình bậc hai function [x1,x2]=gptb2(a,b,c)
% Giai phuong trinh bac hai ax^2+bx+c=0
% Trong do: x1,x2 nghiem thuc hoac phuc
% a,b,c la 3 he so cua phuong trinh
% if nargin1000:
Đồ thị hiện tại không thể hiện rõ ràng mối quan hệ của hàm số Để có kết quả tốt hơn, bạn nên sử dụng lệnh: axis([0 pi/2 0 5]).
5.3.2 Câu lệnh Grid grid off : không vẽ ra các đường lưới grid on : vẽ ra các đường lưới grid: Đảo ngược tình trạng hiển thị hiện thời của lưới.
Ghi chú trên đồ thị
5.4.1 Hàm xlabel, ylabel và zlabel : Đưa vào dòng chú giải các trục x, y, z
Cú pháp: xlabel('string') xlabel(fname) xlabel( ,' PropertyName ',PropertyValue, ) h = xlabel( )
Mỗi trục của đồ thị có thể được gán nhãn riêng thông qua các lệnh xlabel, ylabel hoặc zlabel Cụ thể, lệnh xlabel('string') sẽ thêm ghi chú cho trục x của hệ tọa độ hiện tại Nếu sử dụng xlabel(fname), giá trị của hàm fname sẽ được lấy và hiển thị dưới dạng chuỗi bên cạnh trục x Ngoài ra, chúng ta có thể sử dụng cú pháp xlabel( ,'PropertName',PropertyValue, ) để gán các thuộc tính khác nhau cho nhãn của trục x, giúp tùy chỉnh hiển thị theo nhu cầu.
Chèn vào dòng tên đồ thị
Cú pháp: title('string') title(fname) title( ,'PropertyName',PropertyValue, ) h = title( )
Lệnh title trong đồ họa cho phép người dùng tạo tiêu đề cho đồ thị bằng cách sử dụng cú pháp title('string') để đặt chuỗi 'string' làm tiêu đề Ngoài ra, người dùng có thể sử dụng title(fname) để xác định giá trị của hàm chuỗi fname làm tiêu đề cho đồ thị hiện tại Đặc biệt, cú pháp title( ,'PropertyName',PropertyValue, ) cho phép tùy chỉnh các thuộc tính khác nhau cho tiêu đề của đồ thị, mang lại sự linh hoạt trong việc hiển thị thông tin.
Chèn văn bản vào điểm bất kỳ trên đồ thị
Cú pháp: text(x,y,'string') text(x,y,z,'string') text( 'PropertyName',PropertyValue )
Trong đó x,y là toạ độ của điểm sẽ xuất văn bản ra:
'string' là chuỗi văn bản được xuất ra
Khi cần xuất ra nhiều dòng văn bản, thay vì sử dụng chuỗi 'string', bạn nên sử dụng mảng khối với các phần tử là các dòng văn bản.
This example demonstrates the creation of two cell arrays in MATLAB: one for the `uicontrol` function and the other for the `text` command The first array, `str1`, contains instructions for centering each line in the Uicontrol and suggests checking the `textwrap` function The second array, `str2`, explains that each cell contains a quoted string, allows for specification of string alignment, and mentions the use of LaTeX symbols such as \(\pi\) and \(\chi\).
\Xi'}; str2(4) = {'\bfOr use bold \rm\itor italic font\rm'}; str2(5) = {'\fontname{courier}Or even change fonts'}; plot(0:6,sin(0:6)) uicontrol('Style','text','Position',[80 80 250 65],
'String',str1); text(5.75,sin(2.5),str2,'HorizontalAlignment','right' )
Kết quả nhận được như sau:
Hình 5.4 Văn bản được chèn vào đồ thị
5.4.4 Sử dụng các biến trong chuỗi văn bản
Tất cả các biến chuỗi có thể thay thế cho chuỗi 'string' trong các câu lệnh Ví dụ, với dữ liệu véc tơ cột như sau: PersonalData = ['Jack Straw ';'489 Main St.';'Wichita KN ']; để hiển thị thông tin này trên màn hình đồ họa, ta sử dụng các câu lệnh: text(x1,y1,['Name: ',PersonalData(1,:)]) text(x2,y2,['Address: ',PersonalData(2,:)]) text(x3,y3,['City and State: ',PersonalData(3,:)]).
When a variable contains numerical data, it must be converted to a string format For example, using the code `x = 21; text(xcoord, ycoord, ['Today is the ', num2str(x), 'st day.'])` will display the message 'Today is the 21st day.' at the specified coordinates (xcoord, ycoord).
5.4.5 Quy định các thuộc tính của văn bản đồ hoạ Để quy định vị trí, cách căn chỉnh, kích cỡ và kiểu font chữ của văn bản đồ hoạ đưa ra bởi các lệnh xlabel, ylabel, zlabel, text, title , chúng ta có thể gán thuộc tính cho các dòng văn bản đó ở dạng :
( , 'Property Name', ) ở đây:
là các câu lệnh viết chữ của Matlab (xlabel, text, title ) 'Property Name' là tên thuộc tính (cần đặt bên trong dấu ' ')
là giá trị của thuộc tính có thể là chuỗi hoặc số nguyên, số thực a, Các thuộc tính của văn bản
Bảng 5.1 Các thuộc tính của văn bản
Tên thuộc tính ý nghĩa giá trị
' FontName' Cho phép quy định kiểu font chữ
Tên font chữ (dạng chuỗi)
'Position' Quy định vị trí đặt chuỗi văn bản toạ độ x và y (z) của điểm: [ x y (z)]
'Rotation' Góc xoay của dòng văn bản Số thực chỉ góc tính bằng độ
'VerticalAlignment' Quy định kiểu căn chỉnh theo phương thẳng đứng
Quy định kiểu căn chỉnh theo phương ngang
'FontSize' quy định cỡ chữ số nguyên b, Xuất các ký tự đặc biệt
Trong các chuỗi đối số của hàm viết chữ trong chế độ đồ họa, bạn có thể sử dụng các ký tự điều khiển để hiển thị chữ cái Hy Lạp, ký hiệu toán học và kiểu font chữ Các mã điều khiển này được đặt sau dấu '\' để thực hiện chức năng tương ứng.
Bảng 5.2 Các ký tự điều khiển dùng để xuất chữ cái hy lạp và biểu tượng
Chuỗi ký tự điều khiển
Chuỗi ký tự điều khiển
Chuỗi ký tự điều khiển
Chúng ta có thể điều khiển trực tiếp kiểu font chữ bằng các ký tự điều khiển:
\fontname Trong trường hợp này tên font chữ sẽ phải đặt trong dấu {} kế tiếp phần điều khiển font chữ, chúng ta có thể thêm các mã điều khiển:
\rm - kiểu chữ bình thường
\fontsize{fontsize} - Định nghĩa cỡ chữ
Các chỉ số trên và dưới được định nghĩa bằng các ký tự điều khiển "_" và "^"
5.4.6 các ví dụ Để hiển thị ngày hiện thời trên tiêu đề của đồ thị ta dùng hàm: title(date) Để đưa vào các chuỗi số ta dùng các lệnh sau: f = 70; c = (f 32)/1.8; title(['Temperature is ',num2str(c),'C'])
Include a variable's value in a title and set the color of the title to yellow: n = 3; title(['Case number #',int2str(n)],'Color','y')
Include Greek symbols in a title: title('\ite^{\omega\tau} = cos(\omega\tau) + isin(\omega\tau)')
Include a superscript character in a title: title('\alpha^2')
Include a subscript character in a title: title('X_1')
To create a graph of the sine function, use the following code: t = -pi:pi/100:pi; y = sin(t); plot(t,y); axis([-pi pi -1 1]); xlabel('-\pi \leq t \leq \pi'); ylabel('sin(t)'); title('Graph of the sine function'); text(1,-1/3,'Note the odd symmetry.') This will produce a visual representation highlighting the sine function's odd symmetry, as illustrated in the accompanying figure.
Hình 5.5 Giao diện đồ thị tổng quát trong Matlab
5.4.7 Các tuỳ chọn của lệnh plot
Trong lệnh plot ta có thể đưa vào các tuỳ chọn ở dạng: plot( ,'PropertyName',PropertyValue, )
Trong đó 'PropertyName' là tên các thuộc tính,
PropertyValue là giá trị của thuộc tính mà ta muốn gán:
Dưới đây là bảng liệt kê các thuộc tính của đồ thị:
Bảng 5.3 Các thuộc tính của đồ thị
Tên thuộc tính ý nghĩa kiểu giá trị
'LineWidth' điều khiển bề dầy của nét vẽ đồ thị số nguyên
'MarkerEdgeColor' Điều khiển màu của nét vẽ biểu tượng đánh dấu điểm các ký tự chỉ màu ví dụ:'g','y'
'MarkerSize' Kích thước của biểu tượng đánh dấu điểm số nguyên
'MarkerFaceColor' Điều khiển màu của biểu tượng đánh dấu điểm các ký tự chỉ màu ví dụ:'g','y'
Ví dụ: plot(x,sin(2*x),'-mo',
5.4.8 Các lệnh viết chữ khác a, Lệnh gtext
Cú pháp: gtext('string') h = gtext('string')
Mô tả gtext sẽ hiển thị chuỗi văn bản tại vị trí chỉ định bằng chuột trên đồ thị b, lệnh ginput
Nhập dữ liệu của các điểm bằng chuột
Hàm x,y] = ginput(n) cho phép người dùng chọn n điểm bằng chuột và trả về tọa độ x và y của các điểm đã chọn Bạn có thể kết thúc việc chọn điểm trước khi đạt đủ n điểm bằng cách nhấn Enter Ngoài ra, hàm x,y] = ginput cũng cho phép chọn số điểm không giới hạn.
Các đồ thị dạng lưới và bề mặt
5.5.1 Các hàm tạo bề mặt
Matlab định nghĩa bề mặt lưới thông qua các tọa độ Z trên lưới mặt phẳng XY, sử dụng các đường thẳng để kết nối các điểm kề nhau Hàm mesh và surf được sử dụng để hiển thị các bề mặt trong không gian ba chiều Trong khi mesh cung cấp hình ảnh bề mặt dạng khung dây với màu sắc chỉ ở các đường nối, hàm surf hiển thị màu sắc cho cả đường nối và bề mặt.
5.5.2 Trực quan hóa các hàm hai biến Để hiển thị hàm 2 biến z=f(x,y), hãy tạo các ma trận x và y chứa đựng các hàng và cột lặp Sau đó sử dụng các ma trận này để tính ra đồ thị của hàm
Hàm meshgrid biến đổi phạm vi được xác định bởi hai véc tơ x và y thành các ma trận X và Y, phục vụ cho việc tính toán giá trị của hàm Trong đó, các hàng của ma trận X là những bản sao của véc tơ x, còn các cột của ma trận Y là những bản sao của véc tơ y.
Tạo hai mảng x và y sau
Cho ra đồ thị như hình vẽ
Hình 5.6 Đồ thị trực quan hóa hàm 2 biến
Trong đó R là khoảng cách từ tâm, eps dùng để tránh việc chia cho 0 ở điểm 0,0
In ấn đồ thị
Tuỳ chọn Print trong menu FILE và lệnh print đều phục vụ cho việc in đồ thị Tuỳ chọn Print mở ra hộp thoại cho phép người dùng chọn các tùy chọn in ấn tương tự như các phần mềm khác, trong khi lệnh print cung cấp khả năng linh hoạt hơn và cho phép điều khiển việc in đồ thị từ file Kết quả có thể được gửi trực tiếp đến máy in hoặc lưu trữ trong một tệp xác định, với nhiều định dạng đầu ra khác nhau, bao gồm cả PostScript.
Thí dụ: câu lệnh sau đây ghi hình ảnh của màn hình đồ hoạ ra tệp Postscript cấp 2 có tên là magicsquare.eps: print -depsc2 magicsquare.eps
Trước khi sử dụng lệnh in, điều quan trọng là hiểu rõ khả năng của máy in Chẳng hạn, tệp Postscript cấp 2 thường có kích thước nhỏ hơn và tốc độ in nhanh hơn so với tệp Postscript cấp 1 Tuy nhiên, không phải tất cả các máy in đều hỗ trợ tệp Postscript cấp 2.
Simulink
Simulink và các blocks library
Simulink là một công cụ mở rộng của MATLAB, được sử dụng để mô hình hóa, mô phỏng và phân tích các hệ thống động Phần mềm này thường được áp dụng trong thiết kế hệ thống điều khiển, thiết kế DSP, hệ thống thông tin và nhiều ứng dụng mô phỏng khác.
Simulink, được ghép từ hai từ Simulation và Link, là công cụ mô phỏng mạnh mẽ cho phép mô tả các hệ thống tuyến tính, phi tuyến, và mô hình trong miền thời gian liên tục hoặc gián đoạn Với giao diện đồ họa thân thiện, người dùng có thể dễ dàng xây dựng và khảo sát mô hình thông qua thao tác "nhấn và kéo" chuột, khác hẳn với các phần mềm trước đây yêu cầu nhập phương trình vi phân bằng ngôn ngữ lập trình Việc thành lập mô hình chính là yếu tố quan trọng trong quá trình mô phỏng, và để sử dụng hiệu quả Simulink, người dùng cần có kiến thức cơ bản về điều khiển và lý thuyết điều khiển để phát triển mô hình toán học cho bài toán.
6.2 Tìm hiểu về SIMULINK và các BLOCKS LIBRARY
6.2.1 Cách khởi tạo Simulink và vẽ sơ đồ mô phỏng Để vào Simulink trong Matlab, dùng biểu tượng trên thanh công cụ hoặc ta từ cửa sổ lệnh của Matlab đánh dòng lệnh:
Khi khởi động Simulink xong ta được màn hình cửa sổ Simulink Cửa sổ này hoạt động liên kết với cửa sổ lệnh Matlab
Ta thấy cửa sổ Simulink có nhiều khối chức năng (blocks library), trong đó có nhiều khối chức năng cụ thể
Hình 6.1 Cách vào toolbox SIMULINK trong Matlab
Từ cửa sổ lệnh, chúng ta có thể quan sát các khối thư viện như khối nguồn (Sources), khối đầu đo (Sinks), khối phi tuyến (Nonlinear), khối tuyến tính (Continuous) và khối đầu nối (Signal Routing).
Hình 6.2 Màn hình cửa sổ thư viện SIMULINK
Thư viện Simulink cung cấp nhiều khối chuẩn, cho phép người sử dụng tùy chỉnh hoặc tạo khối riêng Giống như các phần mềm mô phỏng thiết kế mạch điện tử như MicroSim Eval và EWB, Simulink hỗ trợ vẽ sơ đồ mô phỏng và xây dựng mô hình Để hiểu rõ hơn về quy trình thiết kế mô phỏng, chúng ta sẽ thực hiện ví dụ cụ thể (hình 6.7) và làm quen với các thao tác cần thiết để vẽ mô hình này.
1.Từ cửa sổ Matlab đánh lệnh simulink Cửa sổ thư viện các khối xuất hiện
Để bắt đầu xây dựng mô hình, bạn hãy từ cửa sổ thư viện nhấp chuột chọn File/New/Model hoặc sử dụng tổ hợp phím Ctrl+N Màn hình mô hình mới với tên Untitled sẽ được mở ra (hình 6.2).
3 Chọn các blocks ở các thư viện thích hợp:
Hình 6.3 Mô hình phân tích sóng hình sin
Hình 6.4 Chọn vẽ một Model (Scheme) mới
Trong sơ đồ này, chọn các khối từ các thư viện:
+ Thư viện các nguồn tín hiệu (Sources): Chọn Sin wave
+ Thư viện các khối nhận tín hiệu (Sinks): Chọn Scope
+ Thư viện các hàm tuyến tính (Continuous): Chọn Intergrator
Để chọn thư viện trong Simulink, bạn chỉ cần nhấp đúp vào biểu tượng khối đó, và một cửa sổ sẽ hiện ra với tất cả các khối trong thư viện Thư viện nguồn tín hiệu bao gồm tất cả các khối là nguồn tín hiệu, được trình bày rõ ràng như trong hình 6.5.
Người dùng có thể thêm khối vào sơ đồ của mình bằng cách kéo khối từ thư viện hoặc từ mô hình khác Trong ví dụ này, chúng ta chọn khối phát sóng hình sin Để thực hiện, hãy đặt con trỏ chuột lên khối, nhấn giữ phím trái chuột và kéo khối vào cửa sổ vẽ sơ đồ chưa có tiêu đề.
Khi di chuyển khối ta có thể thấy khối và tên của nó di chuyển cùng với con trỏ chuột
Hình 6.5 Cửa sổ thư viện phần nguồn tín hiệu (SOURCES)
Hình 6.6 Khối và tên di chuyển cùng khối
Khi di chuyển con trỏ chuột đến vị trí mong muốn và nhả phím chuột, một bản sao của khối sẽ xuất hiện trong màn hình mô phỏng Nếu không hài lòng với vị trí, bạn có thể dễ dàng di chuyển khối bằng cách tương tự Để tiếp tục xây dựng sơ đồ, bạn có thể sao chép các khối còn lại vào màn hình mô phỏng Để sao chép một khối khác, chỉ cần giữ phím Ctrl và nhấn phím chuột trái, sau đó di chuyển đến điểm cần đặt khối, lúc đó khối sẽ được sao chép Tất cả các khối đã sao chép sẽ hiển thị trong cửa sổ màn hình mô phỏng như minh họa trong hình 6.7.
Khi xem xét kỹ từng khối, chúng ta nhận thấy rằng dấu > bên phải khối biểu thị đầu nối cho ngõ ra tín hiệu, trong khi dấu > bên trái là đầu nối cho ngõ vào Tín hiệu di chuyển từ đầu ra của một khối đến đầu vào của khối khác qua một đường nối giữa hai khối Khi một khối đã được kết nối, biểu tượng > sẽ không còn xuất hiện.
Hình 6.7 Cửa sổ sơ đồ với các khối đã được copy
Hình 6.8 Đầu vào ra của một khối
Để điều chỉnh khối Mux trong Simulink từ ba cổng vào xuống còn hai cổng, bạn cần nhấp đúp vào khối Mux và thay đổi giá trị của thông số “Number of Input” thành 2 Sau khi thực hiện xong, hãy nhấn phím Apply và đóng cửa sổ Mux Simulink sẽ tự động điều chỉnh số cổng vào theo giá trị đã nhập.
Hình 6.9 Cửa sổ thông số khối Mux
Bây giờ, chúng ta có thể kết nối các khối lại với nhau Đầu tiên, hãy kết nối đầu ra của khối phát tín hiệu với đầu vào của khối Mux Việc nối các khối không theo thứ tự bắt buộc; bạn chỉ cần đặt con trỏ chuột tại đầu nối ra của khối, khi đó con trỏ sẽ biến thành dấu cộng Giữ chuột và kéo đến đầu nối vào của khối khác Trong quá trình này, đường nối sẽ hiển thị dưới dạng nét đứt, và con trỏ sẽ chuyển thành dấu cộng kép khi gần khối cần nối.
Hình 6.10 Cửa sổ mô hình trước khi nối
Hình 6.11 Cửa sổ mô hình khi đang nối dây
Ta có thể nối bằng cách nhả phím chuột khi con trỏ ở bên trong khối Khi đó đường nối sẽ nối vào cổng ở gần vị trí con trỏ nhất
Hình 6.12 Hình khối Sin đã nối vào trên khối Mux
Phần lớn các đường nối trong hệ thống kết nối đầu ra của một khối với đầu vào của một khối khác Khi có một đường nối dẫn từ một đường nào đó đến đầu vào của một khối, chúng ta gọi đó là đường rẽ nhánh.
Việc vẽ đường rẽ nhánh có sự khác biệt so với vẽ đường nối chính Để vẽ được rẽ nhánh ta thực hiện như sau:
1 Đặt con trỏ vào điểm cần vẽ đường rẽ nhánh
Hình 6.13 Con trỏ đặt vào điểm cần rẽ nhánh
2 Ấn phím Ctrl + giữ trái chuột, kéo con trỏ chuột tới đầu vào của khối
3 Nhả chuột, Simulink sẽ vẽ một đường từ điểm bắt đầu tới cổng vào của khối Tuy nhiên chúng ra cũng có thể nối dây từ đầu vào (đầu ra) của một khối tới đường nối chính mà không cần giữ phím Ctrl Nhưng việc nối dây sẽ bất tiện do mối nối hình thành không theo ý muốn hoặc không nối được
Hình 6.14 Một đoạn dây không như ý
Kết thúc việc nối dây, mô hình được hiển thị như trên hình 6.15
Trong quá trình nối dây, có thể xảy ra những đường nối không đạt yêu cầu Để khắc phục, bạn có thể xóa hoặc chỉnh sửa chúng bằng cách nhấp chuột vào đoạn dây cần thay đổi, sau đó nhấn phím Delete hoặc di chuyển đoạn dây để điều chỉnh cho hợp lý.
Hình 6.15 Một đoạn dây đã được chọn
Hình 6.16 Cửa sổ mô hình đã được vẽ xong
Thuộc tính của một Block và các phương pháp giải bài toán trong
Trong Simulink, các sơ đồ được xây dựng từ các phần tử gọi là Block Mỗi Block được xác định bởi hai thuộc tính chính: văn phong và cấu trúc.
Thuộc tính về văn phong được mô tả trong bản Style
Bảng 6.1 Thuộc tính văn phòng của một block
Foreground Color Background Color Screen Color Bao gồm :
Drop Shadows : Bật tắt bóng của Block
Orientation : Định hướng chọn Block Sự định hướng này có thể chọn phím nóng Ctrl +R để xoay 90 0 hoặc Ctrl + F để xoay 180 0
Title : Đặt tên cho Block
Bảng 6.2 Thuộc tính đặt tên cho block
Hiện tên Block Ẩn tên Block Tên của Block nằm trên đỉnh block hay bên trái
Tên của Block nằm ở dưới block hay bên phải
Font : Định dạng Font cho Block Color : Màu nền, khung màu chữ cho Block
Thuộc tính về cấu trúc được mô tả trong hộp hội thoại của Block Mở nó bằng cách nhấp đúp chuột vào biểu tượng Block
Trong hộp hội thoại có những thành phần sau:
Khối này được đặt tại vị trí cụ thể, với các thông số cần thiết để hoạt động hiệu quả Các tham số này bao gồm những yếu tố quan trọng giúp tối ưu hóa chức năng của khối Ngoài ra, nút trợ giúp cung cấp giải thích chi tiết về các đặc điểm nổi bật của khối, giúp người dùng hiểu rõ hơn về cách sử dụng và lợi ích của nó.
Hình 6.24 Thuộc tính cấu trúc của một Block
* Các phương pháp giải bài toán mô phỏng trong Simulink:
Trong Simulink, việc giải các bài toán mô phỏng có nhiều phương pháp khác nhau Sau đây là các cách giải được áp dụng trong Simulink
Phương pháp Euler là một phương pháp cổ điển sử dụng bước làm biến Phương pháp này có thể áp dụng cho bất kỳ hệ thống nào với các bước nhỏ, nhưng không đảm bảo độ chính xác cho các bài toán yêu cầu tính toán phức tạp Do đó, phương pháp này chỉ nên được sử dụng để kiểm tra kết quả.
Phương pháp Runge-Kutta 3 và Runge-Kutta 5 là những phương pháp phổ biến, có thể áp dụng cho nhiều loại bài toán khác nhau và đạt tiêu chuẩn chất lượng cao so với các phương pháp đặc biệt khác Những phương pháp này rất phù hợp cho các hệ liên tục và phi tuyến, nhưng không hiệu quả khi làm việc với các hệ có ma sát.
Phương pháp Adams: Là phương pháp tự chỉnh áp dụng cho hệ không có ma sát
Phương pháp Gear: Là phương pháp tự chỉnh áp dụng cho hệ có ma sát
Phương pháp này không làm việc tốt khi hệ bị rối loạn do ngõ vào bị thay đổi liên tục
Phương pháp Adams/Gear là lựa chọn giữa hai phương pháp giải tích phổ biến, trong khi phương pháp LinSim được áp dụng cho các hệ tuyến tính Dù hệ thống có tính chất tuyến tính, nhưng nếu tồn tại một số khối phi tuyến, phương pháp LinSim vẫn hoạt động hiệu quả.
Ứng dụng Simulink trong tính toán
6.4.1 Phương trình dao động của ô tô
Bảng 6.3 Chuyển đổi theo Newton:
Giả thiết khối lượng của hệ thống treo được phân chia đồng đều giữa phần khối lượng treo và phần không treo, mô hình động lực học của hệ thống treo đơn bao gồm hai thành phần chính: phần tử đàn hồi (Cs) và phần tử giảm chấn (Ks), như được thể hiện trong hình 6.25.
Phương trình động lực học của hệ thống:
Trong đó: Zs, Zs’- độ dịch chuyển, tốc độ dịch chuyển của điểm liên kết với khối lượng được treo;
Zu, Zu’- độ dịch chuyển, tốc độ dịch chuyển của điểm liên kết với khối lượng không được treo Hình 6.25 Mô hình hệ thống treo đơn
Sơ đồ khối mô phỏng hệ thống bằng phần mềm Matlab/Simulink
+ Phương trình vi phân mô tả hệ thống hình 6.26:
Z” Sơ đồ mô phỏng hệ thống bằng Simulink như sau:
Hình 6.27 Sơ đồ mô phỏng hệ thống bằng Simulink
6.4.2 Mụ hỡnh dao động ẳ xe
Mô hình 1/4 xe được sử dụng để nghiên cứu dao động của khối lượng treo và không treo trên một trục khi chúng dao động độc lập Hình 2.28 minh họa mô hình vật lý dao động 1/4 xe.
Mô hình dao động 1/4 xe có thể được phân chia thành bốn phần tử chính: bánh xe, khối lượng không được treo, hệ thống treo và phần tử khối lượng được treo.
Hình 6.26 Mô hình hệ thống treo đơn
Phần tử bánh xe nhận hai kích thích đầu vào, bao gồm dịch chuyển của khối lượng không được treo và chiều cao mấp mô của biên dạng đường Đầu ra của phần tử này là lực tương tác giữa khối lượng không được treo và bề mặt đường.
Hình 6.28 Mô hình dao động 1/4 xe
Phương trình động lực học của hệ thống:
-ms - Ks(Z’s – Z’u) – Cs(Zs - Zu) = 0 (1)
-mu + Ks(Z’s – Z’u) + Cs(Zs - Zu) – Kt(Z’u – q’) – Ct(Zu - q) = 0 (2)
Từ (1) Từ (2 ) Để giải hệ phương trình vi phân dùng Simulink có các cách sau: a Cách 1: Dùng kết nối trực tiếp
Hình 6.29 Sơ đồ kết nối trực tiếp
Hỡnh 6.30 Kết quả mụ phỏng mụ hỡnh dao động ẳ xe b Cách 2: Dùng hệ thống con Subsystem
Tách hệ phương trình thành hai hệ thông Subsystem
Hình 6.31 Sơ đồ tách hệ phương trình thành hai hệ thống
Hình 6.32 Sơ đồ kết nối cho phương trình 1 và phương trình 2 sử dụng Subsystem