5. Một số chú ý khi lập trình
Hàm find là một hàm rất quan trọng khi lập trình với MATLAB
giúp tối giản các dòng code và tránh được các vòng lặp trong chương trình
có thể giúp tìm kiếm chỉ số của các phần tử thỏa mãn điều kiện phức tạp
Cách dùng cơ bản: index = find (điều kiện) . ví dụ:
>> x = rand (1, 100);
inds = find (x>0.4 & x<0.6)
%inds sẽ chứa các chỉ số của vector x mà có giá trị nằm giữa 0.4 và 0.6. Câu lệnh đó thực hiện qua các bước:
% x>0.4 : trả lại 1 vector mà các số thỏa mãn điều kiện này là 1, còn không thỏa mãn là 0.
% x<0.6 : tương tự câu lệnh trên
% Toán tử & : tổng hợp 2 kết quả ở trên theo luật logic 1&1 =1, 1&0=0&0=0&1 = 0.
% Cuối cùng lệnh find sẽ trả về các chỉ số được đánh số 1.
Tối ưu hóa mã nguồn: để tối ưu hóa mã nguồn, đòi hỏi bạn tuân theo một số nguyên tắc lập trình nhất định với MATLAB và thực tập lập trình liên tục trong một thời gian dài. Một số nguyên tắc được nêu ra như sau:
Nguyên tắc về đặt tên (cho việc lập trình nói chung)
- Việc đặt tên biến, tên hàm theo một nguyên tắc giúp bạn lập trình hoặc đọc chương trình của mình và của người khác một cách nhất quán, rõ ràng, nhanh chóng hơn.
Đặt tên theo quy tắc sau:
+ tên lớp (class) : Viết hoa chữ cái đầu tiên trong từ. Ví dụ: ConNguoi, DoThi
+ tên hàm, scripts : bắt đầu bằng chữ thường còn lại giống class. Ví dụ: plotSin, veDoThi
+ hằng số: tất cả viết hoa
+ nên đặt tên gợi nhớ, không quá dài, quá ngắn; tránh mập mờ
2. Tránh các vòng lặp không cần thiết khi lập trình MATLAB
- Khi lập trình với MATLAB, để tăng tốc độ thực hiện chương trình, bạn luôn nhớ rằng hầu như các hàm build-in của MATLAB đều chạy nhanh hơn các đoạn code mà chúng ta viết với cùng chức năng sử dụng. Những người phát triển MATLAB đã hoàn thiện mã nguồn của họ và dịch trước các lệnh build-in. We should not reinvent the wheel!
- Vì vậy nên tập sử dụng các hàm được định nghĩa sẵn, nó giúp chương trình ngắn hơn, chạy nhanh hơn.
Ví dụ 1: Cho mảng a, tìm mảng b sao cho mỗi phần tử của b bằng tổng hai phần tử liên tiếp của mảng a. tức là:
b(n) = a(n) + a(n-1) với n>1
b(1) = a(1)
Cách làm thứ 1: dùng vòng lặp, giống như lập trình C/C++ hay Java
a = rand(1,100);
b=zeros(1,100);
for n=1:100
if n==1
b(n) = a(n);
else
b(n) = a(n-1) + a(n);
end
end
Cách làm thứ 2: dùng các build-in của MATLAB
a = rand(1,100);
b = [0 a(1:end-1)] + a;
Rõ ràng cách làm thứ 2 vừa nhanh vừa đỡ phức tạp hơn.
Ví dụ 2 sẽ cho thấy khả năng của lệnh find. Tìm các phần tử dương của mảng x, với x = sin(linspace(0,10*pi,100))