BÀI THỰC HÀNH MATLAB 4
Mục đích: Cho sinh viên làm quen với một số lệnh phân tích dữ liệu, số liệu lập trình trong
Matlab. Ngoài ra sinh viên thực hành viết một số chương trình đơn giản
Phần 1
PHÂN TÍCH DỮ LIỆU
Bởi vì MATLAB là một ứng dụng hướng ma trận nên nó dễ dàng thực hiện các phân
tích thống kê trên các tập dữ liệu, trong khi theo mặc định MATLAB coi các tập dữ liệu đ-
ược lưu trữ trong các mảng cột, việc phân tích dữ liệu có thể thực hiện theo bất cứ chiều
nào. Đó là trừ khi được chỉ định theo một cách khác, các cột của một mảng dữ liệu thể hiện
các thông số đo khác nhau, mỗi hàng thể hiện một giá trị mẫu của các thông số đo đó.
1. Phân tích ma trận dữ liệu
Nhập temps là một ma trận 31x3 chứa nhiệt độ ban ngày (tính theo độ C) của 3 thành phố
tính trong một tháng 31 ngày được ghi lại và gán cho một biến là:
>> temps
temps=
12 8 18
15 9 22
12 5 19
14 8 23
12 6 22
11 9 19
15 9 15
8 10 20
19 7 18
12 7 18
14 10 19
11 8 17
9 7 23
8 8 19
15 8 18
8 10 20
10 7 17
12 7 22
9 8 19
12 8 21
12 8 20
10 9 17
13 12 18
9 10 20
10 6 22
14 7 21
12 5 22
13 7 18
15 10 23
13 11 24
12 12 22
Mỗi hàng chứa nhiệt độ của một ngày nào đó, còn mỗi cột chứa nhiệt độ của một thành
phố. Hãy gõ vào như sau:
>> d=1:31; % number the days of the month
>> plot(d,temps)
>> xlabel('Day of month')
>> ylabel('Celsius')
>> title('Daily High Tempratures in three Cities')
Khả năng phân tích dữ liệu của MATLAB, hãy xét các lệnh sau, dựa trên dữ liệu về
nhiệt độ đã cho:
>> avg_temp = mean(temps)
avg_temp=
11.9677 8.2258 19.8710
Thành phố thứ 3 là có nhiệt độ trung bình cao nhất, ở đây MATLAB đã tính nhiệt độ
trung bình của mỗi cột một cách riêng rẽ. Nếu tính trung bình ở cả 3 thành phố thì:
>> avg_avg = mean(avg_temp)
avg_avg=
13.3548
Khi mà các giá trị đầu vào trong một hàm phân tích dữ liệu là một vector hàng hay cột
thì MATLAB chỉ đơn giản là tiến hành các phép toán trên vector và trả về giá trị số.
Dùng mảng để thực hiện công việc này:
>> avg_temp = mean(temps,1) % Giống như trên, tính cho các cột
avg_temp =
11.9677 8.2258 19.8710
>> avr_tempr = mean(temps,2) % Tính cho mỗi hàng
avr_tempr =
12.6667
15.3333
12.0000
15.0000
13.3333
13.0000
13.0000
12.6667
14.6667
12.3333
14.3333
12.0000
13.0000
11.6667
13.6667
12.3333
11.3333
13.6667
12.0000
13.6667
13.3333
12.0000
14.3333
13.0000
12.6667
14.0000
13.0000
12.6667
16.0000
16.0000
15.3333
Đây là giá trị nhiệt độ trung bình ở cả ba thành phố trong từng ngày.
Xét bài toán tìm sự chênh lệch nhiệt độ của mỗi thành phố so với giá trị trung bình, có
nghĩa là avg_temp(i) phải bị trừ đi bởi cột thứ i của biến temps. Dùng vòng lặp for là
đơn giản nhất:
>> for i = 1:3
tdev(:,i) = temps(:,i)- avg_temp(i);
end
>> tdev
tdev =
0.0323 -0.2258 -1.8710
3.0323 0.7742 2.1290
0.0323 -3.2258 -0.8710
2.0323 -0.2258 3.1290
0.0323 -2.2258 2.1290
-0.9677 0.7742 -0.8710
3.0323 0.7742 -4.8710
-3.9677 1.7742 0.1290
7.0323 -1.2258 -1.8710
0.0323 -1.2258 -1.8710
2.0323 1.7742 -0.8710
-0.9677 -0.2258 -2.8710
-2.9677 -1.2258 3.1290
-3.9677 -0.2258 -0.8710
3.0323 -0.2258 -1.8710
-3.9677 0.7742 0.1290
-1.9677 -1.2258 -2.8710
0.0323 -1.2258 2.1290
-2.9677 -0.2258 -0.8710
0.0323 -0.2258 1.1290
0.0323 -0.2258 0.1290
-1.9677 0.7742 -2.8710
1.0323 3.7742 -1.8710
-2.9677 1.7742 0.1290
-1.9677 -2.2258 2.1290
2.0323 -1.2258 1.1290
0.0323 -3.2258 2.1290
1.0323 -1.2258 -1.8710
3.0323 1.7742 3.1290
1.0323 2.7742 4.1290
0.0323 3.7742 2.1290
Nhân bản biến avg_temp để kích thước của nó bằng với kích thước của temps. Sau
đó thực hiện phép trừ thì sẽ nhanh hơn rất nhiều:
>> tdev = temps - avg_temp(ones(31,1),:)
tdev =
0.0323 -0.2258 -1.8710
3.0323 0.7742 2.1290
0.0323 -3.2258 -0.8710
2.0323 -0.2258 3.1290
0.0323 -2.2258 2.1290
-0.9677 0.7742 -0.8710
3.0323 0.7742 -4.8710
-3.9677 1.7742 0.1290
7.0323 -1.2258 -1.8710
0.0323 -1.2258 -1.8710
2.0323 1.7742 -0.8710
-0.9677 -0.2258 -2.8710
-2.9677 -1.2258 3.1290
-3.9677 -0.2258 -0.8710
3.0323 -0.2258 -1.8710
-3.9677 0.7742 0.1290
-1.9677 -1.2258 -2.8710
0.0323 -1.2258 2.1290
-2.9677 -0.2258 -0.8710
0.0323 -0.2258 1.1290
0.0323 -0.2258 0.1290
-1.9677 0.7742 -2.8710
1.0323 3.7742 -1.8710
-2.9677 1.7742 0.1290
-1.9677 -2.2258 2.1290
2.0323 -1.2258 1.1290
0.0323 -3.2258 2.1290
1.0323 -1.2258 -1.8710
3.0323 1.7742 3.1290
1.0323 2.7742 4.1290
0.0323 3.7742 2.1290
Ở đây avg_temp(ones(31,1),:) sẽ nhân bản hàng đầu tiên (và là hàng duy nhất)
của biến avg_temp thành 31 bản, tạo lên một ma trận 31x3. Trong đó cột thứ i chính là
avg_temp(i).
>> max_temp = max(temps)
max_temp=
19 12 24
Câu lệnh tìm ra nhiệt độ lớn nhất ở mỗi thành phố trong tháng đó.