Các phép toán với ma trận trong matlba

Trong hệ thống du lịch thông minh, lập lộ trình tự động là một trong những chức năng phức tạp nhưng rất quan trọng và cần thiết cho du khách trước và trong hành trình thăm quan của mình. Chức năng này không chỉ yêu cầu tạo ra phương án lộ trình phù hợp với điều kiện của du khách một cách nhanh chóng, mà còn phải tối ưu về thời gian thăm quan và hiệu quả kinh tế. Trong bài báo này, chúng tôi trình bày một thuật toán lập lộ trình tự động mới dựa trên ý tưởng của bài toán lập lịch TSP (Traveling Salesman Problem) và bổ sung tham số về thời gian du lịch hợp lý, được gọi là TPA (Travel Planning Algorithm). Thuật toán TPA được cài đặt trong hệ thống du lịch thông minh đa nền tảng của tỉnh Thái Nguyên. Dựa vào điểm du lịch được gợi ý trong quá trình lựa chọn điểm thăm quan của du khách, thuật toán TPA hoạt động ổn định và lập được lộ trình du lịch tốt hơn so với chức năng lập lộ trình trong hệ thống du lịch thông minh của TripHunter và Tập đoàn bưu chính viễn thông Việt Nam (VNPT).

MATLAB viết tắt của từ “matrix laboratory”. Phần mềm Matlab được tạo ra nhằm mục đích làm việc với toàn bộ ma trận và mảng ( không như các phần mềm khác chỉ làm việc với các phần tử số tại 1 thời điểm).

Tất cả các biến trong matlab là mảng nhiều chiều, không kể đó là loại dữ liệu nào (từ số đến chuỗi kí tự). Mộ ma trận là một mảng 2 chiều, 1 vector là mảng 1 chiều. Để sử dụng được chúng thì người dùng nên có kiến thức về đại số tuyến tính.

Các phép toán với ma trận trong matlba

Tạo mảng Array

Để tạo mảng có 4 phần tử trên 1 hàng người dùng nhập các phần tử trong dấu ngoặc vuông [], phân biệt các phần tử bằng dấu cách hoặc dấu phẩy (,). Ví dụ mảng 1 chiều a (đây cũng gọi là vector hàng):

a = [1 2 3 4] a = 1 2 3 4

Để tạo ma trận có nhiều hàng các hàng được phân biệt bằng dấu chấm phẩy (;).

a = [1 2 3; 4 5 6; 7 8 10] a = 1 2 3 4 5 6 7 8 10

Các khác để tạo 1 ma trận đó là sử dụng hàm có sẵn như hàm ones, zeros, hoặc rand. Tuy nhiên các hàm này tạo ra giá trị mặc định (trừ hàm rand). Ví dụ, Tạo 1 ma trận 5 hàng 1 cột gồm các phần tử 0:

z = zeros(5,1) z = 0 0 0 0 0

Các phép toán đối với Ma trận và Mảng MATLAB cho phép người dùng thực hiện các toán tử đại số cho 1 phần tử đối với tất cả các phần tử của ma trận và mảng. Ví dụ:

a + 10 ans = 11 12 13 14 15 16 17 18 20 sin(a) ans = 0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570 0.9894 -0.5440

Để chuyển vị mộ ma trận người ta dùng dấu (‘). Ví dụ:

a' ans = 1 4 7 2 5 8 3 6 10

Người dùng cũng có thể thực hiện phép nhân ma trận bằng toán tử nhân (*) nhưng phải tuân theo quy tắc nhân ma trận. Ví dụ ma trận a có thể nhân với ma trận đảo của nó và cho ra ma trận đơn vị (a là ma trận vuông)

p = a*inv(a) p = 1.0000 0 -0.0000 0 1.0000 0 0 0 1.0000

Chú ý trong ví dụ trên p không phải là ma trận có các phần tử nguyên (integer). MATLAB lưu các giá trị số dưới dạng dữ liệu có dấu phẩy động. Người dùng có thể thay đổi và hiển thị ra nhiều giá trị thập phân sau dấu phẩy hơn bằng cách sử dụng câu lệnh format:

format long p = a*inv(a) p = 1.000000000000000 0 -0.000000000000000 0 1.000000000000000 0 0 0 0.999999999999998

Để thiết lập lại định dạng cũ người dùng có thể dùng câu lệnh:

format short

Định dạng chỉ làm thay đổi cách thể hiện các số ra màn hình chứ thông thay đổi cách mà Matlab lưu trức các giá trị đó.

Để tác động toán tử nhân lên từng phần tử trong ma trận người dùng phải dùng toán tử .* (các bạn lưu ý có dấu chấm)

p = a.*a p = 1 4 9 16 25 36 49 64 100

Tương tự như vậy đối với phép chia và hàm mũ. Để tác động lên từng phần tử chúng ta phải sử dụng dấu chấm (.)

a.^3 ans = 1 8 27 64 125 216 343 512 1000

Toán tử ghép (Concatenation)

Toán tử này thực hiện nối các mảng với nhau và tạo nên mảng lớn hơn. Dấu ngoặc vuông [] chính là toán tử này.Ví dụ:

a = [1 2 3; 4 5 6; 7 8 10] a = 1 2 3 4 5 6 7 8 10

0

Người dùng có thể thực hiện nối theo phương ngang (hàng) hoặc theo phương dọc (cột) bằng cách không hoặc có sử dụng dấu chấm phẩy (;). Ví dụ:

Matlab cung

cấp

cho chúng ta 7 hàm

để

tạo

các ma

trận

bản

:1.Zeros (line,column) : cho phép

tạo

một

ma

trận

toàn

số

0.2.Ones (line,column) : cho phép

tạo

ra ma

trận

toàn

số

1.3.Rand (line,column) : cho phép

tạo

ra

một

ma

trận

với

các

phần

tử

làsinh

ngẫu

nhiên và cùng

loại

.4.Randn (line,column) :

tạo

một

ma

trận

mà các

phần

tử

của

ma

trận

được

sinh ra

một

cách

ngẫu

nhiên.5.Eye (line) : khai báo ma

trận

đơn

vị

.6.Pascal () :

tạo

ma

trận

đối

xứng

(ma

trận

vuông).7.Magic () :

tạo

ma

trận

không

đối

xứng

.Note : B

ạn

thể

nhập

trực

tiếp

các

phần

tử

của

ma

trận

đó

theo cú phápsau (các

phần

tử

của

một

hàng

được

cách nhau

bởi

dấu

(,)

hoặc

một

dấu

cách ,

giữa

các hàng thì

được

cách nhau

bởi

dấu

(;) hay

dấu

ngắt

).

Các phép toán với ma trận trong matlba