Gièng nh− vËy, trong môc Load Workspace Load Workspace Load Workspace Load Workspace trong b¶ng chän file file file file më hép héi tho¹i ®Ó gäi l¹i tÊt c¶ c¸c biÕn mµ ta ®· ghi l¹i [r]
(1)(2)Matlab toµn tËp Matlab toµn tËp Matlab toµn tËp Matlab toµn tËp
cài đặt cài đặt cài đặt cài đặt
1 MATLAB for WIN
Yêu cầu hệ thống Yêu cầu hệ thống Yêu cầu hệ thống Yêu cầu hệ thống
ã H thng IBM t−ơng thích 100% với vi xử lí 486 Intel cộng với đồng xử lí tốn học 487 ( ngoại trừ 486 DX có xử lí bên ), Pentium Pentium Pro Processor
• Microsoft Window 95 hc Window NT
a) ỉ CD ROM a) æ CD ROM a) æ CD ROM a) æ CD ROM
- Bộ điều phối đồ hoạ bit card hình ( 256 màu đồng thời )
- Khoảng trống đĩa đủ để cài đặt chạy tuỳ chọn Sự yêu cầu đĩa cứng thay đổi tuỳ theo kích cỡ partition tệp trợ giúp help đ−ợc cài đặt trực tuỳ chọn Quá trình cài đặt thông báo cho bạn biết tỉ mỉ dung l−ợng đĩa yêu cầu Ví dụ:
Partition với liên cung mặt cần 25 MB cho riêng MATLAB 50 MB cho MATLAB HELP
Partition với liên cung 64 KB cần 115 MB cho riêng MATLAB 250 MB cho MATLAB HELP
b ) Bé nhí b ) Bé nhí b ) Bé nhí b ) Bé nhí
Microsoft WIndow 95: MB tèi thiĨu vµ 16 MB khuyến nghị
Microsoft WIN NT 3.51 4.0: 12 MB tối thiểu 16 MB khuyến nghị
Các khuyến nghị
ã Bộ nhớ phụ vào (Bé nhí bỉ sung: additional Memory)
• Vỉ mạch tăng tốc đồ hoạ bổ trợ cho Microsoft Window
ã Máy in trợ giúp cho Microsoft Window
ã Vỉ mạch âm trợ giúp cho Microsoft Window
• Microsoft Word 7.0 ( bạn có ý nh s dng MATLAB NoteBook )
ã Trình biên dịch Watcom C, Borland, Microsoft (xây dựng file MEX)
• Netscape Navigator 2.0 version cao Microsoft Internet Explorer 3.0 để chạy MATLAB Help Desk
Quá trình cài đặt Quá trình cài đặt Quá trình cài đặt Quá trình cài đặt
Đặt đĩa vào ổ CD Trên WIN 95 ch−ơng trình SETUP bắt đầu chạy tự động nh− MATLAB cha đ−ợc cài từ tr−ớc Cịn khơng, nhấn đúp vào biểu t−ợng setup.exesetup.exesetup.exesetup.exe để bắt đầu trình cài đặt
Chấp nhận hay bỏ khuyến cáo cấp đăng kí phần mềm hình Nếu chấp nhận bạn bắt đầu q trình cài đặt
Trên Custumer Information, nhập vào tên bạn, địa bạn Tên không đ−ợc 30 kí tự Nhấn nút NEXT
(3)) Trên hình hiển thị C:\MATLAB th− mục đích mặc định q trình cài đặt Nếu bạn muốn cài đặt vào th− mục khác đổi tên th− mục bạn lựa chọn Browse
MATLAB cho Macintosh
MATLAB cho máy Macintosh chạy đợc trên:
ã Mi mỏy Macintosh cú cu hỡnh mạnh ( power Macintosh )
• Mọi Macintosh đ−ợc trang bị vi xử lí 68040 ( đồng xử lí tốn học bên )
• Mọi máy Macintosh đ−ợc trang bị vi xử lí 68020 68030 đồng xử lí tốn học 68881 68882
Yêu cầu tối thiểu để chạy MATLAB
ã Đĩa cứng trống tối thiểu 26 MB, cần thªm 60 MB cho hƯ thèng t chon HELP trùc tuyến
ã 16 MB cho phân vùng nhớ
• ỉ CD ROM
• Color Quick Draw
-oOo -
Ch−¬ng1
GIíI THIƯU chung
Bâygiờ bạn cài đặt xong, xem MATLAB làm đ−ợc Trong phần trình bày số ứng dụng nó; để trình bày tất ứng dụng MATLAB dài tốn thời gian Nếu bạn đọc h−ớng dẫn này, bạn thấy MATLAB ngôn ngữ mạnh để giải vấn đề quan trọng khó khăn bạn Nó hữu ích bạn đọc phần h−ớng dẫn cung cấp cho bạn kiến thức để bạn hiểu rõ MATLAB phát triển đ−ợc khả sau
Có lẽ cách dễ để hìng dung MATLAB có đầy đủ đặc điểm máy tính cá nhân: giống nh− máy tính bản, làm tất phép tính tốn học nh− cộng, trừ, nhân, chia; giống nh− máy tính kỹ thuật, bao gồm: số phức, thức, số mũ, logarithm, phép tốn l−ợng giác nh− sine, cosine, tang; giống nh− máy tính có khả lập trình, l−u trữ, tìm kiếm lại liệu, tạo, bảo vệ ghi trình tự lệnh để tự động phép toán giải vấn đề, bạn so sánh logic, điều khiển thực hiên lệnh để đảm bảo tính đắn phép tốn Giống nh− máy tính đại nhất, cho phép bạn biểu diễn liệu dới nhiều dạng nh−: biểu diễn thông th−ờng, ma trân đại số, hàm tổ hợp thao tác với liệu th−ờng nh− ma trận
Trong thực tế MATLAB ứng dụng rộng rãi nhiều lĩnh vực sử dụng nhiều phép tính tốn học Với đặc điểm khả thân thiện với ng−ời sử dụng nên dễ dàng sử dụng ngơn ngữ khác nh− Basic, Pascal, C
Nó cung cấp mơi tr−ờng phong phú cho biểu diễn liệu, có khả mạnh mẽ đồ hoạ, bạn tạo giao diện riêng cho ng−ời sử dụng(GUIs) để gải vấn đề riêng cho Thêm vào MATLAB đ−a cơng cụ để giải vấn đề đặc biệt, gọi Toolbox (hộp công cụ) Ví dụ Student Edition MATLAB bao gồm Toolbox điều khiển hệ thống, Toolbox xử lí tín hiệu, Toolbox biểu t−ợng tốn học Ngồi bạn tạo Toolbox cho riêng
(4)bạn hiểu đ−ợc chúng Tr−ớc tiên, cách đơn giản quan niệm nh− máy tính bản, nh− máy tính kỹ thuật nh− máy tính lập trình đ−ợc, cuối nh− máy tính đại Bằng cách quan niệm bạn dễ dàng hiểu đựơc cách mà MATLAB giải vấn đề thông th−ờng xem MATLAB giải vấn đề số phức mềm dẻo nh−
Tuú thuéc vµo kiến thức bạn, bạn tìm thấy phần sách h-ớng dẫn hứng thú hay bn tỴ
Khi bạn chạy ch−ơng trình MATLAB, tạo nhiều cửa sổ hình bạn, cửa sổ lệnh (command) cửa sổ để bạn giao tiếp với MATLAB, cửa sổ xuất nh hình dới
Các kí tự ‘EDU>>‘ dấu nhắc MATLAB student MATLAB Trong version khác MATLAB, dấu nhắc đơn giản ‘>>‘ Khi cửa sổ lệnh xuất hiện, cửa sổ hoạt động, trỏ xuất bên phải dấu nhắc nh− hình d−ới Con trỏ dấu nhắc MATLAB báo MATLAB đợi để thực lệnh
Hình 1.1 Cửa sổ lệnh Student MATLAB Hình 1.1 Cửa sổ lệnh Student MATLAB Hình 1.1 Cửa sổ lệnh Student MATLAB Hình 1.1 Cửa sổ lệnh Student MATLAB 1.1 Các phép toán đơn giản
1.1 Các phép toán đơn giản 1.1 Các phép toán đơn giản 1.1 Các phép toán đơn giản
Giống nh− máy tính đơn giản thơng th−ờng, MATLAB thực phép tốn đơn giản, nh− ví dụ d−ới đây:
Mary đến cửa hàng văn phòng phẩm mua cục tẩy, 25 xu cục, tập vở, 52 xu tập, hai cuộn băng đài, 99 xu cuộn Hãy tính xem Mary mua vật, tổng số tin l bao nhiờu?
Nếu dùng máy tính thông thờng, ta vào số: + + = 12 ( vËt)
4x25 + 6x52 + 2x99 = 610 (xu)
H×nh 1.2 Cưa sỉ lƯnh cđa MATLAB version 5.2 H×nh 1.2 Cưa sỉ lƯnh cđa MATLAB version 5.2 H×nh 1.2 Cưa sỉ lƯnh cđa MATLAB version 5.2 H×nh 1.2 Cưa sỉ lƯnh cđa MATLAB version 5.2
Trong MATLAB giải vấn đề theo nhiều cách Tr−ớc tiên giống nh− máy tính trên, tính:
>> + + ans=
12
>> 4*25 + 6*52 + 2*99 ans=
610
Chú ý MATLAB không ý đến khoảng trống, cho tất phần, phép nhân có mức độ −u tiên cao phép cộng Và ý khác MATLAB gọi kết ans (viết tắt answer) cho hai phép tính
Nh− nói trên, vấn đề giải cách chứa thơng tin vào biến MATLAB:
(5)>> pads = pads=
>> tape = 2;
>> iterms = erases + pads + tape iterms=
12
>> cost = erases*25 + pads*52 + tape*99 cost=
610
tạo biến MATLAB: erases, pads, tape để chứa số l−ợng loại vật Sau vào giá trị cho biến này, MATLAB hiển thị kết hình, trừ tr−ờng hợp biến tape Dấu hai chấm đằng sau câu lệnh ‘>> tape = 2;‘ thông báo cho MATLAB nhận giá trị gán nh−ng khơng hiển thị hình Cuối khác với gọi kết ans, yêu cầu MATLAB gọi kết tổng số vật iterms, tổng số tiền cost Tại b−ớc MATLAB đa thơng tin Vì có l−u giữ biến nên yêu cầu MATLAB tính giá trị trung bình cho vật:
>> everage_cost = cost/iterms everage_cost=
50.8333
Bởi everage cost có hai từ, mà MATLAB u cầu biến có từ, nên dùng dấu gạch d−ới để nối hai từ thành từ
Ngoài phép tính trên, MATLAB có số phép tính khác nh bảng dới đây:
Phép tính Biểu tợng Ví dụ
Phép céng, a + b + +
PhÐp trõ, a - b - -
PhÐp nhân, a.b * 18*24
Phép chia, ab / \ 56/8 = 8\ 56
PhÐp luü thõa, ab ^ 5^2
Trong phép tốn có mức độ −u tiên khác nhau, tính từ trái sang phải dịng gồm nhiều lệnh phép tốn luỹ thừa có mức độ −u tiên cao nhất, phép nhân phép chia có mức độ −u tiên cuối phép cộng phép trừ có mức độ u tiờn bng
1.2 Không gian làm việc MATLAB 1.2 Không gian làm việc MATLAB 1.2 Không gian làm việc MATLAB 1.2 Không gian lµm viƯc cđa MATLAB
Cũng nh− bạn làm việc với cửa sổ Lệnh, MATLAB nhớ lệnh bạn gõ vào nh− giá trị bạn gán cho nó đ−ợc tạo lên Những lệnh biến đ−ợc gọi l−u giữ không gian làm việc MATLAB, đ−ợc gọi lại bạn muốn Ví dụ, để kiểm tra giá trị biến tape, tất bạn phải làm yêu cầu MATLAB cho biết cách đánh vào tên biến dấu nhắc:
(6)tape=
Nếu bạn không nhớ tên biến, bạn yêu cầu MATLAB cho danh sách biến cách dánh lệnh whowhowhowho từ dấu nhắc lệnh:
>> who
Your variables are:
ans cost iterms tape average_cost erasers pads
Chú ý MATLAB không đ−a giá trị tất biến, bạn muốn biết giá trị, bạn đánh vào tên biến dấu nhắc lệnh MATLAB
Để gọi lại lệnh bạn dùng, MATLAB dùng phím mũi tên (↑↓ ) bàn phím bạn Ví dụ để gọi lại lệnh bạn gõ vào lúc gần nhất, bạn nhấn phím mũi tên ↓, tiếp tục nhấn phím này, lại gọi tiếp lệnh tr−ớc đó, Nếu bạn dùng phím mũi tên ↑ gọi lại lệnh từ lệnh lệnh gần Các phím mũi tên ← → dùng để thay đổi vị trí trỏ dòng lệnh dấu nhắc MATLAB, nh− sửa dịng lệnh, thêm nữa, dùng chuột với nhớ đệm để cắt, copy, dán, sửa văn dấu nhắc dòng lệnh
1.3 BiÕn 1.3 BiÕn 1.3 BiÕn 1.3 BiÕn
Giống nh− ngôn ngữ lập trình khác, MATLAB có quy định riêng tên biến Tr−ớc tiên tên biến phải từ, khơng chứa dấu cách, tên biến phải có quy tuân thủ quy tắc sau:
Quy định tên biến Tên biến có phân biệt chữ hoa chữ th−ờng
VÝ dô: Iterms, iterms, itErms, ITERMS biến khác
Tªn biÕn cã thĨ chøa nhiỊu nhÊt 31 kÝ tự, kí tự sau kí tự thứ 31 bị lờ Ví dụ: howaboutthisveriablename
Tên biến bắt đầu phải chữ cái, chữ số, số gạch dới
Vớ d: how_about_this_veriable_name, X51483 a_b_c_d_e Kí tự chấm câu khơng đ−ợc phép dùng có ý nghĩa đặc biệt
Cùng với quy định trên, MATLAB có biến đặc biệt bảng sau: Các biến đặc biệt Giá trị
ans Tên biến mặc định dùng để trả kết pi = 3.1415
Eps Số nhỏ nhất, nh− dùng cộng với để đ−ợcsố nhỏ lớn flops Số phép toán số thc
inf Để số vô nh kết qu¶ cđa 1/0
NaN nan Dùng để số không xác định nh− kết 0/0 i (và) j i = j =
nargin Số đối số đa vào hàm đ−ợc sử dụng narout Số đối số hàm đa
(7)Nh− b¹n cã thĨ t¹o mét biÕn cđa MATLAB, bạn gán lại giá trị cho mét hc nhiỊu biÕn
VÝ dơ:
>> erases = 4; >> pads = 6; >> tape = 2;
>> iterms = eases + pads + tape iterms=
12
>> erases = erases= >> iterms iterms= 12
ở sử dụng lại ví dụ trên, tìm đ−ợc số vật mà Mary mua sau thay đổi số cục tẩy lên 6, giá trị đè lên giá trị tr−ớc Khi bạn làm nh− vậy, giá trị iterms khơng thay đổi, MATLAB khơng tính lại iterms với giá trị erases Khi MATLAB thực phép tính, lấy giá trị biến thời, nên bạn muốn tính giá trị iterms, cost, average_cost, bạn gọi lại lệnh tính giá trị
Đối với biến đặc biệt trên, có sẵn giá trị, nh− bạn khởi động MATLAB; bạn thay đổi giá trị giá trị đặc biệt ban đầu bị bạn xố biến khởi động lại MATLAB Do bạn khơng nên thay đổi giá trị biến đặc biệt, trừ thực cần thit
Các biến không gian làm việc MATLAB bị xoá không điều kiện b»ng c¸ch dïng lƯnh clearclearclearclear VÝ dơ:
>> clear erases
chØ xo¸ mét biÕn erases >> clear cost iterms
xoá hai biến cost iterms >> clear cl*
dấu * để xoá tất biến bắt đầu hai kí tự cl >> clear
xố tất biến không gian làm việc! Bạn không đ−ợc hỏi để xác nhận câu lệnh tất biến bị xố khơng thể khơi phục lại
Có thể nói dùng lệnh clearclearclearclear nguy hiểm, dùng lệnh bạn nên dùng ỳng v trớ
1.4 Câu giải thích (comment) chấm câu 1.4 Câu giải thích (comment) chấm câu 1.4 Câu giải thích (comment) chấm câu 1.4 Câu giải thích (comment) chấm câu
Tất văn đằng sau kí hiệu phần trăm (%) câu giải thích Ví dụ: >> erases = % Số cục tẩy
(8)
Biến erases đ−ợc gán giá trị 4, cịn tất kí hiệu phần trăm văn đằng sau bị lờ Đặc điểm giúp cho dễ theo dõi công việc làm
Nhiều lệnh đặt hàng, chúng cách dấu phẩy dấu chấm phẩy, nh−:
>> erases = 4, pads = 6; tape = erases=
tape=
dấu phẩy để yêu cầu MATLAB hiển thị kết hình; cịn dấu chấm phẩy khơng hiển thị kết hình
>> average_cost = cost/ iterms
average_cost= 50.83333
Nh− ví dụ trên, ta dùng dấu ba chấm ( ) để câu lệnh đ−ợc tiếp tục hàng d−ới, phép tính thực đ−ợc dấu ba chấm ngăn cách toán tử biến, nghĩa tên biến không bị ngăn cách hai hàng:
>> average_cost = cost/ it erms
??? age_cost = cost/iterms Missing operator, coma, or semicolon
giống nh vậy, trạng thái lời giải thích không thĨ tiÕp tơc: >> % Comments cannot be continued
>> either
??? Undefined function or variable either
Bạn dừng ch−ơng trình cách nhấn đồng thời Ctrl C 1.5 Số phức
1.5 Sè phøc 1.5 Sè phøc 1.5 Sè phøc
Một đặc điểm mạnh mẽ MATLAB làm việc với số phức Số phức MATLAB đ−ợc định nghĩa theo nhiều cách, ví dụ nh− sau:
>> c1 = - 2i % ChÌn thêm kí tự i vào phần ảo c1=
1.0000 - 2.0000i
>> c1 = - 2j % j tơng tự nh i ë trªn c1=
(9)6.0000 - 9.0000i >> c3 = sqrt(-2) c3=
+ 1.4142i >> c4 = + sin(.5)*i c4=
6.0000 + 0.4794i >> c5 = + sin(.5)*j c5=
6.0000 + 0.4794i
Trong hai ví dụ cuối, MATLAB mặc định giá trị i = j = dùng cho phần ảo Nhân với i j đ−ợc yêu cầu tr−ờng hợp này, sin(.5)i sin(.5)j khơng có ý nghĩa MATLAB Cuối với kí tự i j, nh− hai ví dụ đầu làm việc với số cố định, không làm việc đ−ợc với biểu thức
Một số ngôn ngữ yêu cầu điều khiển đặc biệt cho số phức xuất hiện, MATLAB khơng cầu nh− Tất phép tính tốn học thao tác đ−ợc nh− số thực thông th−ờng:
>> c6 = (c1 + c2)/c3 % Tõ c¸c liệu c6=
-7.7782 - 4.9497i
>> check_it_out = i^2 % Bình phơng i phải -1 check_it_out=
-1.0000 + 0.0000i
trong ví dụ lại phần thực, phần ảo không Chúng ta dïng hµm realrealrealreal
và imagimagimagimag để kiểm tra phần thực ảo
Chúng ta biểu diễn số phức dạng độ lớn góc (dạng cực): M M.ej = a+bi
ở số phức đ−ợc biểu diễn độ lớn M góc , quan hệ đại l−ợng phần thực, phần ảo số phức biểu diễn d−ới dạng đại số là:
M =
= tan-1(b/ a)
a = Mcos b = Msin
Trong MATLAB, để chuyển từ dạng cực sang dạng đại số, dùng hàm realrealrealreal, imag imag imag imag, angleangleangleangle:
>> c1 % Gäi l¹i c1 c1=
1.0000 - 2.0000i
>> M_c1 = abs(c1) % TÝnh argument cña sè phøc M_c1=
2.2361
(10)-1.1071
>> deg_c1 = angle_c1*180/ pi % Chuyển từ radian sang độ -63.4349
>> real_c1 = real(c1) % TÝnh phÇn thùc real_c1=
>> imag_c1 = imag(c1) % Tính phần ảo imag_c1=
-2
-oOo -
Ch−¬ng2
CáC ĐặC tính Kĩ THUậT
Ging nh hu ht máy tính kỹ thuật, MATLAB đa nhiều hàm tốn học, kĩ thuật thơng dụng, ngồi MATLAB cung cấp hàng trăm hàm đặc biệt thuật tốn, hữu ích để giải vấn đề khoa học Tất hàm đ−ợc liệt kê online help, đề cập đến hàm thông dụng
2.1 Các hàm toán học thông th 2.1 Các hàm toán học thông th 2.1 Các hàm toán học thông th 2.1 Các hàm toán học thông thờngờngờngờng
Các hàm toán học MATLAB đ−ợc liệt kê bảng d−ới đây, chúng có chung cách gọi hàm nh− ví dụ d−ới đây:
>> x = sqrt(2)/2 x=
0.7071 >> y = sin(x) y=
0.7854
>> y_deg = y*180/pi y_deg=
45.0000
Những lệnh để tìm góc (tính độ) biết giá trị hàm sin / Tất hàm liên quan đến góc MATLAB làm vic vi radian
Bảng hàm:
(11)abs(x) TÝnh argument cña sè phøc x
acos(x) Hàm ngợc cosine
acosh(x) Hàm ngợc hyperbolic cosine
angle(x) TÝnh gãc cña sè phøc x
asin(x) Hàm ngợc sine
asinh(x) Hàm ngợc hyperbolic sine
atan(x) Hàm ngợc tangent
atan2(x, y) Là hàm arctangent phần thực x y atanh(x) Hàm ngợc hyperbolic tangent
ceil(x) Xấp xỉ dơng vô
conj(x) Số phức liên hợp
cos(x) Hµm cosine cđa x
cosh(x) Hµm hyperbolic cosine cđa x
exp(x) Hµm ex
fix(x) XÊp xỉ không
floor(x) Xấp xỉ âm vô
gdc(x, y) ¦íc sè chung lín nhÊt cđa hai sè nguyên xvà y imag(x) Hàm trả phần ảo sè phøc
lcm(x, y) Béi sè chung nhá nhÊt hai số nguyên x y
log(x) Logarithm tự nhiên
log10(x) Logarithm số 10
real(x) Hàm trả phần thực x
rem(x, y) Phần d phép chia x/ y round(x) Hàm làm tròn số nguyên tố
sign(x) Hàm dấu: trả vỊ dÊu cđa argument nh−: sign(1.2)=1; sign(-23.4)=-1; sign(0)=0
sin(x) Hµm tÝnh sine cđa x
sinh(x) Hµm tÝnh hyperbolic sine x
sqrt(x) Hàm khai bậc hai
tan(x) Tangent
tanh(x) Hyperbolic tangent
>> 4*atan(1) % Một cách tính xấp xỉ giá trị cña pi ans=
3.1416
>> help atant2 % Yêu cầu giúp đỡ hàm atan2 ATAN2 four quadrant inverse tangent
ATAN2(Y, X) is the four quadrant arctangent of the real parts of the elements of X and Y -pi <= ATAN2(Y, X) <= pi
see also ATAN >> 180/pi*atan(-2/ 3) ans=
-33.69
>> 180/pi*atan2(2, -3) ans=
(12)>> 180/pi*atan2(-2, 3) ans=
-33.69
>> 180/pi*atan2(2, 3) ans=
33.69
>> 180/pi*atan2(-2, -3) ans=
-146.31
Mét sè vÝ dô kh¸c:
>> y = sqrt(3^2 + 4^2) % TÝnh cạnh huyền tam giác pitago 3-4-5 y=
>> y = rem(23,4) % 23/4 có phần d y=
>> x = 2.6,y1 = fix(x),y2 = floor(x),y3 = ceil(x),y4 = round(x) x=
2.6000 y1=
y2= y3= y4=
>> gcd(18,81) % lµ −íc sè chung lín nhÊt cđa 18 vµ 81 ans=
>> lcm(18,81) % 162 lµ béi sè chung lín nhÊt cđa 18 vµ 81 ans=
162 VÝ dơ: ¦íc l VÝ dơ: ¦íc l Ví dụ: Ước l
Ví dụ: Ước lợng chiều cao nhàợng chiều cao nhàợng chiều cao nhàợng chiều cao nhà
Vấn đề: Vấn đề: Vấn đề:
Vấn đề: Giả thiết biết khoảng cách từ ngời quan sát đến ngơi nhà D, góc từ ngời quan sát đến nhà ; chiều cao ngời quan sát h Hỏi nhà cao bao nhiờu?
Giải pháp: Giải pháp: Giải pháp:
Giải pháp: Ta biểu diễn kích thức nh hình 2.1:
(không thấy)
H×nh 2.1 H×nh 2.1 H×nh 2.1 H×nh 2.1
Ngôi nhà có chiều cao H + h, H chiều dài cạnh tam giác, chiều dài tính đợc công thức quan hệ góc cạnh tam giác:
(13)
Từ ta có chiều cao nhà h + H = h + D.tan()
NÕu h =2meters, D =50meters, 60o, MATLAB đa kết là:
>> h = h =
>> theta = 60 theta = 60 >> D = 50 D = 50
>> buiding_height = h+D*atan(theta*pi/180) buiding_height =
54.3599
VÝ dô suy giảm phân rÃ
Vn Vấn đề Vấn đề
Vấn đề : Sự phân rã phân tử polonium có chu kỳ phân rã 140 ngày, tức sau 140 ngày l−ợng poloniun cịn lại 1/2 l−ợng ban đầu Hỏi ban đầu có 10 grams polonium, cịn lại sau 250 ngày?
Gi¶i quyÕt Gi¶i quyÕt Gi¶i quyÕt
Giải quyết: Sau chu kỳ phân rã 140 ngày, lại 10x0.5 = grams; sau chu kỳ phân rã 280 ngày, lại 5x0.5 = 10x(0.5)2 = 2.5grams, từ ta có kết nằm
khoảng 2.5 grams, ta có công thức tính phần lại sau khoảng thời gian bất kỳ: khối lợng lại = khối lợng ban đầu x(0.5)thời gian/ chu kỳ
ví dụ thời gian 250 ngày, kết MATLAB đa là: >> initial_amount = 10; % Khối lợng ban đầu >> half_life = 140; % Chu kỳ phân r·
>> time = 250; % Thêi gian tÝnh khèi l−ỵng >> amount_left = initial_*0.5^(time/half_life)
amount_left= 2.9003
VÝ dơ tÝnh to¸n vỊ l·i xt VÝ dơ tÝnh to¸n vỊ l·i xt VÝ dơ tÝnh to¸n vỊ l·i xt VÝ dơ tÝnh to¸n vỊ l·i xt
Vấn đề Vấn đề Vấn đề
Vấn đề: Bạn đồng ý mua ôtô với giá 18,500 dollars Ng−ời bán ôtô đa hai giải pháp tài là: thứ nhất, trả 2.9% lãi xuất số tiền vòng năm Thứ hai trả 8.9% lãi xuất số tiền vòng năm giá bán đ−ợc giảm khoản 1500 dollars Hỏi với giải pháp bạn mua đ−ợc ơtơ với giá rẻ hơn?
Giải pháp: Giải pháp: Giải pháp:
Giải pháp: Số tiền trả hàng tháng P, tổng sè tiỊn lµ A dollars, tØ sè l·i xt hµng tháng R, trả M tháng:
P = A
(14)Tổng số tiền phải trả là: T = PxM Giải pháp MATLAB đa là:
>> format bank % Dùng dạng hiển thị ngân hàng >> A = 18500; % Tỉng sè tiỊn
>> M = 12*4; % Số tháng phải trả lÃi
>> FR = 1500; % Tiền giảm giá nhà máy >> % Giải pháp thứ
>> R = (2.9/100)/12; % TØ lƯ l·i xt hµng tháng >> P = A*(R*(1+R)^M/((1+R)^M - 1)) % Khoản tiền phải trả hàng tháng P=
408.67
>> T1 = P*M % Tổng giá trị «t« T1=
19616.06
>> % Gi¶i ph¸p thø hai
>> R = (8.9/100)/12; % Tỉ lệ lÃi xuất hàng tháng >> P = (A-FR)*(R*(1 + R)^M/((1+R)^M - 1)) % Tiền phải trả hàng tháng P=
422.24
>> T2 = P*M % Tổng giá trị ôtô T2=
20267.47 >> Diff = T2 - T1 Diff=
651.41
Nh− ta có giải pháp thứ giá rẻ giải pháp thứ hai Ví dụ: Vấn đề nồng độ acid
Ví dụ: Vấn đề nồng độ acid Ví dụ: Vấn đề nồng độ acid Ví dụ: Vấn đề nồng độ acid
Vấn đề: Vấn đề: Vấn đề:
Vấn đề: Nh− phần trình sản xuất phận vật đúc nhà máy tự động, phận đ−ợc nhúng n−ớc để làm nguội, sau nhúng bồn đựng dung dịch acid để làm Trong tồn q trình nồng độ acid giảm phận đ-−ợc lấy khỏi bồn acid nhúng phận vật đúc vào bồn l−ợng n−ớc cịn bám vật đúc nhúng bể tr−ớc vào theo nhấc khỏi bồn l−ợng acid bám theo vật Để đảm bảo chất l−ợng nồng độ acid phải không đ−ợc nhỏ l−ợng tối thiểu Bạn bắt đầu với nồng độ dung dịch 90% nồng độ tối thiêu phải 50% L−ợng chất lỏng thêm vào lấy sau lần nhúng dao động khoảng từ 1% đến 10% Hỏi phận nhúng vào bể dung dịch acid tr−ớc nồng độ giảm xuống di mc cho phộp?
Giải pháp: Giải pháp: Giải pháp: Giải pháp:
Ban u nng độ acid initial_con = 90% = acid/ (acid + water) sau lần nhúng thứ nồng độ acid còn:
(15)
=
acid lợng acid ban đầu dung dịch, water lợng nớc ban đầu dung dịch, lost lợng phần trăm nớc thêm vào Số acid lại dung dịch sau lần nhúng thứ là:
acid_left =
Nghĩa là, nhúng lần thứ hai nồng độ dung dịch là: =
= =
Tiếp tục trình này, sau n lần nhúng, nồng độ acid là: =
Nếu nồng độ acid lại mức tối thiểu chấp nhận đ−ợc, số lần nhúng cực đại số nguyên nhỏ n:
n =
Trong MATLAB giải pháp là: >> initial_con = 90
initial_con= 90
>> min_con = 50 min_con=
50
>> lost = 0.01;
>> n = floor(log( initial_con/min_con)/log(1+lost)) n=
59
Nh− nhúng 59 lần tr−ớc nồng độ acid giảm xuống d−ới 50% Chú ý hàm
floor floor floor
floor dùng để làm tròn số n xuống số nguyên gần nhất, dây ta dùng hàm
logarithm logarithm logarithm
(16)chơng
NHữNG §ỈC §IĨM CđA CưA Sỉ LƯNH
Cửa sổ lệnh (comand) MATLAB có nhiều đặc điểm cần ý, số chúng đ−ợc giới thiệu ch−ơng tr−ớc, sau tìm hiểu rõ hn v chỳng
3.1 Quản lí không gian làm việc MATLAB 3.1 Quản lí không gian làm việc MATLAB 3.1 Quản lí không gian làm việc MATLAB 3.1 Quản lí không gian làm việc MATLAB
Các liệu biến đợc tạo lên cửa sổ lệnh, đợc lu phần gọi không gian làm việc MATLAB Muốn xem tên biến không gian làm việc MATLAB ta dïng lÖnh who:
>> who
Your variables are:
D h buiding_height theta
Các biến đợc dùng ví dụ ớc lợng chiều cao nhà Để xem chi tiết c¸c biÕn ta dïng lƯnh whos:
>> whos
Name Size Bytes Class D 1x1 double array buiding_height 1x1 double array h 1x1 double array theta 1x1 double array Grand total is elements using 32 bytes
Mỗi biến đ−ợc liệt kê với kích cỡ nó, số bytes sử dụng, lớp chúng (class), ví dụ đặc biệt này, biến số đơn, có độ xác hai số sau dấu phẩy Lệnh
whos whos whos
whos đặc biệt có ích nghiên cứu đến phần mảng kiểu liệu khác
Ngoài hàm này, mục Show WorkspaceShow WorkspaceShow WorkspaceShow Workspace bảng chọn filefilefilefile tạo cưa sỉ GUI gäi lµ Workspace BrowserWorkspace BrowserWorkspace Browser, nã chứa thông tin tơng tự nh lệnh Workspace Browser whoswhoswhoswhos Thêm tạo cho bạn khả xoá, làm biến mà bạn chọn Cửa sổ tạo cách nhấn nút Workspace BrowserWorkspace BrowserWorkspace BrowserWorkspace Browser, công cụ cửa sổ lƯnh
Nh− trình bày trên, lệnh clearclearclearclear xố biến từ khơng gian làm việc MATLAB
VÝ dô:
>> clear h D % Xoá biến h D >> who
(17)C¸c tuú chän kh¸c hàm clear tìm hiểu thêm b»ng lÖnh help: >> help clear
CLEAR Clear variables and functions from memory CLEAR removes all variables from the workspace CLEAR VARIABLES does the same thing
CLEAR GLOBAL removes all global variables
CLEAR FUNCTIONS removes all compiled M-functions CLEAR MEX removes all links to MEX-files
CLEAR ALL removes all variables, globals, functions and MEX links
CLEAR VAR1 VAR2 clears the variables specified The wildcard character '*' can be used to clear variables that match a pattern For instance, CLEAR X* clears all the variables in the current workspace that start with X
If X is global, CLEAR X removes X from the current workspace, but leaves it accessible to any functions declaring it global CLEAR GLOBAL X completely removes the global variable X
CLEAR FUN clears the function specified If FUN has been locked by MLOCK it will remain in memory
CLEAR ALL also has the side effect of removing all debugging breakpoints since the breakpoints for a file are cleared whenever the m-file changes or is cleared
Use the functional form of CLEAR, such as CLEAR('name'), when the variable name or function name is stored in a x©u See also WHO, WHOS, MLOCK, MUNLOCK
Cuối cùng, làm việc không gian làm việc MATLAB, th−ờng thuận tiện để ghi in công việc bạn, lệnh diarydiarydiarydiary ghi liệu ng−ời dùng đ−a vào cửa sổ lệnh đ−a file văn dạng mã ASCII có tên diary th− mục
>> diary frame % ghi liệu vao file frame >> diary off % kết thúc lệnh diary đóng file
Khi cửa sổ lệnh đ−ợc chọn, chọn printprintprintprint từ bảng chọn filefilefilefile để in cửa sổ lệnh, bạn dùng chuột để lựa chọn phần muốn ghi, chọn Pint SelectionPint SelectionPint Selection từ bảng Pint Selection chọn filefilefilefile, để in phần văn lựa chọn
3.2 Ghi vµ phơc 3.2 Ghi vµ phơc 3.2 Ghi vµ phơc
3.2 Ghi phục hồi liệuhồi liệuhồi d÷ liƯuhåi d÷ liƯu
(18)hiện Giống nh− vậy, mục Load WorkspaceLoad WorkspaceLoad WorkspaceLoad Workspace bảng chọn file file file file mở hộp hội thoại để gọi lại tất biến mà ta ghi lại từ không gian làm việc tr−ớc, khơng làm biến khơng gian làm việc Khi ta gọi lại biến, mà biến trùng tên với biến khơng gian làm việc MATLAB, thay đổi giá trị biến theo giá trị biến gọi từ file
Nếu bảng chọn file không thuận tiện không đáp ứng đ−ợc yêu cầu bạn, MATLAB cung cấp hai lệnh savesavesavesave loadloadloadload, thực cách mềm dẻo hơn, tr−ờng hợp đặc biệt, lệnh savesavesavesave cho phép bạn ghi nhiều biến theo lựa chon bạn
VÝ dô: >> save
Chứa tất biến MATLAB theo kiểu nhị phân file MATLAB.mat >> save data
chứa tất biến MATLAB theo kiểu nhị ph©n fle data.mat >> save data erasers pads tape -ascii
Ghi biến erasers, pads, tape dạng mã ASCII số file data File dạng mã ASCII sửa đổi ch−ơng trình soạn thảo văn nào, ý file ASCII khơng có phần mở rộng mat
>> save data erasers pads tape -ascii -double
Ghi c¸c biÕn erasers, pads, tape d¹ng ASCII 16 sè file data LƯnh load load load load dùng với cú pháp tợng tự
3.3 Khuôn dạng hiển thị số 3.3 Khuôn dạng hiển thị số 3.3 Khuôn dạng hiển thị số 3.3 Khuôn dạng hiển thị số
Khi MATLAB hiển thị kết dạng số, tuân theo số quy định sau:
Mặc định, kết số nguyên MATLAB hiển thị số nguyên, kết số thực MATLAB hiển thị số xấp xỉ với bốn chữ số sau dấu phẩy, số dạng khoa học MATLAB hiển thị giống nh− máy tính khoa học
Bạn không dùng dạng mặc định, mà tạo khuôn dạng riêng từ mục Preferences
Preferences Preferences
Preferences, bảng chọn filefilefilefile, mặc định đánh dạng xấp xỉ dấu nhắc Chúng ta dùng biến average_cost ( ví dụ tr−ớc) làm ví dụ, dạng số là:
LƯnh cđa MATLAB Average_cost Chó thÝch
format short 50.833 sè
format long 50.83333333333334 16 sè
format short e 5.0833e+01 sè víi sè mị format long e 5.083333333333334e+01 16 sè víi sè mị
format short g 50.833 chÝnh x¸c format short format short e
format long g 50.83333333333333 xác format long format long e
(19)format bank 50.83 hai số hệ 10
format + + dơng, âm không
format rat 305/ dạng phân số
Một ý quan trọng MATLAB không thay đổi số định lại khuôn dạng hiển thị đ−ợc chọn, mà thay đổi hình thay đổi
-oOo -
Ch−¬ng
Script M_files
Một vấn đề đơn giản là, yêu cầu bạn dấu nhắc MATLAB cửa sổ lệnh nhanh hiệu Tuy nhiên số lệnh tăng lên, bạn muốn thay đổi giá trị nhiều biến thực lại số lệnh với giá trị mới, đánh lặp lại dấu nhắc MATLAB trở lên buồn tẻ, MATLAB cung cấp giải pháp cho vấn đề là: cho phép bạn thay lệnh MATLAB file văn đơn giản, yêu cầu MATLAB mở file thực lệnh xác nh− đánh dấu nhắc MATLAB cửa sổ lệnh, file gọi script filescript filescript filescript file, đơn giản M_fileM_fileM_fileM_file Danh từ "script" để thực tế MATLAB đọc từ file kịch tìm thấy file Danh từ "M_file" để tên script file phải kết thúc phần mở rộng '.m' nh ví dụ example1.m Để tạo script M_file, chọn NewNewNewNew bảng chọn filefilefilefile chọn M_fileM_fileM_file Thủ tục M_file tạo hình soạn thảo, bạn đánh đ−ợc lệnh MATLAB Ví dụ d−ới cách lệnh ví dụ −ớc l−ợng chiều cao nhà tr−ớc:
function example1
% example1.m VÝ dơ −íc l−ỵng chiều cao nhà h =
theta = 60 D = 50;
building_height = h + D*tan(theta*pi/180)
Bạn ghi l−u giữ file nàybằng cách chọn Save Save Save Save từ bảng chọn filefilefile Khi bạn ghi lên file file ý phải đánh tên file trùng với tên hàm (example) không cần đánh vào phần mở rộng, MATLAB tự gán vào cho Khi từ dấu nhắc ta đánh:
>> example1 h=
theta= 60
building_height= 54.3599
(20)(nếu tìm thấy) tính giá trị lệnh tìm thấy vào thơng số xác dấu nhắc cửa sổ lệnh Nh− thấy lệnh M_file truy cập đến tất biến không gian làm việc MATLAB, tất biến M_file trở thành phần không gian làm việc Bình th−ờng lệnh đọc M_file khơng đ−ợc hiển thị nh− đ−ợc tính cửa sổ lệnh, nh−ng lệnh echo on echo on echo on echo on yêu cầu MATLAB hiển thị lặp lại lệnh cửa sổ lệnh nh− đọc tính Tiếp theo bạn đốn đ−ợc lệnh
echo off echo off echo off
echo off làm Giống nh− vậy, lệnh echoechoechoecho lặp lại làm thay đổi trạng thái
Với đặc điểm M_file bạn thay đổi lại nội dung file, ví dụ bạn mở M_file example1.m thay đổi lại giá trị h, D, theta, ghi lại file u cầu MATLAB tính lại lệnh file Thêm nữa, cách tạo M_file, lệnh bạn đ−ợc l−u đĩa ứng dụng sau bạn cần
Những ứng dụng dẫn MATLAB giúp hiểu đ−ợc dùng script file nh− example1.m, dẫn cho phép bạn l−u giữ lệnh script file, bạn nhớ đ−ợc lệnh làm bạn nhìn lại file sau Thêm nữa, dấu chấm phẩy đằng sau câu lệnh không cho hiển thị kết quả, từ bạn điều chỉnh script file đa kết cần thiết
Vì ứng dụng script file, MATLAB cung cấp số hàm đặc biệt có ích bn s dng M_file:
Các hàm M_file
disp(ans) Hiển thị kết mà không tªn biÕn
echo Điều khiển cửa sổ lệnh lặp lại lệnh script file input Sử dụng dấu nhắc để đa liệu vào
keyboard Trao ®iỊu khiển tạm thời cho bàn phím
pause Dng li ng−ời dùng nhấn phím
pause(n) Dừng lại n giây
waitforbuttonpress Dng li ng−ời dùng nhấn chuột phím
Khi lệnh MATLAB không kết thúc dấu chấm phẩy, kết lệnh đ−ợc hiển thị cửa sổ lệnh với tên biến Đơi lúc thuận tiện không cho tên biến, MATLAB ta dùng lệnh disp để thực việc này:
>> h % Cách truyền thống để kết h=
>> disp(h) % Hiện kết tên biến
Để giúp bạn soạn thảo script file tính tốn cho nhiều tr−ờng hợp, lệnh input input input input cho phép bạn tạo câu nhắc để vào liệu đ−ợc an tồn Ví dụ example1.m với phần đ−-ợc sửa:
function example1
% example1.m Ví dụ ớc lợng chiều cao nhà h =
(21)D = input(‘ Vµo khoảng cách ngời nhà: ) building_height = h + D*tan(theta*pi/180)
chạy file này: >> example1 h=
theta= 60
Vào khoảng cách ngời nhà: 60 D=
60
building_height= 64.8319
ở ví dụ ta gõ vào số 60 ấn Enter Những lệnh sau tính với giá trị D 60 Chú ý hàm inputinputinputinput dùng với phép toán khác giống nh− hàm thông th−ờng khác, hàm ininininputputputput chấp nhận kiểu biểu diễn số nào, ví dụ ta vào số là: +5
>> example1 h=
theta= 60
Vào khoảng cách ngời nhà: sqrt(1908)+5 D=
48.6807 building_height= 52.9783
Để xem tác động lệnh echoechoechoecho, ta dùng chúng script file: echo on
function example1
% example1.m Ví dụ ớc lợng chiều cao nhà h =
theta = 60
D = input(‘ Vào khoảng cách ngời nhà: ) building_height = h + D*tan(theta*pi/180)
echo off
chạy chơng trình ta đợc: >> example1
% example1.m Ví dụ ớc lợng chiều cao nhà h =
(22)theta = 60 theta= 60
D = input( Vào khoảng cách ngời nhà: ) Vào khoảng cách ngời nhà: 60
building_height = h + D*tan(theta*pi/180) building_height=
64.8319 echo off
Nh− bạn thấy tr−ờng hợp này, lệnh echoechoechoecho làm cho kết khó đọc hơn, nh-−ng ng−ợc lại lệnh có ích gỡ rối nhiều script file ứng dụng
-oOo -
Chơng
QUảN Lý Tệp
MATLAB cung cp số hàm file hệ thống lệnh cho phép bạn liệt kê tên file, xem, xoá M_file, hiển thị thay đổi th− mục chứa Một số tổng kết lệnh đ−ợc đ-wa bảng d−ới Thêm vào bạn xem sửa đ−ờng dẫn MATLAB (matlabpath) Những đ−ờng dẫn cho MATLAB nơi chứa script file hàm M_file máy tính bạn Có nhiều tr−ờng hợp hàm MATLAB M_file đơn giản đ−ợc chứa ổ đĩa, nh−ng MATLAB thông báo hàm này, nh− khơng tìm đ−ợc đ−ờng dẫn MATLAB, bạn cần phải thay đổi lại ng dn:
Các hàm hệ thống file
addpath dir1 Thêm th mục dir1 vào bắt đầu đờng dÉn
cd HiĨn thÞ th− mơc hiƯn thêi
p = cd Gán th− mục làm việc thời cho biến p cd path Thay đổi th− mục đa đ−ờng dẫn delete test.m Xoá M_file test.m
dir Danh sách tất file th mục thời d = dir Trả lại file th mơc hiƯn thêi cÊu tróc
biÕn d
edit test Mở test.m để soạn thảo, giống nh− Open bảng chon file
exist(‘cow‘,‘file‘) KiÓm tra sù tån file cow.m đờng dẫn
exist(d,dir) Kiểm tra tồn th mục d đờng dẫn filesep Tách file nh\ Windows95 NT, ‘:‘ trªn
Macintosh
fullfile Tạo tên file với đ−ờng dẫn đầy đủ inmem Danh sách hàm M_file, gọi từ nhớ
ls Gièng nh− dir
(23)MATLABroot Trả đờng dẫn th mục cho chơng trình thực MATLAB
path Hiển thị sửa đờng dẫn MATLAB (MATLABpath)
pathdef.m Hm M_file, nơi mà mmatlabpath pathsep Chia đ−ờng dẫn cho matlabpath
pwd Gièng nh− cd
rmpath dir1 Bỏ th− mục dir1 từ đ−ờng dẫn matlabpath startup.m script M_file thực MATLAB khởi động tempdir Tên th− mục tạm thời
tempname Tªn cđa file t¹m thêi
type test HiƯn M_file test.m cửa sổ lệnh what Trả lại danh sách tất M_file MAT_file
trong th mục thời
which test Hiển thị đ−ờng dẫn th− mục đến test.m
Đ−ờng đẫn MATLAB danh sách tất th− mục l−u trữ file MATLAB Hơn nữa, bạn tạo th− mục M_file đ−ờng dẫn phải đ−ợc thêm vào matlabpath, khơng MATLAB khơng thể truy cập đến file bạn đ−ợc, trừ file đặt th− mục thời
§Ĩ xem MATLAB sư dơng matlabpath nh− thÕ nµo, h·y xem trờng hợp đợc mô tả bảng sau:(Không thấy)
Đờng dẫn MATLAB
Khi bạn gõ >> cow, MATLAB sÏ lµm nh− sau:
(1) KiĨm tra cow biến không gian làm việc MATLAB, không
(2) Nó kiểm tra cow hàm đợc xây dựng, không
(3) Nó kiểm tra tên M_file cow.m tồn th mục thời, không
(4) Nó kiểm tra cow.m tồn nơi đờng dẫn MATLAB cách tìm kiếm đờng dẫn
Khi phù hợp đợc tìm thÊy th× MATLAB chÊp nhËn nã VÝ dơ nh− cow tồn nh biến không giạn làm việc MATLAB, MATLAB không dùng hàm biến có tên cow Vì bạn tránh không nên tạo biến có tên trùng với tên hàm nh:
>> sqrt = 1.2; >> sqrt(2);
Những lệnh tạo lỗi, sqrt khơng phải hàm tính bậc hai, biến có giá trị 1.2 Thủ tục đ−ờng dẫn đ−ợc dùng lệnh load load load load đ−ợc dùng Đầu tiên MATLAB tìm kiếm th− mục tại, sau tìm theo đ−ờng dẫn MATLAB đến file liệu
(24)Nếu bạn có M_file MAT_file chứa th− mục đ−ờng đẫn MATLAB không th− mục tại, MATLAB tìm thấy chúng Có hai giải pháp cho vấn đề là:
(1)_T¹o th− mơc thiÕt kÕ thành th mục tại, dùng lệnh cd cd cd cd pwdpwdpwdpwd từ bảng trớc
(2)_Cộng thêm th mục thiết kế đờng dẫn MATLAB
Ci cïng nã rÊt dƠ dµng ta sử dụng phơng pháp duyệt qua đờng dẫn (path browserpath browserpath browserpath browser) lệnh cửa sổ lệnh pathpathpathpath addpathaddpathaddpathaddpath Để dùng path browser, ta chän set pathset pathset pathset path tõ b¶ng chän file nhấn chuột nút path browserpath browserpath browserpath browser công cụ cửa sổ lệnh Làm nh ta đợc hình giống nh hình 5.1:h×nh 5.1:h×nh 5.1: h×nh 5.1:
Giống nh− thiết kế GUI, liên quan trực tiếp ta sử dụng Đ−ờng dẫn matlabpath đ−ợc hiển thị bên trái, th− mục nằm đ−ờng dẫn đ−ợc chọn nằm bên trái, nút thay đổi đ−ờng dẫn nh− thêm đ−ờng dẫn (add to path), loại bỏ đờng dẫn (remove from path) phía Để ghi lại thay đổi ta chọn savsavsavsave pathe pathe pathe path từ bảng chọn filefilefilefile cửa sổ
path browser path browser path browser
path browser tr−ớc đóng GUI
H×nh 5.1 path browser MATLAB 5.2 H×nh 5.1 path browser MATLAB 5.2 H×nh 5.1 path browser MATLAB 5.2 H×nh 5.1 path browser MATLAB 5.2
(25)
H×nh 5.2 path browser MATLAB to Student H×nh 5.2 path browser MATLAB to Student H×nh 5.2 path browser MATLAB to Student H×nh 5.2 path browser MATLAB to Student 5.1 MATLAB khë
5.1 MATLAB khë 5.1 MATLAB khë
5.1 MATLAB khởi độngi độngi độngi động
Khi khởi động MATLAB, tạo hai script M_file matlabrc.m startup.m, atlabrc.m MATLAB, nhìn chung khơng đ−ợc sửa
Các lệnh M_file tạo cấu hình mặc định kích cỡ cửa sổ vị trí nó, nh− đặc điểm mặc định khác Windows95, WindowNT Đ−ờng dẫn mặc định đ−ợc tạo cách gọi script file pathdef.m từ matlabrc.m Trong phần, lệnh matlabrc.m kiểm tra tồn script M_file startup.m đ−ờng dẫn MATLAB tồn tại, lệnh đ−ợc thực
Sự lựa chọn M_file startup.m chứa lệnh có đặc điểm riêng MATLAB Ví dụ thơng th−ờng ta thêm lệnh path path path path addpath addpath addpath addpath
trong startup.m để chèn thêm th− mục vào đ−ờng dẫn MATLAB Giống nh− vậy, mặc định hiển thị khn dạng số thay đổi đ−ợc nh− format compact Nếu bạn có hình cân xám, lệnh graymon có ích tạo mặc định đồ hoạ cho chế độ Hơn nữa, bạn vẽ đồ thị có kiểu mặc định riêng gọi tới colordef xuất startup.m Khi startup.m file chuẩn script M_file, khơng lệnh thay đ−ợc Tuy nhiên ta thay lệnh quit startup.m
(26)chơng
các phép toán với MảNg
Tất tính tốn trì điểm có sử dụng đến số đơn, gọi scalars
scalars scalars
scalars Phép tốn có liên quan đến scalarsscalarsscalarsscalars phép tốn bản, nh−ng lúc đó, phép tốn phải lặp lại nhiều lần tính nhiều số Để giải vấn đề này, MATLAB định nghĩa thao tác mảng liệu
6.1 Mảng đơn 6.1 Mảng đơn 6.1 Mảng đơn 6.1 Mảng đơn
Giả sử ta xét hàm y=sin(x) nửa chu kỳ ( ‘ ‘ x ‘ ) khoảng số điểm giá trị x vô tận, nh−ng ta xét điểm cách khoảng giá trị 0.1‘ nh− số giá trị x đếm đ−ợc Từ ta có mảng giá trị x
x= 0, 0.1‘, 0.2‘, , ‘
Nếu ta dùng máy tính kỹ thuật để tính ta đ−ợc t−ơng ứng giá trị y, từ ta có mảng y
x 0.1‘ 0.2‘ 0.3‘ 0.4‘ 0.5‘ 0.6‘ 0.7‘ 0.8‘ 0.9‘ ‘ y 0.31 0.59 0.81 0.95 1.0 0.95 0.81 0.59 0.31 m¶ng x chứa phần tử x1, x2, , x11
trong mảng y chứa phần tử y1, y2, , y11
Trong MATLAB để toạ mảng đơn giản; ví dụ để tạo hai mảng ta đánh lệnh sau vào dấu nhắc MATLAB:
>> x=[0 1*pi 2*pi 3*pi 4*pi 5*pi 6*pi 7*pi 8*pi 9*pi pi] x=
Columns through
0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 Columns through 11
2.1991 2.5133 2.8274 3.1416 >> y = sin(x)
y=
Columns through
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 Columns through 11
0.8090 0.5878 0.3090 0.0000
Kết ta đợc mảng y gồm phần tử tơng ứng sine phần tử x, MATLAB ngầm hiểu ta tính sine phần tử x
Để tạo mảng, ta đặt phần tử mảng vào hai dấu ngoặc vuông "[ ]"; hai phần tử mảng du cỏch hoc du phy ","
6.2 Địa mảng 6.2 Địa mảng 6.2 Địa mảng 6.2 Địa mảng
mảng x có hàng, 11 cột hay gọi vector hàng, mảng có độ dài 11
+) Để truy nhập đến phần tử mảng ta dùng số thứ tự phần tử mảng
(27)>> x(2) % phần tử thứ mảng ans=
0.3142
>> y(5) % phần tử thứ mảng ans=
0.9511
+) Để truy nhập đến nhiều phần tử mảng, ví dụ ta truy nhập từ phần tử thứ đến phần tử thứ năm mảng x:
>> x(1:5) ans=
0.3142 0.6283 0.9425 1.2566
Truy nhập từ phần tử thứ đến phần tử cuối mảng y: >> y(7:end)
ans=
0.9511 0.8090 0.5878 0.3090 0.0000
Truy nhập từ phần tử thứ ba đến phần tử thứ mảng y: >> y(3:-1:1)
ans=
0.5878 0.3090
ở ví dụ phần tử thứ 3, phần tử đầu tiên, -1 giá trị cộng (vị trí phần tử sau vị trí phần tử trớc cộng với -1)
Truy nhập đến phần tử khoảng từ phần tử thứ 2, đến phần tử thứ 7, vị trí phần tử sau vị trí phần tử tr−ớc cộng với 2, mảng x:
>> x(2:2:7) ans=
0.3142 0.9425 1.5708
Tạo mảng gồm phần tử thứ 1, 2, 8, cđa m¶ng y: >> y([8 1])
ans=
0.8090 0.3090 0.5878
Nếu ta truy nhập vào phần tử mảng mà thứ tự phần tử tăng với 1, ta đánh lệnh:
>> x(1:3) ans=
(28)Víi m¶ng có số lợng phần tử ta nhập vào trực tiếp, nhng với mảng có số l-ợng lớn phần tử ta dùng hai cách sau:
+) Tạo mảng bắt đầu phÇn tư 0, sau b»ng phÇn tư tr−íc céng víi 0.1, phần tử cuối 1, tất phần tử mảng đợc nhân với :
>> x= (0:0.1:1)*pi x=
Columns through
0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 Columns through 11
2.1991 2.5133 2.8274 3.1416
+) Tạo mảng gồm phần tư cđa x b»ng hµm linspace linspace linspace linspace Có pháp hàm nh sau: linspacelinspacelinspacelinspace(giá trị phần tử đầu, giá trị phần tử cuối, số phần tư)
vÝ dơ
>> x = linspace(0,pi,11) x=
Columns through
0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 Columns through 11
2.1991 2.5133 2.8274 3.1416
Cách thứ giúp ta tạo mảng mà cần vào khoảng cách giá trị phần tử (không cần biết số phần tử), cách thứ hai ta cần vào số phần tử mảng (không cần biết khoảng cách giá trị phần tử)
Ngoài mảng trên, MATLAB cung cấp mảng không gian theo logarithm hàm
logspace logspace logspace
logspace Cú pháp hàm logspacelogspacelogspacelogspace nh sau:
logspace(số mũ đầu, số mị ci, sè phÇn tư) vÝ dơ:
>> logspace(0,2,11) ans=
Columns through
1.0000 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489 Columns though 11
25.1189 39.8107 63.0957 100.0000
Tạo mảng, giá trị bắt đầu 100, giá trị cuối 100, chứa 11 giá trị
Các mảng mảng mà phần tử đ−ợc tạo lên theo quy luật định Nh−ng đơi mảng đ−ợc u cầu, không thuận tiện tạo phần tử ph−ơng pháp trên, khơng có mẫu chuẩn để tạo mảng Tuy nhiên ta tạo mảng cách vào nhiều phần tử lúc
VÝ dô
(29)b=
>> c = [a b]
1
ở ví dụ ta tạo hai mảng thành phần a b sau tạo mảng c cách ghép hai mảng a b
Ta tạo mảng nh sau: >> d=[a(1:2:5) 1]
d=
a mảng gồm phần tử [1 5], mảng d mảng gồm phần tử a ghép thêm phần tử [1 1]
Tóm lại ta có bảng cấu trúc mảng bản:
x=[ 2*pi sqrt(2) 2-3j ] Tạo vector hàng x chứa phần tử đặc biệt x= first : last Tạo vector hàng x bắt đầu first, phần tử sau
b»ng phÇn tư tr−íc cộng với 1, kết thúc phần tử có giá trị nhỏ last
x= first : increment : last Tạo vector hàng x bắt đầu fist, giá trị cộng increment, kết thúc phần tử có giá trị nhỏ last
x= linspace(fist, last, n) Tạo vector hàng x bắt đầu first, kết thúc last, có n phần tử
x= logspace(first, last, n) Tạo vector hàng không gian logarithm x bắt đầu 10first, kết thúc 10last, có n phần tử
6.4 Vector hàng vµ vector cét 6.4 Vector hµng vµ vector cét 6.4 Vector hµng vµ vector cét 6.4 Vector hµng vµ vector cét
Trong c¸c vÝ dơ tr−íc, mảng chứa hàng nhiều cột, ngời ta thờng gọi vector hàng Ngoài ta có mảng vector cột, tức mảng có cột nhiỊu hµng,
tr−ờng hợp tất thao tác tính tốn mảng nh− không thay đổi Từ hàm tạo mảng minh hoạ phần tr−ớc (tất tạo vector hàng), có nhiều
cách để tạo vector cột Một cách trực tiếp để tạo vector cột vào phần tử mảng nh− ví dụ sau:
>> c = [1;2;3;4;5] c=
(30)
Một cách khác để tạo vector cột dùng hàm linspacelinspacelinspacelinspace, logspacelogspacelogspacelogspace, hay từ vector hàng, sau dùng ph−ơng pháp chuyển vị MATLAB dùng toán tử chuyển vị ( ' ) để chuyển từ vector hàng thành vector cột ng−ợc li
Ví dụ tạo vector aaaa vector bbbb chuyển vị vector aaaa, vector cccc chun vÞ cđa vector bbbb:
>> a= 1:5 a=
>> b= a'
b= >> c= b' c=
Ngồi MATLAB cịn sử dụng toán tử chuyển với dấu chấm đằng tr−ớc ( ' ) ( toán tử chuyển vị chấm) Toán tử khác với toán tử chuyển vị ( ' ) phần tử mảng số phức, tức từ vector nguồn với phần tử số phức, toán tử ( ' ) tạo vector phức liên hợp chuyển vị, cịn tốn tử ( ' ) tạo vector chuyển vị
VÝ dụ sau làm rõ điều trên:
>> c = a.' % T¹o vector cccc tõ vector aaaa toán tử chuyển vị chấm c=
>> d = a + i*a % T¹o vector sè phøc dddd tõ vector aaaa d=
Columns though
1.0000+1.0000i 2.0000+2.0000i 3.0000+3.0000i 4.0000+4.0000i Columns
5.0000+5.0000i
>> e = d.' % T¹o vector eeee tõ vector dddd toán tử chuyển vị chấm ( ' ) e=
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i 5.0000 + 5.0000i
>> f = d' % T¹o vector ffff từ vector dddd toán tử chuyển vị ( ' ) f=
(31)3.0000 - 3.0000i 4.0000 - 4.0000i 5.0000 - 5.0000i
ta xét đến mảng có hàng hay cột ta xét tr−ờng hợp có nhiều hàng nhiều cột, cịn đ−ợc gọi ma trận Ví dụ sau ma trận gggg có hai hàng bốn cột:
>> g = [1 4;5 8] g=
Trong ví dụ ta dùng dấu cách để vào phần tử hàng dấu chấm phẩy ( ; ) để tạo hai hàng; ta tạo ma trận nh− sau:
>> g = [1
9 10 11 12] g=
10 11 12 Chó ý
Chó ý Chó ý
Chó ý: Khi nhập vào ma trận hàng số phần tử phải không chơng trình bị báo lỗi nh ví dụ sau:
>> h = [1 3;4 7]
Numbers of elements in each row must be the same +) Phép toán mảng với số đơn
+) Phép toán mảng với số đơn +) Phép toán mảng với số đơn +) Phép toán mảng với số đơn
Trong ví dụ tr−ớc tạo mảng x cách nhân phần tử mảng với Các phép toán đơn giản khác mảng với số đơn phép cộng, phép trừ, phép nhân, phép chia mảng cho số cách thực phép toán phần tử mảng
VÝ dô:
>> g = [1 4; 8; 10 11 12];
>> -2 % Trừ phần tử mảng g ans=
-1 10
>> 2*g - % Nhân tất phần tử mảng g với sau trừ ans=
(32)+) Phép toán mảng với mảng
Thuật toán thực phép toán mảng khơng phải đơn giản nh− mà cịn bị ràng buộc điều kiện khác nh− hai mảng kích cỡ nh− ta có phép toán sau: phép cộng, phép trừ, phép nhân, chia tơng ứng phần tử của hai mảng
VÝ dô :
>> g % Gäi lại mảng g g=
10 11 12
>> h = [1 1 1; 2 2; 3 3] % Tạo mảng míi h h=
>> h + g % Céng hai ma trËn g h ( cộng tơng ứng phần tử h víi g) ans=
10 12 13 14 15
>> ans - h % Lấy kết trớc trừ mảng h, ta đợc lại mảng g ans=
10 11 12
>> 2*g - h % Nhân ma trận g với sau lấy kết trừ ma trận hhhh ans=
10 12 14 15 17 19 21
>> g.*h % Nhân tơng ứng phần tử mảng g với phần tư cđa m¶ng hhhh ans=
10 12 14 16 27 30 33 36
ở ví dụ ta dùng tốn tử chấm_nhân ( * ), ngồi MATLAB cịn dùng tốn tử chấm_chia ( / \ ) để chia t−ơng ứng phần tử hai mảng nh− ví dụ d−ới đây: >> g./h % Chia phải t−ơng ứng phần tử mảng g với phần tử mảng hhhh ans=
1.0000 2.0000 3.0000 4.0000 2.5000 3.0000 3.5000 4.0000 3.0000 3.3333 3.6667 4.0000
>> h.\g % Chia trái tơng ứng phần tử mảng gggg với phần tử mảng hhhh ans=
(33)3.0000 3.3333 3.6667 4.0000
Chú ý ta dùng phép nhân_chấm hay phép chia_chấm mảng gggg hhhh mà dùng phép nhân ( * ) hay phép chia ( / \ ) phép tốn u cầu số cột số hàng hai ma trận phải t−ơng thích
vÝ dơ: >> g*h
??? Error using ==> *
Inner matrix dimensions must agree >> g/h
Warning: Rank deficient, rank = tol = 503291e-15 ans=
0.8333 2.1667 3.5000 >> h/g
Warning: Rank dificient, rank = tol = 1.8757e-14 ans=
- 0.1250 0.1250 - 0.2500 0.2500 - 0.3750 0.3750
Phép chia ma trận đa kết mà không cần thiết phải kích cỡ nh− ma trận gggg ma trận hhhh Về phép toán ma trân nói đến sau
+) M¶ng víi l thõa
MATLAB dùng tốn tử ( ^ ) để định nghĩa luỹ thừa mảng
VÝ dụ ta có hai mảng gggg hhhh nh trên, ta tạo mảng toán tö ( ^ ) nh− sau:
>> g.^2 % Các phần tử gggg đợc luỹ thừa vớ sè mị lµ ans=
16 25 36 49 64 81 100 121 144
>> g.^-1 % Các phần tử gggg đợc luỳ thừa với số mũ -1 ans=
0.5 0.33333 0.25 0.2 0.16667 0.14286 0.125 0.11111 0.1 0.090909 0.083333
>> 2.^g % Các phần tử gggg số mị cđa ans=
(34)>> g.^(h - 1) % Các phần tử gggg đợc luỹ thừa với số mũ tơng ứng phần tử hhhh trừ
ans=
81 100 121 144
Sau bảng số phép toán mảng: Các phép toán phần tử mảng
Các phép toán phần tử mảng Các phép toán phần tử mảng Các phép toán phần tử mảng
Dữ liệu minh hoạ: a = [a1 a2 an] , b = [b1 b2 bn] , c số vô h−ớng Cộng với số đơn a+c = [a1 +c a2 +c an+c]
Nhân với số đơn a*c = [a1 *c a2 *c an*c]
Céng m¶ng a+b = [ a1+b1 a2+b2 an+bn ] Nhân mảng a.*b = [ a1*b1 a2*b2 an*bn ] Chia ph¶i m¶ng a./ b = [ a1/ b1 a2/ b2 an/ bn ] Chia trái mảng a.\ b = [ a1\ b1 a2\ b2 an\ bn ] Luü thõa m¶ng a.^c = [ a1^c a2^c an^c ]
c.^a = [ c^a1 c^a2 c^an ] a.^b = [ a1^b1 a2^b2 an^bn ]
6.5 M¶ng có phần tử 6.5 Mảng có phần tử 6.5 Mảng có phần tử 6.5 Mảng có phần tử
Bởi có ứng dụng chung chúng mà MATLAB cung cấp hàm để tạo mảng mà phần tử chúng
VÝ dơ:
>> ones(3) % T¹o mảng hàng, cột với phần tử ans=
>> zeros(2,5) % Tạo mảng hàng, cột với phần tử ans=
0 0 0 0
Tạo mảng có phần tử 1, kích cỡ mảng g biết >> size(g) % Hàm trả kích cỡ mảng g
ans= >> ones(size(g)) ans=
(35)Khi gọi hàm ones(n)ones(n)ones(n)ones(n), zeros(n)zeros(n)zeros(n)zeros(n) với thông số n MATLAB tạo mảng vuông với số hµng vµ sè cét lµ n Khi gäi hµm víi hai thông số ones(r,c)ones(r,c)ones(r,c)ones(r,c), zeos(r,c)zeos(r,c)zeos(r,c)zeos(r,c) r số hµng, c lµ chØ sè cét
6.6 Thao 6.6 Thao 6.6 Thao
6.6 Thao tác mảngtác mảngtác mảng tác mảng
Từ mảng ma trận MATLAB, có nhiều cách để thao tác chúng MATLAB cung cấp cách tiện ích để chèn vào, lấy ra, sếp lại phần tử chúng số phần tử Ví dụ dới minh hoạ đặc điểm thao tác mảng ma trận trên:
>> A = [1 3; 6; 9] A=
>> A(3,3) = % Gán phần tử hàng thứ 3, cột thø b»ng
>> A(2,6) = % Gán phần tử hàng thứ 2, cột thứ b»ng A=
ở ma trận A cột, kích cỡ ma trận A phải tăng lên cho phù hợp, phần tử tăng thêm đợc điền số không
>> A(:,4) = % Gán tất phần tử thuộc cét thø b»ng A=
ở ta dùng dấu hai chấm ( : ) để tất hàng
>> A = [1 3; 6; 9]; % Gán lại giá trÞ cđa ma trËn A
>> B = A(3:-1:1,1:3) % Tạo ma trận B cách đảo ng−ợc hàng ma trận A
B=
>> B = A(3:-1:1,:) % Cịng t¹o ma trËn B nh− trªn
% nh−ng ta dùng ( : ) để tất cột B=
(36)
>> C = [ A B(:,[1 3])] % Tạo ma trận C cách ghÐp ma trËn A vµ
% cét thứ nhất, thứ ba ma trận B vào bên ph¶i ma trËn A
C=
>> C = [1 3]
C=
>> B = A(C,C) % Dùng ma trận C làm số để tạo ma trận B Từ ma trận A B=
>> B= A(:) % T¹o ma trËn cét B tõ ma trËn A B=
>> B = B.' % ChuyÓn ma trận B thành ma trận hàng toán tử chun vÞ chÊm
B=
>> B = A;
>> B(:,2) = [] % Lo¹i bá cét thø hai cña ma trËn B B=
Khi ta g¸n cét thø hai cđa ma trËn B cho ma trận rỗng ([]) bị xoá, ma trận lại rút bỏ hàng thø hai
>> B = B.' B=
>> B(2,:) = [] B=
(37)
>> B = A(:,[2 2 2]) B=
Tạo ma trận B cách t¹o cét gièng cét thø hai cđa ma trËn A, số hàng giữ nguyên số hàng ma trËn A
>> A(2,2) = []
??? Indexed empty matrix assignment is not allowed
ở MATLAB không cho phép xoá phần tử ma trận mà phải xoá cột hµng
>> B = A(4,:)
??? Index exeeds matrix dimension
VÝ dơ trªn ma trËn A bốn hàng, nên MATLAB thông báo nh >> B(1:2,:) = A
??? In an assignment A(matrix, :) = B, the number of columns in A and B must be the same
MATLAB chØ r»ng bạn gán ma trận vào ma trận khác mà khác kích cỡ
>> B = [1 7]; >> B(3:4,:) = A(2:3,:) B=
Nh−ng ta gán hai hàng ma trận A cho hai hàng ma trận B, ma trận A ma trận B có số cột Ma trận B có hàng nên thêm hàng thứ ba hàng thứ t− hàng thứ hai ma trận B đ−ợc mặc định cho thêm phần tử vào
>> G(1:6) = A(:,2:3) G=
(38)
Đôi để tiện lợi ta dùng số đơn để truy nhập đến phần tử mảng Khi số đơn đ−ợc dùng MATLAB thứ tự phần tử mảng đ−ợc tính phần tử cột, tính hết cột tính đến cột
VÝ dơ:
>> D = [1 4; 8; 10 11 12] D=
10 11 12
>> D(2) % PhÇn tư thø hai cđa m¶ng ans=
>> D(5) % Phần tử thứ năm mảng ( cột 2, hàng ) ans=
>> D(end) % PhÇn tư ci cïng cđa m¶ng ans=
12
>> D(4:7) % Từ phần tử thứ t− đến phần tử thứ bẩy ma trận ans=
10
Ngoài tr−ờng hợp dùng địa dựa bảng số, cịn dùng địa dựa mảng logic_là kết từ phép toán logic Nếu kích cỡ mảng logic cân với mảng tạo địa mảng Trong tr−ờng hợp phần tử True (1) đ−ợc lại phần tử False (0) bị bỏ
VÝ dô:
>> x = -3:3 % Tạo mảng liệu x=
-3 -2 -1 >> abs(x)>1
ans=
Trả mảng logic với giá trị phần tử có trị tuyệt đối lớn >> y = x( abs(x)>1)
y=
-3 -2
Tạo mảng y cách lấy phần tử x mà có trị tuyệt đối lớn >> y = x([1 0 1])
??? Index into matrix is negative or zero See release notes on changes to logical indices
(39)khơng có phần tử Tuy nhiên MATLAB cung cấp hàm logicallogicallogicallogical để chuyển đổi từ mảng số sang mảng logic
>> y = x(logical([1 0 1])) y=
-3 -2
mảng logic làm việc với ma trận nh− vector: >> B = [5 -3; -4]
B=
-3 -4
>> x = abs(B)>2 x=
>> y = B(x) -3
Tuy nhiên kết đ−ợc chuyển thành vector cột khơng cách để định nghĩa ma trận có ba phần tử Địa mảng A( r, c ) Địa mảng mảng A, định nghĩa số vector hàng thiết kế r, số vector cột thiết kế c A( r, : ) Địa mảng mảng A, định nghĩa bằnh số vector hàng thiết kế r, tất cột A A( : , c) Địa mảng mảng A, định nghĩa tất hàng A, số vector cột đ−ợc thiết kế c.A( : ) Địa tất phần tử A nh− vector cột, cách ghép thứ tự cột vector A A( i ) Địa mảng mảng A, định nghĩa số vector đơn đ−ợc thiết kế i, với giả sử A vector cột A( x ) Địa mảng mảng A, định nghĩa mảng logic x x phải kích cỡ với A
6.7 Tìm kiếm mảng 6.7 Tìm kiếm mảng 6.7 Tìm kiếm mảng 6.7 Tìm kiếm m¶ng
Nhiều muốn biết số hay danh sách số phần tử mảng mà thoả mãn biểu thức quan hệ, MATLAB để thực việc ta sử dụng hàm findfindfindfind, hàm trả danh sách số phần tử mà biểu thức quan hệ chúng đúng:
>> x = -3:3 x=
-3 -2 -1 >> k = find(abs(x)>1)
k=
tìm số vị trí mà abs(x)>1 y = x(k)
y=
-3 -2
(40)Hµm findfindfindfind cịng cã thĨ sư dơng ma trËn: >> A = [1 3; 6; 9]
A=
>> [i,j] = find(A>5) i=
j=
i số hàng, j số cột; i j có mối quan hệ t−ơng ứng để vị trí mà biểu thức quan hệ
Chú ýChú ýChú ýChú ý: MATLAB trả lại hai nhiều biến, chúng đ−ợc đặt dấu ngoặc vuông, đ−ợc đặt bên trái dấu Cú pháp khác với cú pháp thao tác mảng trên, mà [i,j]đ−ợc đặt bên phải dấu bằng, xây dựng lên mảng mà j đ−ợc kết nối vào bên phải du bng
Bảng dới tóm tắt dạng lệnh phần tìm kiếm mảng: Tì
Tì Tì
Tìm kiếm mảngm kiếm mảngm kiếm mảngm kiếm mảng
i = find(x) Trả lại số mảng x nơi mà phần tử khác không
[ r, c ] = find(x) Trả lại số hàng số cột mảng x nơi mà phần tử khác không
6.8 So sánh mảng 6.8 So sánh mảng 6.8 So sánh mảng 6.8 So sánh mảng
Chúng ta dùng hàm isequalisequalisequalisequal so sánh hai mảng Thí dụ: >> A = [1 3; 6; 9]‘
A=
>> B = A.*(-1).^A B=
-1 -7 -5 -3 -9
>> C = 1:9 % Tạo mảng có giá trị với A nhng có khuôn dạng khác
(41)ans=
>> isequal(A,B) ans=
>> isequal(A,A) ans=
>> isequal(C,C‘) ans=
Hàm iseqiseqiseqisequal ual ual ual trả lại giá trị logic (1) hai mảng có kích cỡ, phần tử giống Ngồi trả lại giá trị sai (0)
Thêm vào đó, hàm ismemberismemberismemberismember phần tử giống hai mảng: >> ismember(A,B) % Kết trả vector cột
ans=
>> ismember(A,B) ans=
ismember ismember ismember
ismember trả lại giá trị cho số A mà phần tử có đối số thứ hai Hai đối số khơng cần có kích cỡ
>> x = 0:2:20 % m¶ng víi 11 phÇn tư x=
10 12 14 16 18 20 >> ismember(x,A)
ans=
1 1
(42)>> ismember(x,A) ans=
Đây mảng có số phần tử số phần tử A, với phần tử chung V× vËy
ismember ismember ismember
ismember so sánh đối số thứ với đối số thứ hai trả lại vector có số phần t vi i s th nht
Những hàm tạo khác th viện MATLAB:
>> union(A,B) % Tất phần tử có hai mảng ans=
-9 -7 -5 -3 -1
>> intersect(A,B) % PhÇn tư chung cđa hai m¶ng ans=
>> setdiff(A,B) % Các phần tư cã A nh−ng kh«ng cã B ans=
>> setxor(A,B) % Các phần tử không thuộc phần chung A B ans=
(43)-5 -3 -1
Những hàm đợc tổng kết lại bảng dới đây: So sánh mảng
isequal(A, B) §óng nÕu A vµ B gièng
ismember(A, B) Đúng phần tử A phần tử B intersect(A, B) Các phần tử chung A B
setdiff(A, B) Các phần tử có A mà B setxor(A, B) Các phần tử không thuộc phần chung A
B
union(A, B) Tất phần tử có A B 6.9 KÝch cì cđa m¶ng
6.9 KÝch cì cđa m¶ng 6.9 KÝch cì cđa m¶ng 6.9 KÝch cì cđa m¶ng
phần tr−ớc biết lệnh whowhowhowho cung cấp tên biến ng−ời dùng định nghĩa Trong tr−ờng hợp mảng, cịn quan trọng biết kích cỡ mảng Trong MATLAB, lệnh whoswhoswhoswhos cung cấp thông tin này:
>> whos
Name size Bytes Class A 3x3 72 double array B 1x3 24 double array
ans 1x4 32 double array (logical) Grand total is 16 elements using 128 bytes
Thêm vào để đánh số kích cỡ biến, whoswhoswhoswhos hiển thị tổng số bytes chiếm, class biến Ví dụ, thơng tin đề cập trên, ans l mng logic
Trong trờng hợp mà kích cỡ ma trận vector không đợc biết nhng cần thiết cho số thao tác, MATLAB cung cÊp hai hµm øng dơng lµ sizesizesizesize vµ length length length length
:
>> A = [1 4; 8]; >> s = size(A)
s=
Với thông số ra, hàm sizesizesizesize trả lại vector hàng có hai phần tử, phần tử thứ số hàng, phần tử thứ hai số cột
>> [r,c] = size(A) r=
(44)
Víi hai thông số đa ra, hàm sizesizesizesize trả lại số hµng ë biÕn thø nhÊt, vµ sè cét ë biÕn thø hai
>> r = size(A,1) r=
>> c = size(A,2)
Gọi hai thông số, hàm sizesizesizesize trả số cột số hàng >> length(A)
ans=
Trả giá trị số hàng số cột, giá trị lớn đợc trả >> B = pi:0.01:2*pi;
>> size(B) ans= 315
Cho biÕt r»ng B lµ vector hµng, vµ >> length(B)
ans= 315
trả lại độ dài vector >> size([ ])
chØ r»ng ma trận rỗng kích cỡ
Những khái niệm đợc tổng kết bảng dới đây: KÝch cì cđa m¶ng
KÝch cì cđa m¶ng KÝch cì cđa m¶ng KÝch cì cđa m¶ng
whos Hiển thị biến, mà tồn không gian lµm viƯc vµ kÝch cì cđa chóng
s = size(A) Trả lại vector hàng s, mà phần tử thứ số hàng A, phần tử thø hai lµ sè cét cđa A
[ r, c ] = size(A) Trả lại hai số vô híng r, c chøa sè hµng vµ sè cét cđa A r = size(A, 1) Trả lại số hàng cña A biÕn r
c = size(A, 2) Trả lại số cột A biến c
n = length(A) Trả lại max(size(A)) biến n A không rỗng
6.10 Mảng nhiỊu chiỊu 6.10 M¶ng nhiỊu chiỊu 6.10 M¶ng nhiỊu chiỊu 6.10 M¶ng nhiỊu chiỊu
Đối với MATLAB versions tr−ớc 5.0, mảng có hai chiều Từ MATLAB 5.0 trở lên số chiều mảng tăng lên Ví dụ:
>> a = [1 0; 1] a=
(45)>> b = [2 2; 2] b=
>> c = [0 3; 0] c=
>> d = cat(3,a,b,c) d(:,:,1)=
d(:,:,2)= d(:,:,3)= >> size(d) ans=
Tạo mảng hai chiều a, b, c, sau ghép chúng lai với thành mảng ba chiều cách sử dụng hàm cat cat cat cat Nh− mảng d mảng có hai hàng, hai cột, ba trang Mảng a tạo trang thứ nhất, b trang thứ hai, c trang thứ ba Thông số trang diễn tả chiều thứ ba mảng, cung cấp cách hình dung mảng ba chiều nh− mảng hai chiều, trang xếp thứ tự từ cuối nh− sách Đối với mảng có số chiều cao hơn, khơng có tên chung, khó t−ởng t−ợng!
Thao tác với mảng nhiều chiều giống nh− thủ tục đ−a mảng chiều hai chiều Ngồi MATLAB cịn cung cấp số hàm thao tác trực tiếp mảng nhiều chiu:
Các hàm với mảng nhiều chiều Các hàm với mảng nhiều chiều Các hàm với mảng nhiều chiều Các hàm với mảng nhiều chiều
s = size(A) Cho n_sè chiỊu cđa A, tr¶ vỊ vector hàng s với n phần tử, phần tử thứ i kích cỡ chiều thứ i mảng A
ndims(A) Số chiều A, tơng tự nh hàm length(size(A)) permute(A, order) n_số chiều, tơng đơng với toán tử chuyển vị chấm ipermute(A, order) Ngợc với hµm permute(A, order)
shiftdim(A, n) Thay đổi số chiều mảng A số nguyên n
squeeze(A) Trả lại số chiều mảng, tơng đơng với trả lại số chiều lớn ba
Ví dụ: Sự suy giảm phân rà dùng mảng Ví dụ: Sự suy giảm phân rà dùng mảng Ví dụ: Sự suy giảm phân rà dùng mảng Ví dụ: Sự suy giảm phân rà dùng mảng
Vấn đề: Vấn đề: Vấn đề:
Vấn đề: Phân tử polonium có chu kỳ phân rã 140 ngày, có nghĩa phân rã mà khối l−ợng poloniun lại 1/ so với khôi l−ợng ban đầu sau 140 ngày Giả sử ban đầu ta có 10 grams polonium, lại sau tuần vòng mi tun?
Giải pháp: Giải pháp: Giải pháp:
Giải pháp: Ta sử dụng phơng pháp giải chơng 2, khối lợng lại sau sau khoảng thời gian là:
khối lợng lại = khối lợng ban đầu (0.5)thời gian/ chu kú
(46)>> initial_amount = 10; % Khối lợng chất polonium ban đầu >> half_life = 140; % Chu kú ph©n r·
>> time = 7:7:70 % Kết thúc tuần time=
14 21 28 35 42 49 56 63 70
>> amount_left = initial_amount*0.5.^(time/ half_life) amount_left=
Columns through
9.6594 9.3303 9.0125 8.7055 8.4090 8.1225 7.8458 Columns through 10
7.5786 7.3204 7.0711
Dùng toán tử mảng làm cho tính giá trị cách đơn giản nhân nhiều giá trị biến Chú ý nhân chấm (.^) đ−ợc sử dụng muốn luỹ thừa 0.5 lên phần tử mảng Những liệu dễ dàng vẽ chúng MATLAB nh− hình d−ới:
>> plot(time/7,amount_left)
>> xlabel(‘Week number‘), ylabel(‘Amount of Polonium left‘)
Hình 6.1
Ví dụ: Tìm kiếm giải pháp sử dụng vectors Ví dụ: Tìm kiếm giải pháp sử dụng vectors Ví dụ: Tìm kiếm giải pháp sử dụng vectors Ví dụ: Tìm kiếm giải pháp sử dụng vectors
Vấn đề: Vấn đề: Vấn :
(47)Giải pháp: Giải pháp: Giải pháp:
Gii phỏp: Khụng cú mt gii pháp phân tích cho vấn đề cả, phải giải ph−ơng pháp tìm kiếm Nếu bạn bắt đầu với tất số bội số nhỏ 1000, số khác khơng xét đến, bạn xây dựng đ−ợc giải pháp Trong MATLAB giải pháp đ−ợc đa script file là:
function pow
% pow.m script file to solve problem of the week n=7:7:1000 % all multiples of less than 1000
number=length(n) % number of potential solutions n(rem(n,2)~=1)=[]; % throw out non solutions by number=length(n)
n(rem(n,3)~=1)=[]; %setting them equal to an empty array, number=length(n)
n(rem(n,4)~=1)=[]; % the function rem computes remainders number=length(n)
n(rem(n,5)~=1)=[]; number=length(n) n(rem(n,6)~=1)=[];
Ch¹y script file ta đợc giải pháp nh dới đây: >> pow
number = 142 number = 71 number = 24 number = 12 number = n=
301 721
Ví dụ: Tính tốn nồng độ acid dùng phép tốn với mảng Ví dụ: Tính tốn nồng độ acid dùng phép tốn với mảng Ví dụ: Tính toán nồng độ acid dùng phép toán với mảng Ví dụ: Tính tốn nồng độ acid dùng phép toán với mảng
Vấn đề: Vấn đề: Vấn đề:
Vấn đề: Nh− phần trình sản xuất phận vật đúc nhà máy tự động, phận đ−ợc nhúng n−ớc để làm nguội, sau nhúng bồn đựng dung dịch acid để làm Trong tồn q trình nồng độ acid giảm phận đ-−ợc lấy khổi bồn acid nhúng phận vật đúc vào bồn l−ợng n−ớc cịn bám vật đúc nhúng bể tr−ớc vào theo nhấc khỏi bồn l−ợng acid bám theo vật Để đảm bảo chất l−ợng nồng độ acid phải không đ−ợc nhỏ l−ợng tối thiểu Bạn bắt đầu với nồng độ dung dịch 90% nồng độ tối thiêu phải 50% L−ợng chất lỏng thêm vào lấy sau lần nhúng dao động khoảng từ 1% đến 10% Hỏi phận nhúng vào bể n−ớc acid tr−ớc nồng độ giảm xuống d−ới múc cho phộp?
Giải pháp: Giải pháp: Giải pháp:
(48)n =
Trong MATLAB, giải pháp viết script M_file là: function example6_2
% script M_file example6_2 initial_con=90;
min_con=50;
lost=1:10 % consider 1% to 10% in increments of 1% n=floor(log(initial_con/min_con)./log(1+lost/100)) stem(lost,n)
xlabel('Percent Lost with Each Dip') ylabel('Number of Dips')
title('Acid-Water Bath Dipping Example')
Chạy chơng trình ta đợc kết nh sau: lost =
10 n =
59 29 19 14 12 10
H×nh 6.2 H×nh 6.2 H×nh 6.2 H×nh 6.2
(49)-oOo -
ch−¬ng
các phép tính với mảng
7.1 T¹o ph− 7.1 T¹o ph− 7.1 T¹o ph−
7.1 Tạo phơng trình tuyến tính.ơng trình tuyến tính.ơng trình tuyến tính.ơng trình tuyến tính
V bản, MATLAB đ−ợc viết ma trận thực phép tốn số học tuyến tính đơn giản mà xuất nhiều ứng dụng Một vấn đề chung số học tuyến tính việc giải ph−ơng trình Ví dụ tạo ph−ơng trình:
=
A.x = b
Biểu t−ợng phép nhân toán học (.) đ−ợc định nghĩa phép tốn trên, khác với kí hiệu ta dùng mảng tr−ớc Trong MATLAB phép nhân ma trận đ−ợc định nghĩa dấu (*) Tiếp theo định nghĩa dấu bằng, ma trận tạo từ ma trận A vector x với vector b Giải pháp tồn cho cân đề cập vấn đề số học tuyến tính Thêm nữa, lời giải khơng tồn tại, có nhiều cách gần để tìm kiếm giải pháp, nh− phép loại trừ Gaussian, tìm thừa số LU, tính trực tiếp A-1 b D−ới đề cập đến số cách giải nh− trên:
Tr−íc tiªn nhËp vµo ma trËn A vµ b: >> A = [1 3; 6; 0] A=
>> b = [366; 804; 315] b=
366 804 351
Nếu bạn có kiến thức số học tuyến tính, dễ để bạn kiểm tra xem định thức ma trận có khác khơng hay khơng:
(50)Nếu đúng, MATLAB giải ph−ơng trình theo hai cách, cách hay đ−ợc dùng hơn, cách sử dụng, nh−ng trực tiếp hơn, ph−ơng pháp chuyển thành dạng x=A -1.b
>> x = inv(A)*b x=
25.0000 22.0000 99.0000
ở inv(A) inv(A) inv(A) inv(A) hàm MAYLAB dùng để tính A-1; tốn tử nhân ( * ), khơng có dấu
chÊm phía trớc, phép nhân ma trận Phơng pháp đợc dùng nhiều dùng toán tử chia ma trËn tr¸i:
>> x = A\b x=
25.0000 22.0000 99.0000
Ph−ơng trình sử dụng ph−ơng pháp tìm thừa số LU gần đa câu trả lời nh− phép chia trái A cho b Toán tử chia trái ( \ ) khơng có dấu chấm phía tr−ớc phép tốn ma trận, khơng phải phép toán phần tử mảng Ph−ơng pháp thứ hai đ−ợc sử dụng nhiều nhiều nguyên nhân, nguyên đơn giản ph−ơng pháp dùng phép tốn tốc độ nhanh Thêm vào đó, nhìn chung ph−ơng pháp xác cho tốn lớn Trong tr−ờng hợp khác, MATLAB khơng tìm thấy ph−ơng pháp giải khơng tìm thấy ph−ơng pháp chinh xác, thơng báo lỗi
Nếu bạn nghiên cứu số học tuyến tính, bạn biết số ph−ơng trình số biến khác nhau, khơng thể có ph−ơng pháp để giải Trong MATLAB gặp hệ ph−ơng trình có số ph−ơng trình lớn số biến dùng tốn tử chia trái chia phải, tự động giảm thấp phần tử thừa A.x - b Cách gọi ph−ơng pháp vng nhỏ Ví dụ:
>> A = [1 3; 6; 0; 8] % Bốn phơng trình, ba biÕn A=
>> b = [366 804 351 514]‘ b=
366 804 351 514
>> x = A\b % Phơng pháp vuông nhỏ x=
(51)>> res = A*x - b res=
-119.4545 11.9455 0.0000 35.8364
Mặt khác số ph−ơng trình số biến t−ơng tự nh− tr−ờng hợp khơng xác định, số nghiệm ph−ơng trình vơ tận Đối với nghiệm MATLAB tính theo hai cách Dùng toán tử chia đa ph−ơng pháp mà có số phần tử x cực đại Nh− lựa chọn, tính x=pinv(A)*b đa ph−ơng pháp chiều dài tiêu chuẩn x nhỏ ph-−ơng pháp khác Phph-−ơng pháp gọi phph-−ơng pháp tiêu chuẩn cực tiểu
VÝ dô:
>> A = A % Tạo ba phơng tr×nh, biÕn A=
>> b = b(1:3)
b= 366 804 351
>> x = A\b % ph−ơng pháp với số phần tử cực đại x=
-165.9000 99.0000 168.3000
>> xn = pinv(A)*b % Tìm kiếm giải pháp tiªu chuÈn nhá nhÊt xn=
30.8182 -168.9818 99.0000 159.0545
>> norm(x) % Tiêu chuẩn O_clit với phần tử ans=
256.2200
>> norm(xn) % Giải pháp tiêu chuÈn nhá nhÊt ans=
254.1731
7.2 C¸c hàm ma trận 7.2 Các hàm ma trận 7.2 Các hàm ma trận 7.2 Các hàm ma trận
Để giải phơng trình tuyến tính, MATLAB cung cấp hàm trợ giúp sau: Các hàm ma trận
Các hàm ma trận Các hàm ma trận Các hàm ma trận
(52)cdf2rdf(A) Chun tõ d¹ng sè phøc chÐo sang d¹ng sè thùc chÐo
chol(A) T×m thõa sè Cholesky
cholinc(A, droptol) Thừa số Cholesky không đầy đủ
cond(A) Số điều kiện ma trận
condest(A) Ước lợng số điều kiện ma trận theo tiêu
det(A) Định thức ma trËn
expm(A) Ma trËn theo luËt mò
expm1(A) Bỉ sung M_file cđa expm
expm2(A) Ma trËn theo lt hµm mị, dïng thø tù Taylor funm(A, fun) Tính toán hàm ma trận chung
hess(A) MÉu Hessenberg
inv(A) Ma trËn chun vÞ
logm(A) Ma trËn logarithm
lu(A) Tìm thừa số với phép khử Gaussian luinc(A, droptol) Thừa số LU không y
norm(A) Ma trận vector tiêu chuÈn
norm(A,1) Tiªu chuÈn
norm(A, 2) Tiªu chuÈn
norm(A, inf) V« cïng
norm(A, p) Tiêu chuẩn P (chỉ vector) norm(A, ‘fro‘) Tiêu chun F
normest(A) Tiêu chuẩn ớc lợng cho ma trận lớn
null(A) Khoảng rỗng
orth(A) Tính trùc giao
poly(A) Đa thức đặc tr−ng
polyvalm(A) Tính giá trị ma trận
qr(A) Xỏc nh trực giao tam giác
qrdelet(Q, R, j) Xoá cột từ thừa số QR qrinsert(Q, R, j, x) Chèn cột thừa số QR rank(A) Số hàng cột độc lập rcond(A) Ước l−ợng điều kiện thuận nghịch sqrtm(A) Ma trận gốc bình ph−ơng
subspace(A, B) Gãc gi÷a hai ®iĨm
svd(A) Phân tích giá trị đơn
svds(A, K) Một số giá trị đơn
trace(A) Tổng phần tử chéo
7.3 Ma trận đặc biệt 7.3 Ma trận đặc biệt 7.3 Ma trận đặc biệt 7.3 Ma trận đặc biệt
MATLAB đa số ma trận đặc biệt, số chúng có ứng dụng rộng rãi phép tốn Nhìn chung ma trận là:
>> a = [1 3; 6]; >> b = find(a>10) b=
(53)b ma trận rỗng MATLAB trả lại ma trận rỗng phép toán kết Trong ví dụ phần tử a lớn 10 Ma trận rỗng kích cỡ, nhng tên biến chúng tồn không gian làm việc
>> zeros(3) % Ma trận không hàng, cét (3x3) ans=
>> ones(2,4) % Ma trËn mét hµng, cét (2x4) ans=
>> zeros(3) + pi ans=
3.1416 3.1416 3.1416 3.1416 3.1416 3.1416
3.1416 3.1416 3.1416
Ví dụ tạo ma trận 3x3 với phần tử >> rand(3,1)
ans= 0.2190 0.0470 0.6789
ma trận 3x1 gồm phần tử số cung cấp hàm random vµ >> randn(2)
ans=
1.1650 0.0751 0.6268 0.3516
ma trËn 2x2 số cung cấp hàm random với giá trị trung bình Thuật toán cho hàm randrandrandrand randnrandnrandnrandn tìm thấy S.K>Park and K.W.Miller,Random Number Generator: Good Ones Are Hard to Find,‘ Comm ACM, 32, 10, Oct 1988-1201
>> eye(3) ans=
Ma trận đồng 3x3 >> eye(3,2)
ans=
(54)Ngồi để kích cỡ ma trận, bạn dùng hàm sizesizesizesize để tạo ma trận có kích cỡ giống nh− ma trận khác:
>> A = [1 3; 6]; >> ones(size(A)) ans=
ma trËn mét cã cïng kÝch cì víi ma trËn A
Các ma trận ma trận đặc biệt khác đ−ợc giới thiệu bảng sau: Các ma trận đặc biệt
Các ma trận đặc biệt Các ma trận đặc biệt Các ma trận đặc biệt
[ ] Ma trận rỗng compan Tạo ma trận rỗng eye Ma trận đồng
gallery Ma trËn kiĨm tra nhá vµi phÇn tư hadamard Ma trËn Hadamard
hankel Ma trËn Hankel hilb Ma trËn Hilbert
invhilb Chun thµnh ma trËn Hilbert
magic Ma trận vuông, giá trị phần tử từ đến giá trị số phần tử
ones Ma trËn
pascal Ma trËn tam gi¸c Pascal
rand Ma trận với phần tử ngẫu nhiên từ đến
randn Ma trËn ngẫu nhiên thông thờng với giá trị trung bình
rosser Ma trận kiểm tra đối xứng trục toeplitz Ma trận Toeplitz
vander Ma trËn Vandermond wilkinson Ma trËn kiÓm tra Wilkinson zeros Ma trËn kh«ng
VÝ dơ VÝ dơ VÝ dô VÝ dô
Vấn đề Vấn đề Vấn đề
Vấn đề: Ta có mạch điện nh− hình 7.1 đ−ợc mơ tả ph−ơng trình điện áp nút nguồn đa vào sóng hình sin
(55)
E = 10 ; R1 = 2; L = 10j; C = ; R2 = 10
ở vi điện áp nút thứ i đất Hỏi điện áp nút l bao nhiờu?
Giải pháp: Giải pháp: Giải pháp:
Gii phỏp: õy vấn đề phân tích pha Ph−ơng pháp giải giải phơ−ng trình trên, chuyển kết dạng thời gian Trong MATLAB giải pháp là:
function circuit
% circuit.m script file to solve circuit proplem A(1,1)=1/2; % poke in nonzero values as needed A(1,2)=-1/2;
A(2,1)=-1/2;
A(2,2)=1/2 + 0.2j + 1/10j; A(2,3)= -1/10j;
A(3,2)=-1/10j; A(3,3)=1/10 + 1/10j;
y=[-1 0]'; % right hand side vector v=A\y % complex solution
vmag=abs(v) % solution magnitudes
vphase=angle(v)*180/pi % solution phase in degrees theta=linspace(0,2*pi); % plot results in time
v1=vmag(1)*cos(theta-vphase(1)); v2=vmag(2)*cos(theta-vphase(2)); v3=vmag(3)*cos(theta-vphase(3)); thd=theta*180/pi;
plot(thd,v1,thd,v2,thd,v3)
Sau chạy chơng trình trên, kết là: v =
-4.0000 + 6.0000i -2.0000 + 6.0000i 2.0000 + 4.0000i vmag =
(56)
H×nh 7.2
H×nh 7.2 H×nh 7.2 H×nh 7.2
-oOo -
chơng
các phép tính LOGIC Vµ QUAN HƯ
Thêm vào tốn tử ‘truyền thống‘, MATLAB cung cấp toán tử logic quan hệ Bạn quen thuộc với phép tốn này, bạn làm quen với ngơn ngữ lập trình khác Mục đích tốn tử hàm để trả lời câu hỏi True_False (đúng_sai)
Đối với số tốn tử logic quan hệ quy định số khác khơng True cịn số khơng False Kết phép toán logic quan hệ đa cho True, cho False 8.1 Toán tử quan hệ
8.1 To¸n tư quan hƯ 8.1 To¸n tư quan hƯ 8.1 To¸n tư quan hƯ
(57)To¸n tư quan hƯ To¸n tư quan hƯ To¸n tư quan hƯ
To¸n tư quan hƯ ý nghÜ nghÜ nghÜ nghÜa < nhá h¬n
<= nhỏ > lín h¬n
>= lín ==
~= kh«ng b»ng
Tốn tử quan hệ MATLAB dùng để so sánh hai mảng có kích cỡ so sánh mảng với số đơn Trong tr−ờng hợp thứ hai, số đơn so sánh với tất phần tử mảng, kết trả giống nh− kích cỡ mảng Ví dụ:
>> A = 1:9, B = - A A=
B=
>> tf = A>4
tf=
0
tìm kiếm phần tử A mà lớn Kết A 4, b»ng A>4 >> tf = (A==B)
tf=
0 0 0 0
Tìm kiếm phần tử A mà với B Chú ý khác = == dùng để so sánh hai biến trả chúng nhau, chúng khác nhau; = dùng để gán kết đa toán tử cho biến
>> tf = B - (A>2) tf=
-1
Tìm phần tử A>2 bị trừ vector B Ví dụ kết đa toán tử logic mảng số bao gồm số không một, chóng cịng cã thĨ dïng c¸c phÐp to¸n sè häc
>> B = B + (B==0)*eps B=
Columns through
8.0000 7.0000 6.0000 5.0000 4.0000 3.0000 2.0000 Columns through
1.0000 0.0000
Ví dụ đa cách thay phần tử B mà trùng với không số đặc biệt MATLAB eps, có giá trị xấp xỉ 2.2e-16 Cách thay đơi có ích tránh tr−ờng hợp chia cho số khơng nh− ví dụ sau:
>> x = (-3:3)/3
(58)Warning: Divide by zero ans=
0.8415 0.9276 0.9816 NaN 0.9816 0.9276 0.8415
Tính tốn hàm sin(x)/ x đa cảnh báo phần tử thứ t− khơng, sin(0)/ không đ−ợc định nghĩa, MATLAB trả lại NaN ( nghĩa khơng phải số) vị trí kết Thử lại ví dụ trên, sau thay phần tử có giá trị khơng số eps:
>> x = x + (x==0)*eps; >> sin(x)/x
ans=
0.8415 0.9276 0.9816 1.0000 0.9816 0.9276 0.8415
Bây sin(x)/ x x = đa kết giới hạn xác 8.2 To¸n tư Logic
8.2 To¸n tư Logic 8.2 To¸n tư Logic 8.2 To¸n tư Logic
Toán tử logic cung cấp cách diễn đạt mối quan hệ phủ định hay tổ hợp Toán tử logic MATLAB bao gồm:
To¸n tư logic To¸n tư logic To¸n tư logic
To¸n tư logic ý nghÜa ý nghÜa ý nghÜa ý nghÜa & AND | OR ~ NOT Mét vµi vÝ dơ vỊ dïng to¸n tư logic:
>> A = 1:9; B = - A; >> tf = A>4
tf=
0 0 1 1
Tìm kiếm phần tử A mà lớn >> tf = ~(A>4)
phủ định kết quả, t−ơng đ−ơng với vị trí khơng thay ng−ợc lại >> tf = (A>2)&(A<6)
tf=
0
Trả lại vị trí mà phần tử A lớn nhỏ 8.3 Các hàm logic hàm quan hệ
8.3 Các hàm logic hàm quan hệ 8.3 Các hàm logic hàm quan hệ 8.3 Các hàm logic hµm quan hƯ
Thêm vào toán tử logic toán tử quan hệ đề cập đến trên, MATLAB cung cấp hàm logic quan h khỏc di õy:
Các hàm logic hàm quan hệ khác Các hàm logic hàm quan hệ khác Các hàm logic hàm quan hệ khác Các hàm logic hàm quan hệ khác
(59)khi x
và không (False) khác không (True)
any(x) Trả lại phần tử vector x khác không Trả lại cho cột
trong ma trận x mà có phần tử khác không
all(x) Trả lại tất phần tử vector x khác không Trả lại cho cột
trong ma trận x mà tất phần tử khác không
MATLAB cung cấp nhiều hàm kiểm tra cho tồn giá trị đặc biệt điều kiện trả lại kt qu l giỏ tr logic
Các hàm kiểm tra Các hàm kiểm tra Các hàm kiểm tra Các hµm kiĨm tra
isa(X, ‘name‘) True X có lớp đối t−ợng ‘name‘ iscell(X) True đối số mảng phần tử
iscellstr(X) True đối số mảng phần tử xâu ischar(S) True đối số xâu kí tự
isempty(X) True đối số rỗng isequal(A, B) True A B giống
isfield(S, ‘name‘) True nÕu ‘name‘lµ mét tr−êng cđa cÊu tróc S isfinite(X) True c¸c phần tử có hạn
isglobal(X) True i s biến toàn cục
ishandle(h) True đối số điều khiển đối t−ợng hợp lý ishold True đồ thị giữ trạng thái ON
isiee True nÕu m¸y tÝnh thùc hiƯn phÐp số học IEEE isinf(X) True phần tử v« cïng
isletter(S) True phần tử thuộc bảng chữ islogical(X) True đối số mảng logic
ismember(A, B) True vị trí mà phần tử A B trùng isnan(X) True phần tử không xác định (NaN)
isnumeric(X) True đối số mảng số
isppc True cho Macintosh với xử lý PowerPC isprime(X) True phần tử số nguyên tố isreal(X) True đối số khơng có phần ảo isspace(S) True phần tử kí tự trắng issparse(A) True đối số ma trận Sparse isstruct(S) True đối số cấu trúc
isstudent True nÕu Student Edition MATLAB isunix True máy tính UNIX
isvms True máy tính VMS
-oOo -
ch−¬ng
(60)Sự tiện ích MATLAB xử lý với số Tuy nhiên nhiều lần đề cập đến thao tác với văn (text), nh− đa nhãn tiêu đề vào đồ thị Trong MATLAB biến text đ−ợc dùng đến nh− xâu kí tự, đơn giản xâu
9.1 X©u kÝ tù 9.1 X©u kÝ tù 9.1 X©u kÝ tù 9.1 X©u kÝ tù
X©u kÝ tù MATLAB mảng giá trị ASCII mà quy ớc kí tự
Ví dụ:
>> t = 'How about this character string?' t=
How about this character string? >> size(t)
ans= 32 >> whos
Name Size Bytes Class t 1x32 64 char array Grand total is 32 elements using 64 bytes
Một xâu kí tự, đơn giản dạng văn bản, đ−ợc đặt hai dấu nháy đơn Mỗi kí tự xâu phần tử mảng, với phần tử chiếm hai bytes
Muốn xem mã ASCII xâu kí tự, bạn phải dùng phép tốn số học xâu, chuyển sang dạng số, dùng hàm doubldoubldoubldoubleeee Ví dụ:
>> double(t) ans=
Columns through 12
72 111 119 32 97 98 111 117 116 32 116 104 Columns 12 through 24
105 115 32 99 104 97 114 97 99 116 101 114 Columns 25 through 32
32 115 116 114 105 110 103 63 >> abs(t)
ans=
Columns through 12
72 111 119 32 97 98 111 117 116 32 116 104 Columns 13 through 24
105 115 32 99 104 97 114 97 99 116 101 114 Columns 25 through 32
32 115 116 114 105 110 103 63 Hàm charcharcharchar chuyển lại thành xâu:
>> char(t) ans=
(61)Với mảng xâu mảng số với thuộc tính đặc biệt, thao tác tất cơng cụ thao tác với mảng sẵn có MATLAB Ví dụ:
>> u = t(16:24) u=
character
Địa xâu giống nh− mảng phần tử từ 16 đến 24 chứa từ character >> u = t(24:-1:16)
retcarahc
Đây từ ‘character‘ đọc ng−ợc lại >> u = t(16:24)‘
u= c h a r a c t e r
Dùng toán tử chuyển vị để chuyển từ ‘character‘ sang dạng ma trận cột >> v = 'I cant't find the manual!'
v=
I can't find the manual!
Dấu nháy đơn với xâu kí tự biểu t−ợng hai dấu nháy đơn Chúng ta nối hai xâu nh− hai mảng:
>> w = [u,v] w=
character I can‘ t find the manual!
Hàm dispdispdispdisp cho phép bạn hiển thị xâu kí tự mà tên biến >> disp(v)
I can't find the manual
Chó ý trạng thái v= bị bỏ đi, điều có ích cho hiển thị lời trợ gióp script file
(62)>> v = ['However, this' 'does work! '] v=
However, this does work!
>> w = ['this'; ' does not']
??? All rows in the bracketed expression must have the same number of columns
>> size(v) ans=
13
Ta dùng hàm charcharcharchar để tạo mảng xâu từ xâu, tự thêm kí tự trống để tạo mảng đầy đủ
>> w = char('this', 'does not') w=
this does not >> size(w) ans=
9.2 Chuyển đổi xâu 9.2 Chuyển đổi xâu 9.2 Chuyển đổi xâu 9.2 Chuyển đổi xâu
Để bổ xung thêm chuyển đổi xâu mã ASCII nh− trình bày trên, MATLAB đa số hàm chuyển đổi hữu ích khác, chúng bao gồm d−ới đây: Các hàm chuyển đổi xâu
Các hàm chuyển đổi xâu Các hàm chuyển đổi xâu Các hàm chuyển đổi xâu
base2dec Dựa xâu x chuyển sang hệ mời bin2dec Từ xâu nhị phân sang hệ mêi
char Tõ x©u sang ASCII
dec2base Tõ hƯ mêi sang x©u x dec2bin Từ số hệ mời sang xâu nhị phân
dec2hex Từ số hệ mời sang xâu số hƯ mêi s¸u double Chun tõ m· ASCII sang xâu
fprintf Viết dạng văn file hình
hex2dec Chuyn t xõu gồm số hệ 16 sang số hệ mời hex2num Chuyển từ xâu số hệ 16 sang số dấu phẩy động
IEEE
int2str ChuyÓn từ số nguyên sang xâu
mat2str Chuyển từ ma trận số sang xâu gồm số num2str Chun tõ sè sang x©u
sprintf Chun tõ m· ASCII sang x©u
sscanf Chun tõ sè sang xâu có điều chỉnh kích thớc
(63)
Trong tr−ờng hợp tạo thơng báo có chứa số khơng phải xâu, hàm chuyển đổi giúp làm việc
>> rad = 2.5; area = pi*rad^2;
>> t = ['A circle of radius ' num2str(rad) 'has an area of ' num2str(area) '.']; >> disp(t)
A circle of radius 2.5 has an area of 19.63
ở hàm num2strnum2strnum2strnum2str đ−ợc dùng để chuyển từ số sang xâu Giống nh− int2str int2str int2str int2str chuyển từ số nguyên sang xâu, hai hàm gọi hàm sprintfsprintfsprintfsprintf, giống nh− cú pháp C dùng để chuyển số sang xâu
9.3 Các hàm xâu 9.3 Các hàm xâu 9.3 Các hàm xâu 9.3 Các hàm xâu
MATLAB đa số hàm xâu, bao gồm hàm danh sách dới đây: Các hàm xâu
blanks(n) Trả lại xâu gåm c¸c kÝ tù trèng hay dÊu c¸ch
deblank(s) Trả lại vệt trống từ xâu
eval(xâu) Ước lợng xâu nh lệnh MATLAB eval(try, catch) Ước lợng xâu bắt lỗi
feval(f, x, y, ) Hàm evaluate đa xâu
findstr(s1, s2) Tìm kiếm xâu xâu khác ischar(s) True đa vào xâu
isletter(s) True vị trÝ kÝ tù Alphabet tån t¹i isspace(s) True t¹i vị trí kí tự trống
lasterr Xâu lỗi cuối MATLAB đa lower(s) Xâu với chữ thờng
strcat(s1, s2, ) Nối xâu thành hàng
strcmp(s1, s2) True xâu giống strmatch(s1, s2) Tìm kiếm khả giống xâu
strncmp(s1, s2, n) True n kí tự đầu giống strrep(s1, s2) Thay thÕ mét x©u b»ng mét xâu khác strtok(s) Tìm kiếm dấu hiệu cho xâu
strvcat(s1, s2, ) Nối xâu thành cột upper(s) Chuyển thành chữ in
Một số hàm cung cấp khả xử lý xâu Ví dụ nh, findstr findstr findstr findstr trả lại số bắt đầu xâu xâu khác:
>> b = 'Peter Piper picked a peck of pickled peppers'; >> findstr(b, ' ') % Tìm kiếm khoảng trống 12 19 21 26 29 37
>> findstr(b, 'p')
(64)>> find(b=='p')
13 22 30 38 40 41 >> findstr(b, 'cow') % T×m kiÕm tõ cow ans=
[ ]
>> findstr(b,'pick') ans=
13 30
Hàm trả lại ma trận rỗng phần cần tìm >> strrep(b,'Peter','Pamela')
ans=
Pamela Piper picked a peck of pickled peppers
Nh− trình bày trên, strrep đơn giản thay xâu strrep không làm việc với ma trận xâu, tr−ớc tiên bạn cần phải chuyển từ ma trận thành vector
9.4 Ma trËn tÕ b 9.4 Ma trËn tÕ b 9.4 Ma trËn tế b
9.4 Ma trận tế bào xâuào xâuào xâuào xâu
Ma trận tế bào kiểu liệu cho phép bạn gọi tên thao tác với nhóm liệu có nhiều kích cỡ nhiều kiểu
>> C = {'How';'about';'this for a';'cell array of strings?'} C=
'How' 'about' 'this for a'
'cell array of strings?' >> size(C)
Ma trận có hàng cột nh−ng cột lại có độ dài khác Tất phần tử đ−ợc đặt dấu ngoặc nhọn, phần tử đ−ợc đặt dấu nháy đơn, hai hàng dấu chấm phẩy Mảng tế bào đ−ợc đánh địa giống nh− mảng thông th−-ờng:
>> C(2:) ans= 'about' 'this for a' >> C([4 1]) ans=
'cell array of strings?' 'this for a'
(65)How
Đây mảng tế bào Để thay đổi dấu nháy tế bào, ta sử dụng ngoặc nhọn: >> s = c{4}
ans=
cell array of strings? >> size(s)
ans=
22
Để truy nhập vào nhiều tế bào, ta dùng hàm dealdealdealdeal: >> [a, b, c, d] = deal(C{:})
a= How b= about c= this for a d=
cell array of trings?
ở C{:} để truy nhập đến tất tế bào, giống nh−: >> [a, b, c, d] = deal(C{1}, C{2}, C{3}, C{4})
a= How b= about c= this for a d=
cell array of strings?
Hàm charcharcharchar dùng để chuyển từ mảng tế bào sang mảng xâu: >> s = char(C)
How about this for a
cell array of strings?
>> size(s) % KÕt qu¶ xâu với khoảng trống ans=
22
>> ss = char(C(1:2)) ss=
(66)ans=
Để chuyển ngợc lại mảng tế bào, ta dùng hàm cellstrcellstrcellstrcellstr: >> cellstr(s)
ans= 'How' 'about' 'this for a'
'cell array of strings?'
Hầu hết hàm xâu MATLAB làm việc với mảng xâu mảng tế bào Về mảng tế bào đợc trình bày rõ Chơng 19
chơng 10
thêi gian
MATLAB đ−a số hàm thao tác thời gian từ bạn tính tốn với ngày, giờ, in lịch tìm kiến ngày cụ thể MATLAB chứa ngày thời gian nh− số có độ xác hai số sau dấu phẩy t−ợng tr−ng cho số ngày, bắt đầu năm khơng Ví dụ, mồng tháng năm 1997 lúc nửa đêm, đ−ợc t−ợng tr−ng số 729391, ngày nh−ng lúc buổi ch−a 729391.5 Cấu trúc dễ dàng cho máy tính xử lí, nh-−ng khó diễn giải Do MATLAB cung cấp hàm trợ giúp chuyển đổi số xâu kí tự để thao tác với ngày thời gian
10.1 Ngµy 10.1 Ngày 10.1 Ngày 10.1 Ngày
Hàm clockclockclockclock trả ngày chứa mảng Ví dô: >> T = clock
T=
1997 21 16 33 39.934708
Hàm nownownownow trả ngày thời gian nh− số ngày quy −ớc máy đơn giản số ngày
>> t = now t=
729411.690045541
C¶ hai kÕt kÕt qu¶ có thông tin
Hàm date date date date trả lại ngày nh mét x©u theo mÉu: dd-mmm-yyyy >> date
ans =
21-Jan-1997
(67)B¹n chuyển số ngày xâu, sử dụng hàm datestrdatestrdatestrdatestr Cấu trúc hàm có dạng nh sau:
datestr(date_number,format_spec) Sau trợ giúp cđa helphelphelphelp cho hµm datestrdatestrdatestrdatestr: >> help datestr
DATESTR string representation of date
DATESTR(D,DATEFORM) converts a serial data number D (as returned by DATENUM) into a date string The string is formatted according to
the format number or string DATEFORM (see table below) By default,
DATEFORM is 1, 16, or depending on whether D contains
dates, times or both
DATEFORM number DATEFORM string Example 'dd-mmm-yyyy HH:MM:SS' 01-Mar-1995 15:45:17
'dd-mmm-yyyy' 01-Mar-1995 'mm/dd/yy' 03/01/95 'mmm' Mar 'm' M 'mm' 'mm/dd' 03/01 'dd' 'ddd' Wed 'd' W 10 'yyyy' 1995 11 'yy' 95 12 'mmmyy' Mar95 13 'HH:MM:SS' 15:45:17 14 'HH:MM:SS PM' 3:45:17 PM 'HH:MM' 15:45
16 'HH:MM PM' 3:45 PM 17 'QQ-YY' Q1-96 18 'QQ' Q1
vÝ dơ víi hµm datestrdatestrdatestrdatestr: >> datestr(t)
ans=
21-Jan-1997 16: 33: 40 >> datestr(t,14)
ans=
(68)Hàm datenumdatenumdatenumdatenum hàm ng−ợc datestrdatestrdatestrdatestr Hàm chuyển xâu kí tự dạng ngày dùng mẫu datenum(datenum(datenum(datenum(str)str)str)str), số độc lập vector sang số dạng ngày, dùng mẫu:
datenum(year, month, day) hc
datenum(year, month, day, hour, minute, second) >> datenum('21-Jan-1997 16: 33: 40')
ans=
729411.690045541 >> datenum(1997, 01, 21) ans=
729411
>> datenum(1997, 01, 21, 16, 33, 40) ans=
729411.690045541
Hàm datevec datevec datevec datevec chuyển xâu kí tự dạng ngày (dùng datestrdatestrdatestrdatestr dạng 0, 1, 2, 6, 13, 14, 15, 16) số dạng ngày sang vector
>> c = datevec('12/ 24/ 1984') c=
1984 12 24
>> [yr, mo, day, hr, nim, sec] = datevec('24-Dec-1984 08: 22') yr=
1984 mo= 12 day= 24 hr= min= 22 sec=
10.3 Các hàm ngày 10.3 Các hàm ngày 10.3 Các hàm ngày 10.3 Các hàm ngày
Ngày tuần tìm từ xâu dạng ngày số dạng ngày, dùng hàm weekdayweekdayweekdayweekday, MATLAB sử dơng quy −íc Sunday = vµ Saturday =
>> [d w] = weekday(728647) d=
(69)>> [d w] = weekday('21-Dec-1994') d=
w= Wed
Ngày cuối tháng tìm hàm eomday eomday eomday eomday Trong bắt buộc phải đ−a vào năm, tháng >> eomday(1996, 2) % 1996 năm
ans= 29
MATLAB tạo lịch cho tháng bạn yêu cầu, hiển thị cửa sổ lệnh đặt chúng ma trận 6x7
>> calendar('7/ 17/ 95') Jul 1995
S M Tu W Th F S 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >> S = calendar(1994, 12)
S =
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 10.4 Các hàm thời gian 10.4 Các hàm thời gian 10.4 Các hàm thời gian 10.4 Các hàm thời gian
Lệnh tic tic tic tic toctoctoctoc đ−ợc dùng thời gian tính tốn: >> tic; plot(rand(5)); toc
(70)H×nh 10.1
>> tic; plot(rand(5)); toc elapsed_time =
(71)H×nh 10.2
Chú ý khác hàm thời gian elapsed_time lệnh plotplotplotplot, lệnh plotplotplotplot thứ hai nhanh MATLAB tạo hình dáng cửa sổ dịch hàm cần thiết vào ô nhớ Hàm cputime cputime cputime cputime trả tổng số thời gian CPU (Central Processing Unit), tính theo giây, thời gian MATLAB dùng từ đợc khởi động lên
Hàm etimeetimeetimeetime tính khoảng thời gian hai vector thời gian Các vector phải vector hàng gồm phần tử, giống nh kết trả lệnh clock clock clock clock datevecdatevecdatevecdatevec Tại thời gian etimeetimeetimeetime không chuyển tháng năm
Tất hàm sử dụng để tính tốn thời gian >> t0 = cputime; pause(5); cputime - t0
ans =
>> t1 = clock; pause(2); etime(clock,t1) ans =
2.0400
Bạn xem help MATLAB CD để tìm hiểu thêm hàm 10.5 Vẽ đồ thị với hàm ngày thời gian
10.5 Vẽ đồ thị với hàm ngày thời gian 10.5 Vẽ đồ thị với hàm ngày thời gian 10.5 Vẽ đồ thị với hàm ngày thời gian
Đơi có ích để vẽ đồ thị dùng xâu ngày thời gian cho một nhãn Hàm datetick datetick datetick datetick tự động với công việc Nếu đồ thị đ−ợc vẽ, dùng số ngày cho một trục, hàm datetickdatetickdatetickdatetick viết nhãn cho điểm đánh dấu Ví dụ sau vẽ hình 10.3:
(72)>> p = [75.995; 91.972; 105.771; 123.203; 131.669; 150.697; 179.323; 203.212; 226.505; 249.633]; >> plot(datenum(t,1,1),p)
>> datetick('x','yyyy') % use 4-digit year on the x-axis >> title('Population by year')
Chúng ta tạo biểu đồ cột công ty bán hàng bán từ tháng 11 năm 1994 đến tháng 12 năm 1995 (Hình 10.4):
>> y = [1994 1994 1995*ones(1,12)]'; >> m = [11 12 (1:12)]';
>> s=[1.1 1.3 1.2 1.4 16 1.5 1.7 1.6 1.8 1.3 1.9 1.7 1.6 1.95]'; >> bar(datenum(y,m,1),s)
>> datetick('x','mmmyy') >> ylabel('$ Million') >> title('Monthly Sales')
(73)
H×nh 10.4 H×nh 10.4 Hình 10.4 Hình 10.4 Ví dụ: Tìm thứ sáu ngày 13
Ví dụ: Tìm thứ sáu ngày 13 Ví dụ: Tìm thứ sáu ngày 13 Ví dụ: Tìm thứ sáu ngày 13
Bõy gi đ−ợc giới thiệu lệnh thời gian, dùng chúng để tạo số hàm có ích Nếu bạn ng−ời cẩn thận, bạn muốn biết thứ sáu ngày 13 xảy Hàm M_file cho bạn thông tin
function m=friday(start)
% FRIDAY Date of the next Friday the 13th
% FRIDAY display the next occurrence of Friday the % 13th
% FRIDAY(START) start the search at the date % specified by START
% M=FRIDAY return the date number of the next Friday % the 13th
if nargin==0
start=now; % use the current date if none end % was supplied
[yr,mo,da]=datevec(start);
da=da+6-weekday(start); % Start with the Friday in % this week
start=datenum(yr,mo,da,0,0,0); while
[yr,mo,da]=datevec(start);
(74)break; end
start=datenum(start+7); % skip to the next Friday end
if nargout==0
disp(['Friday,'datestr(start,1)]) % Display the % the result
else
m=start; % or return the resulting date end % number
Sau chạy chơng trình ta đợc kết quả: >> friday
Friday,13-Aug-1999
Nếu bạn muốn đợc cảnh báo cho toàn năm, xem hàm fridays: function F=fridays(ynum)
% FRIDAY List the Friday the 13ths in the year ynum % M=FRIDAY return the date numbers found
%
if nargin==0
[ynum dummy]=datevec(now); % use the current date if end % non was supplied
MM=[];
trynum=datenum(ynum,1,13,0,0,0); % check January 13 first trynum=friday(trynum); % find the first one [tyr dummy]=datevec(trynum);
while tyr==ynum % May be there are more this year MM=[MM;trynum];
trynum=friday(trynum+7); % skip to the next week [tyr dummy]=datevec(trynum);
end
if nargout==0
disp('Fridays'); % Display the results disp(datestr(MM,1)) % Display the result else
F=MM; % or return the vector of end % date number
(75)ch−¬ng 11
VòNG LặP ĐIềU KHIểN
Các ngơn ngữ lập trình máy tính có khả lập trình đề cập đến đặc điểm cho phép bạn điều khiển vòng lặp câu lệnh dựa cấu trúc Nếu bạn sử dụng đặc điểm phần đơn giản bạn Mặt khác vòng lặp điều khiển bạn rắc rối, nh vậy, bạn nghiên cứu từ từ
Vịng lặp điều khiển hữu ích có ứng dụng rộng rãi, làm cho phép tốn đ-−ợc thực cách thuận tiện nhanh MATLAB đa dạng vịng lặp có điều khiển là: vòng lặp forforforfor, vòng lặp whilewhilewhilewhile, cấu trúc ifififif elseelse endelseelse endendend cấu trúc switchswitchswitchswitch casecasecasecase Vì cấu trúc th−ờng hồn thiện lệnh MATLAB, nên chúng th−ờng xuất M_file, câu lệnh đánh trực tiếp dấu nhc ca MATLAB
11.1 Vòng lặp for 11.1 Vòng lặp for 11.1 Vòng lặp for 11.1 Vòng lặp for
Vòng lặp forforforfor cho phép nhóm lệnh thực lặp lại số lần cố định Cú pháp vòng lặp forforforfor nh sau:
for x = array
commands % Khèi c¸c lƯnh end
Các câu lệnh hai trạng thái forforforfor endendendend đ−ợc thực lần cho tất cột mảng (array) Tại lần lặp lại, x đợc gán cho phần tử cột nh− suốt n lần vòng lặp, x = array(:, n)
VÝ dô:
>> for n = 1:10
x(n) = sin(n*pi/10); end
>> x x =
Columns through
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns through 10
0.5878 0.3090 0.0000
Nói cách khác, trạng thái thứ yêu cầu: Cho n từ đến 10, tính giá trị tất trạng thái trạng thái trạng thái endendendend Đầu tiên vòng lặp forforforfor
n=1, n=2, nh tr−ờng hợp n=10 Sau tr−ờng hợp n=10, vòng lặp for kết thúc, tất lệnh sau trạng thái endendendend vòng lặp đ−ợc thực
(76)x(n) = sin(n*pi/10); n = 10;
end >> x x =
Columns through
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns through 10
0.5878 0.3090 0.0000
Trạng thái 1:10 trạng thái tạo lên mảng MATLAB tiêu chuẩn Bất kiểu mảng MATLAB đ−ợc chấp nhận vòng lặp fffforororor:
>> data = [3 45 6; 16 -1 5] data =
45 16 -1 >> for n = data x = n(1)-n(2) end
x = -4 x = -7 x = 46 x =
B×nh thờng vòng lặp for for for for lồng vµo nhau: >> for n = 1:5
for m = 5:-1:1
A(n,m) = n^2+m^2; end
disp(n) end >> A A =
(77)Không nên dùng vòng lặp for for for for mà t−ơng đ−ơng với việc ta dùng mảng để tính tốn Nh− ví dụ tr−ớc ta dùng mảng để tính tốn:
>> n = 1: 10; >> x = sin(n*pi/10) x =
Columns through
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns through 10
0.5878 0.3090 0.0000
Trong hai tr−ờng hợp nh− trên, tr−ờng hợp thứ hai ta dùng mảng để tính tốn đ−ợc kết nh− vậy, nh−ng nhanh tháo tác
Để tăng tốc độ tính tốn, mảng cần phải đ−ợc khởi tạo tr−ớc thực vòng lặp forforforfor
(hoặc vòng lặp whilewhilewhilewhile) Trong ví dụ tr−ớc lần lệnh vịng lặp forforforfor đ−ợc tính, kích cỡ biến x lại tăng lên Điều làm cho MATLAB thời gian để cập nhật thêm nhớ cho x vịng Để rút ngắn b−ớc này, ví dụ vòng lặp forforforfor tr−ớc viết lại nh− sau: >> x = zeros(1,10); % Khởi tạo nhớ cho x
>> for n = 1: 10 x = sin(n*pi/10); end
Bây cần thay đổi giá trị phần tử x 11.2 Vũng lp while
11.2 Vòng lặp while 11.2 Vòng lặp while 11.2 Vòng lặp while
Vòng lặp whilewhilewhilewhile thực lặp lại nhóm lệnh số lần cố định, nh−ng khơng biết trớc đ−ợc số lần lặp lại
Có ph¸p vòng lặp while while while while nh sau: while while while while biĨu thøc ®iỊu kiƯn khèi c¸c lƯnh
endendend end
‘khối lệnh ‘ hai trạng thái whilewhilewhilewhile endendendend đ−ợc thực lặp lặp lại tất ‘biểu thức điều kiện‘ Thông th−ờng giá trị điều kiện đ−a kết số, nh−ng kết đa mảng hợp lệ Trong tr−ờng hợp mảng, tất phần tử mảng kết đa phải True (đúng) Có thể tham khảo ví dụ d−ới đây: >> num = 0; ESP = 1;
>> while (1+ESP) > ESP = ESP/ 2; num = num + 1; end
>> num num= 53
>> ESP = 2*ESP ESP=
(78)Ví dụ đ−a cách tính giá trị đặc biệt eps MATLAB, số d−ơng nhỏ nhất, cộng với để đ−ợc số lớn dùng cho giới hạn độ xác dùng chữ hoa EPS để chắn giá trị eps MATLAB khơng ghi đè lên Trong ví dụ này, giá trị EPS bắt đầu 1, điều kiện (1+EPS)>1 True (để cho khác khơng), lệnh vịng lặp whilewhilewhilewhile đ−ợc tính, giá trị EPS tiếp tục đ−ợc chia đôi, giá trị EPS nhỏ đi, mà cộng EPS với số nhỏ mà lớn Do máy tính sử dụng số cố định có 16 chữ số nên giá trị nhỏ q làm trịn 0, điều kiện (EPS+1)> False (sai) vòng lặp while dừng lại Cuối EPS đ−ợc nhân với sau lần chia cuối cho vịng lặp dừng lại
11.3 CÊu tróc if 11.3 CÊu tróc if 11.3 CÊu tróc if
11.3 CÊu tróc if elseelseelseelse endendendend
Nhiều cần câu lệnh đ−ợc thực theo điều kiện Trong ngơn ngữ lập trình, logic đ−ợc cung cấp cấu trúc ifififif elseelseelseelse endendendend Cú pháp cấu trúc nh− sau:
if if if biĨu thøc ®iỊu kiƯn if
khèi c¸c lƯnh endendend end
Khối lệnh hai trạng thái ifififif end end end end đ−ợc thực tất biểu thức điều kiện Trong tr−ờng hợp điều kiện bao gồm điều kiện con, tất điều kiện đ−ợc tính trả trạng thái logic điều kiện Ví dụ:
>> apple = 10 % sè t¸o >> cost = apple*25
cost= 250
>> if apple >
cost = (1-20/100)*cost; % bá ®i 20% end
>> cost cost 200
Trong tr−ờng hợp có hai điều kiện thay đổi, cấu trúc ifififif elseelseelseelse endendendend là: if if if if biểu thức điều kiện
khối lệnh đ−ợc thực điều kiện elseelseelseelse
khèi c¸c lƯnh đợc thực điều kiện sai endendend end
Khi có ba nhiều điều kiện thay đổi, cấu trúc là: if
if if
if biĨu thøc ®iỊu kiƯn
khối lệnh đ−ợc thực điều kiện elseif
elseif elseif
elseif biĨu thøc ®iỊu kiƯn
khối lệnh đ−ợc thực điều kiện elseif
elseif elseif
(79)khối lệnh đ−ợc thực điều kiện elseif
elseif elseif
elseif biĨu thøc ®iỊu kiƯn
else else else else
khối lệnh đ−ợc thực khơng có điều kiện End
End End End
Trong mẫu dạng biểu thức điều kiện câu lệnh sau không đ−ợc kiểm tra nữa, cấu trúc ifififif elseelseelse endelseendendend lại đ−ợc bỏ qua Hơn câu lệnh elseelseelseelse cuối khơng cần cho vào
§èi víi cÊu tróc ifififif elseelseelse endelseendendend, lồng vào vòng lặp forforforfor whilewhilewhilewhile: >> EPS = 1;
>> for num = 1:100 EPS = EPS/ 2; if (1+EPS)< EPS = EPS*2 break
end end EPS =
2.2204e-16 >> num
num= 53
Ví dụ đ−a cách khác để tính số eps Trong ví dụ, lệnh breakbreakbreakbreak đ−ợc thực MATLAB nhẩy khỏi vịng lặp thực Khi lệnh breakbreakbreakbreak xuất vòng lặp forforforfor whilewhilewhilewhile vòng lặp nồng nhảy khỏi vịng lặp chứa nó khơng nhảy khỏi tất vịng lặp
11.4 CÊu tróc switch 11.4 CÊu tróc switch 11.4 CÊu tróc switch 11.4 CÊu tróc switch casecasecasecase
Khi chuỗi lệnh đánh giá dựa biểu thức thử biểu thức điều kiện với nhiều giá trị thử khác nhau, ngời ta th−ờng dùng cấu trúc switchswitchswitchswitch casecasecasecase Cấu trúc switchswitch caseswitchswitchcasecasecase
cã d¹ng nh− sau:
switch switch switch biĨu thøc ®iỊu kiƯn switch case case case giá trị thử case khèi lƯnh
casecasecase { gi¸ trị thử 2, giá trị thử 3, giá trị thử 4} case khèi lÖnh
otherwiseotherwiseotherwise otherwise
khèi lÖnh endendend end
(80)Nếu biểu thức điều kiện chuỗi lệnh casecasecasecase so sánh chuỗi với giá trị thử iiii Trong ví dụ tr−ớc, biểu thức điều kiện đ−ợc đem so sánh với giá trị thử 1, chúng khối lệnh đầu tiện đ−ợc thực hiện, mà khối lệnh tr−ớc trạng thái endendendend đ−ợc bỏ qua, chúng khơng điều kiện tiếp tục đ−ợc đem so sánh với giá trị thử 2, giá trị thử 3, giá trị thử 4, giá trị biểu thức điều kiện khối lệnh đ−ợc thực Nếu tất lệnh so sánh casecasecasecase khơng khối lệnh đ−ợc thực Chú ý cấu trúc switchswitch caseswitchswitchcasecasecase có it nhóm lệnh phải đ−ợc thực Sau ví dụ cấu trúc switchswitchswitchswitch casecasecasecase:
x = 2.7; units = 'm';
switch units % ChuyÓn x centimeters case {'inch','in'}
y=x*2.54; case {'feet','ft'} y=x*2.54*12; case {'meter','m'} y=x/ 100;
case {'millimeter','mm'} y=x*10;
case {'centimeter','cm'} y=x;
otherwise
disp(['kh«ng biÕt units: ' units]) y=nan;
end
Khi thực ví dụ giá trị cuối y là: y=0.027 Ví dụ: Vấn đề lãi xuất
Ví dụ: Vấn đề lãi xuất Ví dụ: Vấn đề lãi xuất Ví dụ: Vấn đề lãi xuất
Vấn đề: Vấn đề: Vấn đề:
Vấn đề: Để mua ôtô, bạn phải vay 10,000$ với lãi xuất hàng tháng 8.9%, năm gốc lãi đ−ợc tính nh− sau lần chi trả Ngồi phần tiền cịn lại sau lần chi trả bao nhiêu?
Gi¶i pháp: Giải pháp: Giải pháp:
Giải pháp: Từ chơng 2, số tiền chi trả P hàng tháng cho khoản vay A dollar với lÃi xuất hàng tháng R, tính M tháng là:
P = A
Tại lần chi trả đầu tiên, tiền lÃi phải trả Ip1= R.A Giả sử số tiền phải trả P tiền gốc phải trả Pr1= P - Ip1 số tiền lại sau lần chi trả thứ B1=A - Pr1 Trong tất
ln chi trả sau tiền lãi phải trả Ipm= R.Bm-1 số tiền lại Bm= Bm-1 - Prm Sử dụng thơng tin ch−ơng trình MATLAB nh− sau:
function amort
(81)P=A*(r*(1+r)^M/((1+r)^M-1)); % payment required
B=zeros(M,1); %storage for balance remaining per month Ip=B; % storage for interest paid per month
Pr=B; % storage for principle paid per month for m=1:M
if m==1 % compute interest when balance is Ip(m)=r*A; % original amount
else
Ip(m)=r*B(m-1); end
Pr(m)=P-Ip(m); % principle paid this month
if m==1 % compute balance remaining after payment B(m)=A-Pr(m);
else
B(m)=B(m-1)-Pr(m); end
end
format bank
disp(['Amount=' num2str(A)]) disp(['Interest Rate=' num2str(R)])
disp(['Number of months = ' num2str(M)]) disp(['Payment =' num2str(P)])
disp(' ')
disp(' Amortization Schedule') disp(' Payment Balance Interest Principle') disp([(1:M)' B Ip Pr])
format short g
Ch¹y chơng trình kết nh sau: >> Amount=10000
Interest Rate=8.9 Number of months = 36 Payment =317.5321
Amortization Schedule
(82)14.00 6423.66 49.63 267.90 15.00 6153.77 47.64 269.89
Ví dụ minh hoạ cấu trúc lặp for for for for ifififif elseelseelseelse endendendend Nó minh hoạ việc sử dụng script M_file Để tính tốn khoản cho vay bạn cần thay đổi d− liệu vào phần đầu ch−ơng trình bạn chạy lại
VÝ dụ: Chuỗi lên xuống Ví dụ: Chuỗi lên xuống Ví dụ: Chuỗi lên xuống Ví dụ: Chuỗi lên xuống
Vấn đề: Vấn đề: Vấn đề:
Vấn đề: cho x0 số nguyên Giả sử chuỗi xk đ−ợc định nghĩa nh− sau:
xk+1 = xk/ nÕu xk lµ chẵn xk+1 = 3xk+ xk lẻ
Chuỗi có thuộc tính chuỗi số dừng lại xk =1, chuỗi phân kỳ hay hội tụ
Giải pháp: Giải pháp: Giải pháp:
Gii phỏp: Chỳng ta cần vòng lặp whilewhilewhilewhile để xét xem xk= sử dụng cấu trúc
ifififif elseelseelseelse endendendend để thực việc tính tốn dãy xk Trong MATLAB ch−ơng trình nh− sau: function up_down
% up_down.m script file for up/down sequence proplem x=zeros(500,1); %preallocate storage for x(k)
x(1)=round(abs(input('Enter a number> '))); k=1;
while (x(k)>1)&(k<500)
if rem(x(k),2)==0 % x(k) is even x(k+1)=x(k)/2;
else % x(k) is old x(k+1)=3*x(k)+1;
end
k=k+1; % increment sequence counter end
x=x(x>0) % keep values generated only and dispay them M=0:499;
plot(M,x)
Kết ch−ơng trình thú vị, ví dụ với x=2m , m số nguyên
chuỗi ngắn (tại sao?), giá trị số hạng chuỗi luỹ thừa chuỗi nhanh chóng dừng lại, nh−ng số x t−ơng đối nhỏ kết chuỗi thú vị Ví dụ x1=27 Hầu nh− tất giá trị ban đầu sinh chuỗi có giá trị ngẫu nhiên nh− hình vẽ d−ới với x(1)=837799 Liệu bạn có dám kết luận chuỗi hội tụ hay không!
(83)H×nh 11.1 H×nh 11.1 H×nh 11.1 H×nh 11.1
-oOo -
ch−¬ng 12
HµM M_FILE
Khi bạn sử dụng hàm MATLAB nh− invinvinvinv, absabsabsabs, angleangleangleangle, sqrtsqrtsqrtsqrt, MATLAB nhận giá trị mà bạn truyền vào, dựa vào kết đó, tính tốn kết hàm trả lại cho bạn kết tính tốn Các lệnh tính tốn hàm nh− biến trung gian đ−ợc tạo lệnh bạn khơng nhìn thấy, tất bạn trơng thấy giá trị nhập vào giá trị đ−a ra, coi hàm nh− hộp đen Các thuộc tính làm cho hàm trở lên hữu dụng lệnh tính tốn mà phải dùng đến hàm toán học phức tạp th−ờng xuất bạn giải vấn đề lớn Dựa vào −u điểm này, MATLAB cung cấp cấu trúc để bạn tự tạo hàm cho d−ới dạng M_file Hàm flipupflipupflipupflipup d−ới ví dụ việc dùng hàm M_file:
function y=flipup(x)
% FLIPUP Flip matrix in up/down directiopn
% FLIPUP(x) return x with columns preserved and rows flipped % in the up/down direction For example
%
(84)% See also FLIPLR, ROT90, FLIPDIM
% Copyright (c) 1984-96 by the MathWork, Inc
% $Revision: 5.3 $ $Date: 1996/10/24 18: 41: 14 $ if ndim(x)~=2
error( ‘X must be a 2-D matrix.‘); end
[m, n] = size(x); y = x(m: -1: 1, :);
Một hàm M_file giống với script file chúng file văn có phần mở rộng ‘.m‘ Điểm khác script file hàm M_file hàm M_file không đ−ợc nhập vào từ cửa sổ lệnh mà thơng qua trình soạn thảo văn từ bên ngồi Hàm M_file cịn khác với script file chỗ thơng tin với MATLAB thơng qua biến truyền vào cho thơng qua biến mà tạo lên, biến trung gian bên hàm khơng xuất hay t−ơng tác với môi tr−ờng MATLAB Nh− bạn thấy ví dụ tr−ớc, dịng hàn M_file định nghĩa file nh− hàm tên nó, tên tên file nh−ng khơng có phần mở rộng ‘.m‘ đồng thời định nghĩa ln biến vào Chuỗi dòng lệnh lời thích, xuất ta dùng lệnh >>help, >>help flipud, >>helpwinflipud dòng lệnh help gọi dịng H1 dịng dùng lệnh lookfor Cuối phần lại file chứa lệnh MATLAB để tạo lên biến
12.1 Các quy luật thuộc tính 12.1 Các quy luật thuộc tính 12.1 Các quy luật thuộc tính 12.1 Các quy luật thuộc tÝnh
Hàm M_file phải tuân theo quy luật thuộc tính định, ngồi chúng cịn có số tính chất quan trọng bao gm:
*) Tên hàm tên file phải một, ví dụ hàm flipudflipudflipudflipud phải đợc lu file với tên
flipud.m flipud.m flipud.m flipud.m
*) Lần MATLAB thực hàm M_file mở file văn t−ơng ứng dịch dịng lệnh file dạng mã l−u nhớ nhằm mục đích tăng tốc độ thực lời gọi hàm Nếu hàm có chứa lời gọi hàm M_file khác hàm đ−ợc dịch vào nh
*) Các dòng ghi lời thích dòng thích hàm M_file dòng văn bản, hiƯn b¹n sư dơng lƯnh helphelphelphelp VÝ dơ: >>help flipud trả dòng hàm M_file nói Dòng dòng H1, nã sÏ xt hiƯn b¹n dïng lƯn look forlook forlook forlook for
*) Mỗi hàm có không gian làm việc riêng tách biệt so với môi tr−ờng MATLAB, mối quan hệ biến hàm với môi tr−ờng MATLAB biến vào hàm Nếu thân hàm giá trị bị thay đổi thay đổi tác động bên hàm mà khơng làm ảnh h−ởng đến biến môi trờng MATLAB Các biến đ−ợc tạo bên hàm nằm khơng gian làm việc hàm đ−ợc giải phóng hàm kết thúc, khơng thể sử dụng thông tin lần gọi tr−ớc cho lần gọi sau
*) Số tham số vào hàm đ−ợc gọi có tác dụng bên hàm đó, biến nargin chứa tham số đa vào biến nargout chứa giá trị đa ra, thực tế biến thờng đ−ợc sử dụng để xác định giá trị dựa vào số l−ợng đối số đa vào Ví dụ xét hàm linespace sau:
(85)% LINESPACE Linearly spaced vector
% LINESPACE(x1, x2) generates a row vector of 100 linearly % equally spaced points betwin x1 and x2
%
% LINESPACE(x1, x2, N) generates N points betwin x1 and x2 %
% See also LOGSPACE, :
% Copyright (c) 1984-96 by the MathWork, Inc
% $Revision: 5.3 $ $Date: 1996/10/24 18: 41: 14 $ if nargin==2
n = 100; end
y = [d1 + (0: n-2)*(d2-d1)/ (n-1) d2];
ở lời gọi ng−ời sử dụng truyền vào hai đối số linespace trả giá trị 100, nh−ng số đối số 3, ví dụ nh− linespace(0,10,50) đối số thứ định số điểm liệu
*) Các hàm dùng chung biến với hàm khác, với môi tr−ờng MATLAB đệ quy nh− biến đ−ợc khai báo tồn cục Để truy cập đến biến hàm môi tr−ờng MATLAB biến phải đ−ợc khai báo biến tồn cục hàm sử dụng Hàm tictictictic toctoctoctoc sau mơ tả ví dụ việc sử dụng biến toàn cục:
function tic
% TIC Start a stopwatch timer % The sequence of lÖnhs % TIC, operation, TOC
% prints the time required for the operation %
% See also TOC, CLOCK, ETIME, CPUTIME % Copyright (c) 1984-96 by the MathWork, Inc
% $Revision: 5.3 $ $Date: 1996/10/24 18: 41: 14 $ % TIC simple stores CLOCK in a global variable
global TICTOC TICTOC = clock; function t = toc
% TOC Read the stopwatch timer
% TOC, by itself, prints the elapsed time in t, % instead of printing it out
%
% See also TIC, ETIME, CLOCK, CPUTIME % Copyright (c) 1984-96 by the MathWork, Inc
% $Revision: 5.3 $ $Date: 1996/10/24 18: 41: 14 $ % TOC uses ETIME and the value of clock saved by TIC global TICTOC
if nargout<
(86)t = etime(clock, TICTOC); end
Trong hàm tictictictic biến TICTOC đ−ợc khai báo biến toàn cục giá trị biến có đ−ợc thơng qua việc gọi hàm clockclockclockclock Sau hàm toctoctoctoc, biến TICTOC đ−ợc khai báo biến tồn cục làm cho toctoctoctoc có khả truy cập đến biến TICTOC hàm tictictictic, sử dụng giá trị biến toctoctoctoc tính đ−ợc khoảng thời gian trôi qua kể từ hàm tictictictic đ−ợc thi hành Một điều quan trọng cần nhớ biến TICTOC tồn không gian làm việc tictictictic toctoctoctoc nh−ng không tồn môi tr−ờng MATLAB
*) Việc thi hành hàm M_file kết thúc gặp dòng cuối file gặp dịng lệnh returnreturnreturnreturn Lệnh returnreturnreturnreturn giúp ta kết thúc hàm mà không cần phải thi hành hết lệnh hàm
*) Hàm error error error error MATLAB hiển thị chuỗi lên cửa sổ lệnh dừng thực hàm, trả điều khiển cho cửa sổ lệnh bàn phím Hàm hữu dụng để cảnh báo việc sử dụng hàm khơng mục đích Ví dụ nh− câu lệnh sau:
if length(val) >
error(VAL phải giá trị số!) end
ở valvalvalval số hàm errorerrorerrorerror lên chuỗi cảnh báo trả điều khiển cho cửa sổ lệnh vµ bµn phÝm
*) Một M_file chứa nhiều hàm Hàm trịng M_file phải đ−ợc đặt tên trùng với tên M_file nh− đề cập đến Các hàm khác đ−ợc khai báo thông qua câu lệnh
function function function
function đ−ợc viết sau hàm Các hàm đ−ợc sử dụng hàm chính, có nghĩa ngồi hàm khơng có hàm khác gọi đ−ợc chúng Tính cung cấp giải pháp hữu hiệu để giải phần hàm cách riêng rẽ làm giảm bớt khó khăn ta lập trình hàm lớn
Nói tóm lại, hàm M_file cung cấp cho ta ph−ơng pháp đơn giản để mở rộng khả MATLAB Trong thực tế nhiều hàm MATLAB cỏc hm M_file
Ví dụ: Hàm trả dần theo thời hạn Ví dụ: Hàm trả dần theo thời hạn Ví dụ: Hàm trả dần theo thời hạn Ví dụ: Hàm trả dần theo thời hạn
Vn : Vấn đề: Vấn đề:
Vấn đề: Giả sử có khoản cho vay A dollar, với lãi suất hàng tháng R% phải trả vòng M tháng Hãy viết hàm M_file để thể hin:
- Lịch chi trả nh ban đầu cha biết số liệu đa - Số tiền chi trả hàng tháng biết số liÖu
- Số tiền chi trả hàng tháng ma trận số chứa lịch toán biết tr−ớc hai đối số
Gi¶i pháp: Giải pháp: Giải pháp:
Giải pháp: Trong chơng 2, số tiền trả hàng tháng P cho khoản cho vay A dollar với tỉ giá lÃi xuất R, trả M tháng: P = A.: P = A.: P = A.: P = A
Tại lần chi trả đầu tiên, tiền lÃi phải trả Ip1= R.A Giả sử số tiền phải trả P tiền gốc phải trả Pr1= P - Ip1 số tiền lại sau lần chi trả thứ B1=A - Pr1 Trong tÊt c¶
các lần chi trả sau tiền lãi phải trả Ipm= R.Bm-1 số tiền lại Bm= Bm-1 - Prm Sử dụng thơng tin ch−ơng trình MATLAB nh− sau:
function [P,S]=loan(a,r,m)
%LOAN Loan Payment and Amortization Table % (H1 help line)
(87)%amount of a, having an annual intereat rate of R, % to be paid off in equal amounts over M months %
%[P,S]=LOAN(A,R,M) also returns % an amortization table S,
%which is an M-by-4 matrix
% where S(:,1)=Payment Number,
%S(:,2)=Remaining Balance, S(:,3)=Interest Paid, and %S(:,4)=Principle Paid
%
%If no output arguments are provided % the table is displayed
%Start with some error checking if nargin<3
error('Three input argument are required.') end
if fix(m)~=m
error('Number of Months Must be Integer.') end
% Now calculate
rm=(r/100)/12; % Monthly interest rate p=a*(rm*(1+rm)^m/((1+rm)^m-1)); % payment required if nargout==1 % done if only payment is required P=p; % copy out into output variable
return end
B=zeros(m,1); % storage for balance remaining per month Ip=B; % storage for interest paid per month
Pr=B; % storage for principal paid per month for i=1:m % creat table data
if i==1
% compute interest when balance is orginnal amout Ip(i)=rm*a;
else % balance is B(i-1) Ip(i)=rm*B(i-1);
end
Pr(i)=p-Ip(i); %principal paid this month
if i==1 % compute balance remainig after payment B(i)=a-Pr(i);
else
B(i)=B(i-1)-Pr(i); end
end
B(abs(B)<0.001)=0; % set near zero balance to zero s=[(1:m)' B Ip Pr];
(88)disp(['Payment = ' num2str(p)]) disp(' ')
disp(' Amortization Schedule') disp(' Payment Balance Interest Principle') fprintf(' %5.0f %12.2f %12.2f %12.2f\n', s') % better formatting
else % two output arguments requested P=p;
S=s; end
VÝ dơ: Gi¶i m· màu điển trở Ví dụ: Giải mà màu điển trở Ví dụ: Giải mà màu điển trở Ví dụ: Giải mà màu ®iÓn trë
Vấn đề: Vấn đề: Vấn đề:
Vấn đề: Giá trị điện trở dùng mạch điện đ−ợc tính thơng qua vạch màu in thân Đối với điện trở với độ xác 5% có dải màu, tạm gọi A, B, C Giá trị số đ−ợc gán cho màu đ−ợc tính nh− sau:
Màu Đen Nâu Đỏ Vàng Lục Lam Tràm Tím Xám Trắng
Giá trị
NÕu A, B, C giá trị màu giải màu giá trị điện trở là: R = (10.A + B).10C
Sử dụng thông tin này, hÃy tạo M_file trả giá trị cđa ®iƯn trë øng víi bÊt kú mét ®iƯn trë chuẩn
Giải pháp: Giải pháp: Giải pháp:
Gii phỏp: Vn ny yờu cầu chuỗi thao tác so sánh để thực chuyển đổi bảng Giải pháp MATLAB là:
function r=resistor(a, b, c)
%RESISTOR(A, B, C) Resistor value from color code %RESISTOR(a, B, C) returns the resistace
%value of resistor
%given its three color bands, A, B, C %A, B, C must be one of the
%following character strings: %
%'black', 'brown', 'red', 'orange', 'yellow', %'green', 'blue', 'violet', 'gray', 'white' % first some error checking
if nargin~=3
error('Three input arguments required') end
if ~ischar(a)|~ischar(b)|~ischar(c)
error('Inputs Must be Character X©us') end
%now solve problem
(89)abc={a,b,c}; % tring cell aray ß thrª input for i=1:3 %do each color band in turn band=lower(abc(i));
%get (i)th input and make lower case if strncmp(band,'bla',3) % black (compare # of) vals(i)=0; % chars for unique match) elseif strncmp(band,'br',2) %brown
vals(i)=1;
elseif strncmp(band,'r',1) %red vals(i)=2;
elseif strncmp(band,'o',1) %orange vals(i)=3;
elseif strncmp(band,'y',1) %yellow vals(i)=4;
elseif strncmp(band,'gre',3) %green vals(i)=5;
elseif strncmp(band,'blu',3) %blue vals(i)=6;
elseif strncmp(band,'v',1) %violet vals(i)=7;
elseif strncmp(band,'gra',3) %gray vals(i)=8;
elseif strncmp(band,'w',1) %white vals(i)=9;
else
error(['Unknown Color Band.']) end
end
if vals(1)==0
error('First Color Band Cannot Be Black.') end
r=(10*vals(1)+vals(2))*10^vals(3);
Sư dơng hµm nµy cho mét vµi vÝ dơ: >> resistor('brown', 'black', 'red') ans=
1000
-oOo -
ch−¬ng 13
PHÂN TíCH Dữ LIệU
(90)tr mảng cột, việc phân tích liệu thực theo chiều Đó trừ đ−ợc định theo cách khác, cột mảng liệu thể thông số đo khác nhau, hàng thể giá trị mẫu thơng số đo Ví dụ giả sử nhiệt độ ban ngày (tính theo độ C) thành phố tính tháng (31 ngày đ−ợc ghi lại gán cho biến temps script M_file, chạy M_file giá trị temps đ−ợc đa vào môi tr−ờng MATLAB, thực công việc này, biến temps chứa:
>> temps temps=
12 18 15 22 12 19 14 23 12 22 11 19 15 15 10 20 19 18 12 18 14 10 19 11 17 23 19 15 18 10 20 10 17 12 22 19 12 21 12 20 10 17 13 12 18 10 20 10 22 14 21 12 22 13 18 15 10 23 13 11 24 12 12 22
Mỗi hàng chứa nhiệt độ ngày đó, cịn cột chứa nhiệt độ thành phố Để cho liệu trở lên dễ dàng hơn, gõ vào nh sau:
>> d=1:31; % number the days of the month >> plot(d,temps)
>> xlabel('Day of month') >> ylabel('Celsius')
(91)H×nh 13.1 H×nh 13.1 H×nh 13.1 H×nh 13.1
LƯnh plot plot plot plot vừa dùng minh hoạ thêm cách sử dụng Biến d vector dài 31, biÕn temps lµ mét ma trËn 31x3 Cho trớc liệu này, lệnh plotplotplotplot tríc cét cđa biÕn temps cho vµo d
Để minh hoạ vài khả phân tích liệu MATLAB, xét lệnh sau, dựa liệu nhiệt độ cho:
>> avg_temp = mean(temps) avg_temp=
11.9677 8.2258 19.8710
Ví dụ thành phố thứ có nhiệt độ trung bình cao nhất, MATLAB tính nhiệt độ trung bình cột cách riêng rẽ Nếu tính trung bình thành phố thì:
>> avg_avg = mean(avg_temp) avg_avg=
13.3548
Khi mà giá trị đầu vào hàm phân tích liệu vector hàng hay cột MATLAB đơn giản tiến hành phép toán vector trả giá trị số
Bạn dùng mảng để thực công việc này:
(92)avg_temp =
11.9677 8.2258 19.8710
>> avr_tempr = mean(temps,2) % Tính cho 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 giá trị nhiệt độ trung bình ba thành phố ngày
Xét tốn tìm chênh lệch nhiệt độ thành phố so với giá trị trung bình, có nghĩa avg_temp(i) phải bị trừ cột thứ iiii biến temps Bạn câu lệnh nh− sau:
>> temps-avg_temp ??? Error using ==> -
Matrix dimensions must agree
Bởi thao tác thao tác định nghĩa mảng (temps mảng 31x3, avg_temp mảng 1x3) Có lẽ cách dùng vịng lặp forforforfor đơn giản nhất: >> for i = 1:3
(93)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
Khi thực ph−ơng pháp ta thấy chậm so với câu lệnh đ−ợc MATLAB thiết kế riêng để dùng cho mảng Khi ta nhân biến avg_temp để kích th−ớc với kích th−ớc temps Sau thực phép trừ nhanh nhiều:
>> tdev = temps - avg_temp(ones(31,1),:) tdev =
(94)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
avg_temp(ones(31,1),:) nhân hàng (và hàng nhất) biến avg_temp thành 31 bản, tạo lên ma trận 31x3 Trong cột thứ iiii avg_temp(i) >> max_temp = max(temps)
max_temp=
19 12 24
Câu lệnh tìm nhiệt độ lớn thành phố tháng >> [max_temp,x] = max(temps)
max_temp=
19 12 24 x=
23 30
Cho biết giá trị nhiệt độ lớn thành phố giá trị số hàng x, giá trị lớn xuất hiện, ví dụ x cho biết ngày nóng tháng
>> min_temp = min(temps) min_temp=
15
Cho biết nhiệt độ thấp thành phố >> [min_temp, n] = min(temps)
(95)15 n=
cho biết giá trị nhiệt độ thấp thành phố số hàng n, giá trị thấp xảy Trong ví dụ này, n ngày lạnh tháng
>> s_dev = std(temps) s_dev=
2.5098 1.7646 2.2322
Cho biết độ chênh lệch chuẩn biến temps >> daily_change = diff(temps)
daily_change = -3 -4 -3 -2 -2 -1 -1 -3 -4 -7 11 -3 -2 -7 -3 -2 -2 -2 -1 -1 -4 -1 -7 -2 -3 -3 -3 -1 -2 -3 -4 -2 -4 -1 -2 -2 -4 -2 -1 -2
(96)13.1 C¸c hàm phân tích liệu 13.1 Các hàm phân tích liệu 13.1 Các hàm phân tích liệu 13.1 Các hàm phân tích liệu
Phân tích liệu MATLAB đ−ợc thực thông qua ma trận h−ớng cột, biến khác đ−ợc l−u giữ cột khác hàm thể giá trị biến thời điểm quan sát định Các hàm thống kê ca MATLAB gm cú:
Các hàm phân tí Các hàm phân tí Các hàm phân tí
Các hàm phân tích liệuch liệuch liệuch liệu
cplxpair(x) Xắp xếp cặp phức liên hợp cross(x,y) TÝch chÐo vector
cumprod(x) TÝch tÝch luü theo cét cumprod(x,n) TÝch tÝch luü theo chiÒu n cumsum(x) Tæng tÝch luü theo cét cumsum(x,n) Tỉng tÝch l theo chiỊu n cumtrapz(x,y) TÝch chÐo tÝch luü
cumtrapz(x,y,n) Tích chéo tích luỹ theo chiều n del2(A) Toán tử rời rạc Laplacian điểm diff(x) Tính độ chênh lệch phần tử diff(x,m) Tính số cấp m phần tử
diff(x,m,n) TÝnh sè cÊp m phần tử theo chiều n
dot(x,y) TÝch v« h−íng cđa hai vector gradient(Z,dx,dy) Gradient vi ph©n
histogram(x) Biểu đồ hình cột max(x), max(x,y) Phần tử lớn
max(x,n) PhÇn tư lớn theo chiều n mean(x) Giá trị trung bình cột mean(x,n) Giá trị trung bình theo chiều n median(x) Giá trị phần tử cột median(x,n) Giá trị phần tử theo chiỊu n min(x), min(x,y) PhÇn tư nhá nhÊt
min(x,n) Phần tử nhỏ theo chiều n prod(x) Tích phần tử cột prod(x,n) Tích phần tử theo chiều n rand(x) Số ngẫu nhiên phân bố
randn(x) Sè ngÉu nhiên phân bố bình thờng sort(x) Xắp xếp cột theo thứ tự tăng dần sort(x,n) Xắp xếp theo chiều n
sortrows(A) Xắp xếp hàng theo thứ tự tăng dần std(x), std(0) Độ lệch chuẩn cột chuẩn hoá theoN-1 std(x,1) Độ lệch chuẩn cột chuẩn hoá theoN std(x, flag, n) Độ lệch chuẩn theo chiều n
subspace(A,B) Góc hai điểm
sum(x) Tổng phần tử cột
sum(x,n) Tổng phần tử theo chiều n
trapz(x,y) Tích chÐo cña y=f(x)
(97)-oOo -
chơng 14
ĐA THứC 14.1 Các nghiệm ®a thøc
14.1 C¸c nghiƯm cđa ®a thøc 14.1 Các nghiệm đa thức 14.1 Các nghiệm đa thøc
Tìm nghiệm đa thức giá trị để đa thức không, toán th−ờng gặp thực tế MATLAB giải toán đồng thời cung cấp cơng cụ để tính tốn đa thức Trong MATLAB đa thức đ−ợc biểu diễn vector hàng hệ số với bậc giảm dần Ví dụ a thc
x4-12x3+25x+116 đợc nhập vào nh− sau:
>> p = [1 -12 25 116] p=
-12 25 116
Nhí r»ng mục dành cho hệ số phải đợc gõ vào không MATLAB không hiểu đợc hệ số biêủ thức bậc không Sử dụng dạng nghiệm đa thức tìm đợc cách dùng hàm rootsrootsrootsroots:
>> r = roots(p) r=
11.7374 2.7028
-1.2251 + 1.4672i -1.2251 - 1.4672i
Bởi MATLAB đa thức nghiệm vector nên MATLAB ngầm quy −ớc đa thức vector hàng, nghiệm vector cột Nếu biết tr−ớc nghiệm đa thức ta dễ dàng biết đ−ợc đa thức Trong MATLAB lệnh poly poly poly poly thực công việc này:
>> pp = poly(r) pp=
-12 -1.7764e-14 25 116
>> pp(abs(pp)< 1e-12 = % Gán phần tử nhỏ không -12 25 116
Bởi tính tốn thờng gặp sai số nên kết lệnh polypolypolypoly cho đa thức có hệ số gần khơng đa thức có phần ảo nhỏ nh− đ−ợc trên, giá trị khơng đ−ợc làm trịn cơng cụ mảng T−ơng tự nh− vậy, ta làm tròn số phức để trở thành s thc bng hm realrealrealreal
14.2 Nhân đa thức 14.2 Nhân đa thức 14.2 Nhân đa thức 14.2 Nhân ®a thøc
(98)a(x) = x +2x+3x+4 vµ b(x) = x+4x +9x+16 >> a = [1 4]; b = [1 16];
>> c = conv(a,b) c=
20 50 75 84 64
Kết c(x) = x6 +6x5 +20x4 +50x3+75x2+84x+64
khi ta nhân nhiều đa thức với ta phải sử dụng lệnh convconvconvconv nhiều lần 14.3 Phép cộng đa thức
14.3 Phép céng ®a thøc 14.3 PhÐp céng ®a thøc 14.3 PhÐp cộng đa thức
MATLAB không cung cấp hàm trực tiếp thực phép cộng hai ®a thøc, dïng phÐp céng ma trËn chØ cã t¸c dụng hai đa thức hai vector có kÝch th−íc VÝ dơ nh− céng hai ®a thøc a(x) b(x) trên:
>> d = a + b d=
12 20
Kết d(x)=2x3+6x2+12x+20 Khi hai đa thức có bậc khác đa thức có bậc thÊp
hơn phải đ−ợc thêm vào hệ số bậc có bậc với đa thức có bậc cao Xét phép cộng hai đa thức c d trên:
>> e = c + [0 0 d] e=
20 52 81 96 84
Kết e(x)=x6+6x5+20x4+52x3+81x2+84 Các giá trị cần phải đợc thêm vào phÝa
đầu vector khơng phải phía đi, hệ số phải t−ơng ứng với hệ số bậc cao x
Nếu bạn muốn, bạn tạo hàm M_file để thực phép công đa thức tổng quát: function p=polyadd(a,b)
%POLYADD Polynomial addition
%POLYADD(A,B) adds the polynomials A and B if nargin<2
error(‘Not enough input arguments‘) end
a=a(:).‘; %make sureinputs are row vectors b=b(:).‘;
na=length(a); %find lengths of a and b nb=length(b);
p=[zeros(1,nb-na) a]+[zeros(1,na-nb) b]; % pad with zeros as necessary
(99)f=
20 52 81 96 84
Kết giống nh− đa thức e Tất nhiên polyaddpolyaddpolyaddpolyadd dùng để thực phép trừ
>> g = polyadd(c,-d) g=
20 48 69 72 44 14.4 Chia hai ®a thøc
14.4 Chia hai ®a thøc 14.4 Chia hai ®a thøc 14.4 Chia hai ®a thøc
Trong mét sè tr−êng hỵp ta phải chia đa thức cho đa thức khác, MATLAB công việc đợc thực hàm deconvdeconvdeconvdeconv, sử dụng đa thức b c ë trªn ta cã: >> [q,r] = deconv(c,b)
q=
r=
Kết c đem chia cho b đ−ợc đa thức q đa thức d r tr-−ờng hợp đa thức d đa thức c đa thức chia hết cho q (nhớ ta nhận đ−ợc đa thức c cách đem nhân đa thức a với đa thức b)
14.5 14.5 14.5
14.5 Đạo hàmĐạo hàmĐạo hàmĐạo hàm
Bởi dễ dàng tính đ−ợc vi phân đa thức nên MATLAB đa hàm polyderpolyderpolyderpolyder để tính vi phân đa thức:
>> h = polyder(g) h=
30 80 144 138 72
14.6 Tính giá trị đa thức 14.6 Tính giá trị đa thức 14.6 Tính giá trị đa thức 14.6 Tính giá trị đa thức
Rõ ràng bạn cộng, trừ, nhân, chia, đạo hàm đa thức dựa hệ số nó, bạn dễ dàng tính đ−ợc giá trị đa thức Trong MATLAB hàm polyvalpolyvalpolyvalpolyval thực công việc này:
>> x = linspace(-1,3);
SÏ chän 100 điểm liệu -1 >> p = [1 -7 -10];
Dïng ®a thøc p(x) = x3+4x2-7x-10 >> v = polyval(p,x);
(100)>> plot(x, v), title(‘x^3+4x^2-7x-10‘), xlabel(‘x‘)
H×nh 14.1 H×nh 14.1 Hình 14.1 Hình 14.1 14.7 Phân thứ
14.7 Phân thứ 14.7 Phân thứ
14.7 Phân thức hữu tØc h÷u tØc h÷u tØ c h÷u tØ
Đơi bạn gặp tốn liên quan đến tỉ số hai đa thức hay gọi phân thức hữu tỉ, ví dụ nh− hàm truyền hay hàm xấp xỉ padepadepadepade có dạng nh− sau:
Trong MATLAB phân thức đợc mô hai đa thức riêng rẽ Ví dụ nh:
>> n=[1 -10 100] % a numerator n =
-10 100
>> d=[1 10 100 0] % a dimominator d =
10 100
>> z=roots(n) % the zeros of n(x)/d(x) z =
5.0000 + 8.6603i 5.0000 - 8.6603i
>> p=roots(d) % the poles of n(x)/d(x) p =
(101)-5.0000 - 8.6603i
Đạo hàm phân thức theo biến x đợc tính dựa hàm polyderpolyderpolyderpolyder: >> [nd,dd]=polyder(n,d)
nd =
-1 20 -100 -2000 -10000 dd =
Columns through
20 300 2000 10000 Column
ở nd dd tử thức mẫu thức đạo hàm Một thao tác thơng th−ờng khác tìm phần d phân thức
>> [r,p,k]=residue(n,d) r =
0.0000 + 1.1547i 0.0000 - 1.1547i 1.0000 p =
-5.0000 + 8.6603i -5.0000 - 8.6603i k =
[]
Trong tr−ờng hợp hàm residue residue residue residue trả hệ số mở rộng phân thức phần r, nghiệm phân thức p phần th−ơng chia hết phân thức k Nếu bậc tử số nhỏ bậc mẫu số phân thức chia hết khơng Trong ví dụ mở rộng phân thức phần phân thức cho là:
NÕu cho tr−íc đa thức phân thức ban đầu tìm đợc cách sử dụng hàm
residue residue residue residue:
>> [nn,dd]=residue(r,p,k) nn =
1.0000 -10.0000 100.0000 dd =
1.0000 10.0000 100.0000
Vì tr−ờng hợp này, hàm residue residue residue residue thực đ−ợc việc chuyển đổi hai chiều tuỳ thuộc vào số l−ợng tham số vào truyền cho
(102)
ch−¬ng 15
phÐp néi suy mịn hoá đờng cong
Trong cỏc lnh vực ứng dụng số, nhiệm vụ phải biểu diễn số liệu, th-−ờng số đo chức phân tích Có hai cách giải vấn đề này, ph−ơng pháp nối điểm (interpolation) liệu đ−ợc coi cần cách biểu diễn liệu không nằm giá trị đo đ−ợc, theo ph−ơng pháp thứ hai gọi ph-−ơng pháp mịn hoá đừng cong (curve fitting or regression), bạn tìm đừng cong khơng gãy khúc mà phù hợp với liệu có, nh−ng khơng cần thiết phải qua cách xác điển bảng số liệu H15.1 minh hoạ hai ph−ơng pháp trên, chữ o đánh dấu điểm biểu diễn liệu, đoạn thẳng nét liền nối đ−ờng biểu diễn liệu lại với theo phơng pháp nối điểm đ−ờng chấm chấm đừng cong vẽ theo ph−ơng pháp mn hoỏ d liu
15.1 Mịn hoá đ 15.1 Mịn hoá đ 15.1 Mịn hoá đ
15.1 Mịn hoá đờng congờng congờng congờng cong
(103)H×nh 15.1 H×nh 15.1 H×nh 15.1 H×nh 15.1
Trong MATLAB hàm polyfitpolyfitpolyfitpolyfit giải vấn đề xấp xỉ đ−ờng cong quân ph−ơng bé Để minh hoạ cho việc sử dụng hàm này, bắt đầu liệu có hình vẽ
>> x = [0 1];
>> y =[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
Để sử dụng hàm polyfitpolyfitpolyfitpolyfit, phải truyền cho liệu bậc đa thức mà muốn phù hợp với liệu, chọn bậc n đờng cong xấp xỉ gần đờng thẳng Phơng pháp đợc gọi phơng pháp xấp xỉ tuyến tính Mặt khác chon n=2 tìm đợc tam thức bậc hai VÝ dô:
>> n = 2;
>> p = polyfit(x,y,n) p =
-9.8108 20.1293 -0.0317
Kết polyfitpolyfitpolyfitpolyfit vector biểu diễn hệ số đa thức bậc hai đa thức
y= -9.8108x2+20.1293x-0.0317 Để so sánh mức độ xấp xỉ đa thức với điểm liệu
chóng ta h·y vÏ hai ®−êng: >> xi = linspace(0,1,100);
(104)Dòng gọi hàm polyvalpolyvalpolyvalpolyval MATLAB để tính giá trị đa thức p điểm xi >> plot(x,y,'-o',xi,z,':')
Vẽ điểm có toạ độ x y, đánh dấu điểm chữ ‘o‘ sau nối điểm đoạn thẳng Ngoài cịn vẽ liệu đa thức xi z dùng đ−ờng chấm chấm
>> xlabel('x'),ylabel('y=f(x)')
>> title('Second Oder Curver Fitting')
Tạo nhãn cho đ−ờng cong vừa vẽ Kết lệnh đồ thị đ−ợc giới thiệu
Việc chọn bậc đa thức khơng phải ngẫu nhiên, có hai điểm xác định đ-−ờng thẳng, tức đa thức bậc nhất, ba điểm xác định parabol bậc hai Cứ nh− vậy, để xác định đ−ờng cong bậc n, cần có n+1 điểm Vì vậy, ví dụ tr−ớc có 11 điểm liệu, chọn bậc đa thức từ đến 10 Tuy nhiên, tính chất số học đa thức bậc cao phức tạp nên bạn không nên chọn bậc đa thức lớn mức cần thiết Ngoài bậc đa thức tăng lên xấp xỉ hơn, đa thức bậc cao bị đạo hàm nhiều lần tr−ớc đạo hàm chúng không Ví dụ cho đa thức bậc 10:
>> pp = polyfit(x,y,10) pp =
1.0e+006 *
Columns through
-0.4644 2.2965 -4.8773 5.8233 -4.2948 2.0211 -0.6032 Columns through 11
0.1090 -0.0106 0.0004 -0.0000
>> format short e % change display format
>> pp.' % display polynomial coefficients as a column ans =
-4.6436e+005 2.2965e+006 -4.8773e+006 5.8233e+006 -4.2948e+006 2.0211e+006 -6.0322e+005 1.0896e+005 -1.0626e+004 4.3599e+002 -4.4700e-001
L−u ý kích th−ớc vector hệ số đa thức tr−ờng hợp so với đ−ờng cong bậc hai tr−ớc đây, đồng thời lu ý khác số hạng nhỏ số hạng lớn đa thức vào khoảng 107 Hãy thử vẽ đ−ờng cong so sánh với liệu gốc với
®−êng cong bËc hai
(105)>> plot(x,y,'o',xi,z,‘:‘,xi,zz) % plot data >> xlabel('x'),ylabel('y=f(x)')
>> title('2nd and 10th Order Curver Fitting')
H×nh 15.2 H×nh 15.2 H×nh 15.2 H×nh 15.2
Trên hình 15.2, liệu gốc đ−ợc đánh dấu o, đ−ờng cong bậc hai đ−ợc vẽ nét chấm chấm, đ−ờng cong bậc 10 đ−ợc vẽ nét đậm Để ý đến nét gợn sóng xuất điểm liệu bên phía trái bên phía phải đ−ờng cong bậc 10 Dựa vào đồ thị rõ ràng chiết lý nhiều tốt áp dụng đ−ợc 15.2 Nối điểm chiều
15.2 Nèi ®iĨm mét chiỊu 15.2 Nèi ®iĨm mét chiỊu 15.2 Nèi ®iĨm mét chiỊu
Nh− giới thiệu nối điểm đ−ợc định nghĩa nh− ph−ơng pháp dự đoán giá trị hàm điểm cho tr−ớc Nối điểm công cụ hữu hiệu nhanh chóng tiính đ−ợc giá trị hàm điểm trung gian Ph−ơng pháp đ−ợc sử dụng rộng rãi liệu giá trị phép đo thực nghiệm kết chuỗi tính tốn dài Có thể ví dụ đơn giản việc nối điểm ph−ơng pháp vẽ điểm MATLAB, tức vẽ đoạn thẳng nối điểm liệu liên tiếp để tạo lên đồ thị
Đây ph−ơng pháp nối điểm tuyến tính, cho giá trị hàm nằm hai điểm cho tr−ớc rơi vào khoảng hai đầu đoạn thẳng nối hai điểm Hiển nhiên số l−ợng điểm liệu tăng lên khoảng cách chúng giảm ph−ơng pháp nối điểm tuyến tính trở lên xác
(106)>> x2 = linspace(0,2*pi,6); >> plot(x1,sin(x1),x2,sin(x2),'-') >> xlabel('x'),ylabel('sin(x)') >> title('Linear Interpolation')
H×nh 15.3 H×nh 15.3 H×nh 15.3 H×nh 15.3
Cả hai đồ thị vẽ hàm sine nh−ng đồ thị 60 điểm mịn đồ thị điểm
Cũng giống nh− ph−ơng pháp xấp xỉ hoá đ−ờng cong, phải thực số lựa chọn, có nhiều cách để nối hai điểm, tuỳ thuộc vào giả định mà lựa chọn Hơn nối điểm khơng gian khơng phải chiều Nói nh− bạn có liệu phản ánh hàm phụ thuộc vào hai biến z=f(x,y), bạn nối giá trị nằm hai điểm có x y khác để tìm giá trị trung gian hai điểm MATLAB cung cấp số hàm để nối : interp1 interp1 interp1 interp1 nối liệu chiều,
interp2 interp2 interp2
interp2 nèi liệu hai chiều, interp3interp3interp3interp3 nối liệu ba chiều, interpninterpninterpninterpn nối liệu có số chiều lín h¬n
Sau xem xét liệu hai chiều Để minh hoạ việc nối liệu chiều, xét ví dụ sau, khả thính giác, ví dụ nh mức âm bé hay gọi ng−ỡng nghe tai ngời thay đổi theo tần số, liệu ng−ời thống kê đ−ợc cho nh− sau:
>> Hz = [20:10:100 200:100:1000 1500 2000:1000:10000]; >> % Frequencies in Hertz
(107)-8 -7 -2 11 12];
>> % sound pressure level in dB
Ngỡng nghe đợc chuẩn hoá 0dB tần số 1000Hz, tần số trải dải rộng nên vẽ điểm liệu logarithm hoá trục x
>> semilogx(Hz,spl,'-o') >> xlabel('Frequency, Hz')
>> ylabel('Relative Sound Presure Level1, dB') >> title('Threshold of Human Hearing')
Dựa vào hình 15.4 ta thấy tai ng−ời nhạy cảm hết âm khoảng 3kHz Dựa vào số liệu này, dự đoán ng−ỡng nghe tần số 2,5kHz vài cách khác
>> s = interp1(Hz,spl,2.5e3) %linear interpolation s =
-5.5000e+000
>> s = interp1(Hz,spl,2.5e3,'linear') %linear interpolation again s =
-5.5000e+000
>> s = interp1(Hz,spl,2.5e3,'cubic') % cubic interpolation s =
-5.8690e+000
>> s = interp1(Hz,spl,2.5e3,'spline') % spline interpolation s =
-5.8690e+000
>> s = interp1(Hz,spl,2.5e3,'nearest')% nearest-neighbor s =
-8
(108)
H×nh 15.4 H×nh 15.4 H×nh 15.4 H×nh 15.4
Vì bạn chọn cách để giả toán cho tr−ớc?, nhiều tr−ờng hợp cần nối cách tuyến tính đủ, thực tế ph−ơng pháp mặc định đ−ờng cong gần với đoạn thẳng xác nh−ng ng−ợc lại tốc độ tính tốn nhanh, điều đặc biệt quan trọng tập liệu lớn Một ph−ơng pháp tiêu tốn nhiều thời gian, cho kết đẹp mắt nh−ng không hiệu Trong thực tế tác dụng chủ yếu ph−ơng pháp nối điểm hàm bậc cao để mịn hoá liệu, có nghĩa cho tr−ớc tập liệu ta dùng ph−ơng pháp để tính giá trị hàm thời điểm định Ví dụ:
>> Hzi = linspace(2e3,5e3); % look closely near minimum >> spli = interp1(Hz,spl,Hzi,'cubic');% interpolate near minimum >> i = find(Hz>=2e3&Hz<=5e3);
>> % find original data indices near minimum
>> semilogx(Hz(i),spl(i),'-o',Hzi,spli) % plot old and new data >> xlabel('Frequency, Hz')
>> ylabel('Relative Sound Presure Level1, dB') >> title('Threshold of Human Hearing')
(109)H×nh 15.5 H×nh 15.5 H×nh 15.5 H×nh 15.5
Trên hình 15.5 đ−ờng gạch gạch sử dụng ph−ơng pháp nối điểm tuyến tính, đ−ờng liền nét hàm bậc 3, điểm liệu gốc đ−ợc đánh dấu chữ o Bằng cách nâng cao độ phân giải trục tần số sử dụng đ−ờng bậc số liệu ng−ỡng nghe mà dự đoán đ−ợc mịn
Cần ý độ dốc đ−ờng bậc không thay đổi cách đột ngột qua điểm liệu nh− sử dụng ph−ơng pháp nối tuyến tính Với liệu dự đốn đ−ợc tần số mà tai ngời nhạy cảm âm
>> [sp_min,i] = min(spli) % minimum and index of minimum sp_min =
-8.4245e+000 i =
45
>> Hz_min = Hzi(i) % frequency at minimum Hz_min =
3.3333e+003
(110)Thứ hai biến độc lập phải đơn điệu, nghĩa biến độc lập phải ln tăng ln giảm Trong ví dụ trục tần số Hz ln tăng
15.3 XÊp xØ ho¸ hai chiỊu 15.3 XÊp xØ ho¸ hai chiỊu 15.3 XÊp xØ ho¸ hai chiỊu 15.3 XÊp xØ ho¸ hai chiỊu
Xấp xỉ hoá hai chiều dựa nguyên lý xấp xỉ hoá chiều Tuy nhiên nh− tên ra, xấp xỉ hố hai chiều xấp xỉ hàm phụ thuộc vào hai biến độc lập
z = f(x, y) §Ĩ hiĨu rõ khái niệm này, ta hÃy xét ví dụ sau:
Một công ty thám hiểm đại d−ơng, cần thám hiểm vùng biển, 0.5Km theo hình vng độ sâu đáy biển lại đ−ợc đo ghi lại phần liệu thu thập đ−ợc l−u ch−ơng trình MATLAB d−ới dạng M_file có tên ocean.m nh− sau:
function ocean % ocean depth data
x=0:.5:4; % x-axis (veries across the rows of z) y=0:.5:6; % y-axis ( varies down the columns of z) z=[100 99 100 99 100 99 99 99 100
100 99 99 99 100 99 100 99 99 99 99 98 98 100 99 100 100 100 100 98 97 97 99 100 100 100 99 101 100 98 98 100 102 103 100 100 102 103 101 100 102 106 104 101 100 99 102 100 100 103 108 106 101 99 97 99 100 100 102 105 103 101 100 100 102 103 101 102 103 102 100 99 100 102 103 102 101 101 100 99 99 100 100 101 101 100 100 100 99 99 100 100 100 100 100 99 99 99 99 100 100 100 99 99 100 99 100 99]; Đồ thị liệu đợc vẽ lệnh sau: mesh(x,y,z)
xlabel('X-axis, Km') ylabel('Y-axis, Km') zlabel('Ocean depth, m')
(111)H×nh 15.6
Sử dụng liệu độ sâu điểm nằm khu vực khảo sát tính đ−ợc dựa vào hàm interp2interp2interp2interp2 Ví dụ:
>> zi = interp2(x,y,z,2.2,3.3) zi =
1.0392e+002
>> zi = interp2(x,y,z,2.2,3.3,'linear') zi =
1.0392e+002
>> zi = interp2(x,y,z,2.2,3.3,'cubic') zi =
1.0419e+002
>> zi = interp2(x,y,z,2.2,3.3,'nearest') zi =
102
Cũng giống nh− tr−ờng hợp xấp xỉ hoá chiều, xấp xỉ hoá hai chiều có nhiều ph−ơng pháp, mà ph−ơng pháp đơn giản ph−ơng pháp nối đoạn thẳng, hay gọi nối tuyến tính Một lần xấp xỉ hố đồ thị trở lên mịn với độ phân giải cao hơn:
xi=linspace(0,4,30); % finer x-axis yi=linspace(0,6,40); % finer y-axis [xxi,yyi]=meshgrid(xi,yi);
% grid of all combinations of xi and yi
zzi=interp2(x,y,z,xxi,yyi,'cubic'); % interpolate mesh(xxi,yyi,zzi) % smoothed data
hold on
[xx,yy]=meshgrid(x,y); % grid original data plot3(xx,yy,z+0.1,'ok')
(112)H×nh 15.7
hàm meshgrid meshgrid meshgrid meshgrid đ−ợc dùng để tạo mảng xấp xỉ hoá bao phủ toàn điểm yêu cầu nằm điểm khảo sát Nh− hình 15.7, hàm meshgridmeshgridmeshgridmeshgrid thực điều cách tạo mảng hai chiều dựa vector xi yi, sử dụng mảng dự đốn đ−ợc chỗ nông đáy biển
>> zmax = max(max(zzi)) zmax=
108.05
>> [i,j] = find(zmax==zzi); >> xmax = xi(j)
xmax= 2.6207 >> ymax = yi(j) ymax=
2.9231
-oOo -
chơng 16
phân tích số liệu
(113)16.1 V 16.1 V 16.1 V
16.1 Vẽ đồ thịẽ đồ thịẽ đồ thịẽ đồ thị
Cho đến thời điểm việc vẽ đồ thị hàm đơn giản dựa việc tính giá trị hàm số điểm rời rạc, dùng điểm để biểu diễn hàm giá trị rời rạc Trong nhiều tr−ờng hợp giải pháp chấp nhận đ−ợc Tuy nhiên có số hàm t−ơng đối phẳng số khoảng nh−ng lại trở lên đột biến số giá trị định Sử dụng ph−ơng pháp vẽ truyền thống tr−ờng hợp làm tính chân thực đồ thị Vì MATLAB cung cấp cho ta hàm vẽ đồ thị thơng minh, gọi fplotfplotfplotfplot Hàm tính tốn cách cẩn thận hàm số cần vẽ đảm bảo cách chắn tất điểm đặc biệt đ−ợc biểu diễn đồ thị Hàm flot nhận vào tên hàm cần vẽ dới dạng chuỗi kí tự, giá trị cần vẽ dới dạng mảng gồm hai phần tử chứa giá trị đầu giá trị cuối
VÝ dô:
>> fplot('humps',[0 2]) >> title('FPLOT of humps')
Tính giá trị hàm humpshumpshumpshumps nằm và thể đồ thị hình 16.1 Trong ví dụ humps hàm M_file thiết kế sẵn
H×nh 16.1 H×nh 16.1 H×nh 16.1 H×nh 16.1 function [out1,out2] = humps(x)
%HUMPS A function used by QUADDEMO, ZERODEMO and FPLOTDEMO % Y = HUMPS(X) is a function with strong maxima near x =
(114)%
% [X,Y] = HUMPS(X) also returns X With no input arguments, % HUMPS uses X = 0:.05:1
%
% Example: % plot(humps) %
% See QUADDEMO, ZERODEMO and FPLOTDEMO % Copyright (c) 1984-98 by The MathWorks, Inc % $Revision: 5.4 $ $Date: 1997/11/21 23:26:10 $ if nargin==0, x = 0:.05:1; end
y = / ((x-.3).^2 + 01) + / ((x-.9).^2 + 04) - 6; if nargout==2,
out1 = x; out2 = y; else
out1 = y; end
Hàm fplot fplot fplot fplot làm việc với hàm M_file có giá trị vào giá trị ra, nghĩa giống nh− hàm humps humps humps humps trên, biến y trả mảng có kích th−ớc với biến vào x Một lỗi thông th−ờng xảy sử dụng hàm fplotfplotfplotfplot giống nh− sử dụng hàm phân tích số khác bỏ quyên dấu nháy đơn tên hàm cần vẽ Hàm fplotfplotfplotfplot cần dấu nháy đơn để tránh nhầm lẫn tên hàm với biến môi tr−ờng MATLAB Đối với hàm đơn giản đ−ợc biểu diễn chuỗi kí tự Ví dụ y = 2.e-xsin(x) hàm fplotfplotfplotfplot có
thể vẽ đ−ợc đồ thị hàm mà không cần phải tạo M_file Để thực điều cần viết hàm cần vẽ d−ới dạng chuỗi kí tự có sử dụng x biến số độc lập
>> f = '2*exp(-x).*sin(x)';
ở hàm f(x) = 2.e-xsin(x) đ−ợc định nghĩa cách sử dụng phép nhân ma trận
>> fplot(f,[0 8]) >> title(f), xlabel('x')
(115)H×nh 16.2 H×nh 16.2 H×nh 16.2 H×nh 16.2
Dựa tính này, hàm fplot fplot fplot fplot có khả mạnh, xem phần trợ giúp trực tuyến MATLAB để hiểu rõ cách dùng hàm
16.2 Cực trị hàm 16.2 Cực trị hàm 16.2 Cực trị hàm 16.2 Cực trị cđa mét hµm
(116)Để minh hoạ phép cực tiểu hoá cực đại hố, xem ví dụ tr−ớc lần nữa.Từ hình 16.2 có giá trị cực đại gần xmax =0.7 giá trị nhỏ gần xmin =4 Điều
có thể cho phép ta xem nh xmax=/40.785, xmin=5/43.93 Viết script-file dùng chế độ soạn thảo thuận tiện sử dụng fmin fmin fmin fmin để tìm số này:
function ex_fmin.m %ex_fmin.m
fn='2*exp(-x)*sin(x)';
% define function for
xmin=fmin(fn,2,5) % search over range 2<x<5 emin=5*pi/4-xmin % find error
x=xmin; % eval needs x since fn has x % as its variable
ymin=eval(fn) % evaluate at xmin
fx='-2*exp(-x)*sin(x)'; % definr function for max: % note minus sign
xmax=fmin(fn,0,3) % search over range 0<x<3 emax=pi/4-xmax % find error
x=xmax; % eval needs x since fn has x % as its variable
ymax=eval(fn) %evaluate at xmax Chạy M_file kết nh sau: xmin =
3.9270 emin =
1.4523e-006 ymin =
-0.0279 xmax = 3.0000 emax = -2.2146 ymax = 0.0141
Kết hoàn toàn phù hợp với đồ thị tr−ớc Chú ý fminfminfminfmin làm việc nói chung nh− fplotfplotfplotfplot Ví dụ giới thiệu hàm eval eval eval eval , hàm nhận xâu kí tự giải thích nh− xâu đ−ợc đánh vào từ dấu nhắc MATLAB
(117)trong dải tìm kiếm Trong số tr−ờng hợp, q trình khơng tìm đ−ợc đáp số Khi mà fminfminfminfmin khơng tìm đ−ợc giá trị nhỏ dừng lại đa lời giải thích
16 16 16
16.3 Tìm giá trị không3 Tìm giá trị không3 Tìm giá trị không3 Tìm giá trị không
Nếu nh− bạn quan tâm đến việc tìm kiếm hàm tiến vơ cùng, đơi quan trọng để tìm hàm qua qua giá trị không đổi
Một lần MATLAB cung cấp cho ta công cụ để giải vấn đề Hàm fzerofzerofzerofzero tìm giá trị mảng chiều Để làm sáng tỏ, xem lại ví dụ v hm humps humps humps humps
một lần nữa:
>> xzero = fzero('humps',1.2) % look for zero near 1.2 xzero =
1.2995
>> yzero = humps(xzero) % evaluate at zero yzero =
3.5527e-15
Nh vậy, giá trị gần với 1.3 Nh thấy trên, trình tìm kiếm giá trị kết Nếu không tìm thấy , dừng lại đa giải thÝch
Hàm frzerofrzerofrzerofrzero bắt buộc phải đ−ợc cung cấp tên cho nó đ−ợc gọi đến fzerfzerfzerfzeroooo cho biết đâu hàm cịn tìm giá trị để hàm số Ví dụ tìm x để f(x)= c, ta phải định nghĩa lại hàm g(x) nh− sau: g(x)= f(x)- c, hàm fzerofzerofzerofzero tìm giá trị x để g(x)= 0, t−ơng đ−ơng f(x)= c
16.4 PhÐp 16.4 PhÐp 16.4 PhÐp
16.4 PhÐp lÊy tÝch ph©nlÊy tÝch ph©nlÊy tÝch ph©nlÊy tÝch ph©n
MATLAB cung cấp cho ta ba hàm để tính phép tốn liên quan đến tích phân: trapztrapztrapztrapz,
quad quad quad
quad vµ quad8quad8quad8quad8 Hàm trapztrapztrapztrapz cho ta giá trị xấp xỉ tích phân phía dới hàm cách lấy tổng miền hình thang điểm liệu nh hình 16.4
Nh− thấy hình 16.4, miền hình thang độc lập có giá trị −ớc l−ợng d−ới mức thực tế Nếu ta chia nhỏ nh− phép nơi suy tuyến tính xấp xỉ hàm cao Ví dụ ta gấp đơi số l−ợng hình thang có, độ xấp xỉ tăng lên nh− hình
vÏ 16.5 -1-1 0-0 500 511 52
0
1 04
H×nh 16.4 H×nh 16.4 H×nh 16.4 H×nh 16.4 -1 0-1-0 500 511 52
01 02 03 04 06 07 08
H×nh 16.5 H×nh 16.5 Hình 16.5 Hình 16.5
Tính toán vùng hàm y = humps(x) với -1<x<2 , sử dụng trapz trapz trapz trapz cho hình trªn ta cã:
>> x = -1:.3:2; % rough approximation >> y = humps(x);
>> area = trapz(x,y) % call trapz just like the plot command area =
21.8453
>> x = -1:.15:2; % better approximation >> y = humps(x);
(118)area = 25.8523
Thông th−ờng kết chúng khác nhau, dựa số l−ợng miền đ−ợc chia hình vẽ Tuy nhiên, khơng có đảm bảo q trình xấp xỉ tốt hơn, ngoại trừ đắn phép toán, hiển nhiên bạn thay đổi cách độc lập vùng hình thang, ví nh làm cho nhỏ chắn kết xác nhiều
Hàm quadquadquadquad quad8 quad8 quad8 quad8 hàm có cách tính nh− Sự định giá hai hàm cần thiết để đạt kết xác Hơn độ xấp xỉ chúng cao so với hình thang đơn, với quad8quad8quad8quad8 có kết xác quadquadquadquad Các hàm đ−ợc gọi giống nh− gọi fzerofzerofzerofzero:
>> area = quad('humps',-1,2) % find area between -1 and area =
26.3450
>> area = quad8('humps',-1,2) area =
26.3450
Để biết thêm chi tiết hàm , bạn hÃy xem hệ trợ giúp MATLAB 16.5 PhÐp lÊy vi ph©n
16.5 PhÐp lÊy vi ph©n 16.5 PhÐp lÊy vi ph©n 16.5 PhÐp lÊy vi ph©n
So sánh với phép lấy tích phân, ta thấy phép lấy vi phân khó nhiều Phép lấy tích phân cho vùng đặc tính vĩ mơ hàm phép lấy vi phân lấy điểm đấy, hay cịn gọi đặc tính vi mơ hàm Kết phép tính vi phân khơng ổn định đặc tính hình thay đổi phép tính tích phân chịu ảnh h-−ởng
Bởi phép tính tích phân khó nên ng−ời ta cố tránh phép tính mà thực đ−ợc, đặc biệt liệu lấy tích phân kết thực nghiệm Ví dụ, xem xét ví dụ làm trơn hình ch−ơng 15:
>> x = [0 1];
>> y = [-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; % data >> n = 2; % order of fit
>> p = polyfit(x,y,n) % find polynomial coefficients p =
-9.8108 20.1293 -0.0317 >> xi = linspace(0,1,100);
>> z = polyval(p,xi); % evaluate polynomial >> plot(x,y,'o',x,y,xi,z,':')
>> xlabel('x'),ylabel('y=f(x)')
>> title('Second Order Curve Fitting')
Vi phân tr−ờng hợp đ−ợc sử dụng cách sử dụng hàm đạo hàm polyder:polyder:polyder:polyder:
>> pd = polyder(p) pd =
-19.6217 20.1293
Vi phân đa thứcy=-9.8108x2+20.1293x-0.0317làdx/dy= -19.6217x+20.1293 Bởi đạo
(119)>> z = polyval(pd,xi); % evaluate derivative >> plot(xi,z)
>> xlabel('x'),ylabel('dy/dx')
>> title('Derivative of a Curve Fit Polynomial')
H×nh 16.6 H×nh 16.6 H×nh 16.6 H×nh 16.6
H×nh 16.7 H×nh 16.7 H×nh 16.7 H×nh 16.7
Trong tr−ờng hợp xấp xỉ đa thức hàm bậc hai đạo hàm trở thành hàm bậc
(120)nên đạo hàm hàm f(x) đ−ợc tính cách sơ dựa vào công thức: h>0
Gọi số y chia cho số x, hàm diff diff diff diff tính tốn khác phần tử mảng nên đạo hàm đ−ợc tính cách xấp xỉ dựa vào hàm diffdiffdiffdiff:
>> dy = diff(y)./diff(x);
>> % compute differences and use array division >> xd = x(1:length(x)-1);
>> % create new x axis array since dy is shorter than y >> plot(xd,dy)
>> title('Approximate Derivative Using DIFF') >> ylabel('dy/dx'),xlabel('x')
H×nh 16.8 H×nh 16.8 H×nh 16.8 H×nh 16.8
Do hàm diffdiffdiffdiff tính khác phần tử nên kết ví dụ mảng có số phần tử mảng ban đầu phần tử Vì để vẽ đ−ợc đồ thị đạo hàm phải bỏ phần tử mảng x So sáng hai đồ thị cuối thấy hiển nhiên đạo hàm tính phơng pháp gần khác xa so với thực tế
16.6 Ph 16.6 Ph 16.6 Ph
16.6 Phơng trình vi phânơng trình vi phânơng trình vi phân ơng trình vi phân
Có thể bạn quen với thực tế nhiều hệ thống vật lý đ−ợc mơ tả ph-−ơng trình vi phân Do phần sau bạn hấp dẫn
Một ph−ơng trình vi phân th−ờng mô tả tốc độ thay đổi biến số hệ thống theo thay đổi biến khác hệ thống theo kích thích bên ngồi Ph−ơng trình vi phân thơng th−ờng đ−ợc giải nhờ ph−ơng pháp giải tích sử dụng cơng cụ tốn kí hiệu MATLAB
(121)Tất ph−ơng pháp toán học để giải ph−ơng trình dạng sử dụng ph−ơng trình vi phân cao cấp hơn, t−ơng đ−ơng với tập ph−ơng trình vi phân bậc Đối với ph−ơng trình vi phân cách giải đ−ợc thực cách định nghĩa hai biến trung gian:
đặt y1 = x, y2 = suy ra:
Đối với hệ ph−ơng trình nh− MATLAB cung cấp tập hàm ODE để giải xấp xỉ hoá chúng cách số học Trong h−ớng dẫn khơng có khả để nêu hết nội dung ứng dụng hàm ODE Để tìm hiểu thêm hàmm ODE ứng dụng nhiều tốn thí dụ, gõ >> odedemo dấu nhắc MATLAB Tr−ớc hết xét ví dụ sau đây, ví dụ ode45ode45ode45ode45 Chúng ta phải viết hàm M_file trả đạo hàm biết tr−ớc giá trị tức thời y1 y2 Trong MATLAB đạo hàm đ−ợc cho vector cột, tr−ờng hợp gọi yprimeyprimeyprimeyprime T−ơng tự y1 y2 đợc viết d−ới dạng vector cột y Kết hàm M_file nh− sau:
function yprime=vdpol(t,y);
% VDPOL(t,y) returns the state derivatives of % the Van der Pol equation:
%
% x''-mu*(1-x^2)*x+x=0 %
% let y(1)=x and y(2)=x' %
% then y(1)'=y(2)
% y(2)'=mu*(1-y(1)^2)*y(2)-y(1)
mu=2; % choose 0< mu < 10 yprime=[y(2)
mu*(1-y(1)^2)*y(2)-y(1)]; % output must be a column
Giả sử thời gian kéo dài từ đến 30 giây, ví dụ tspan=[0 30] Sau sử dụng lệnh vdpolvdpolvdpolvdpol lời giải cho toán nh− sau:
>> tspan = [0 30]; >> yo = [1;0];
>> ode45('vdpol',tspan,yo);
Khi sử dụng hàm mà khơng có đối số ra, hàm ODE tự động chọn thời điểm thích hợp để tính đạo hàm Để truy nhập đ−ợc liệu, ta cần cung cấp cho hàm thông số
>> [t,y] = ode45('vdpol',tspan,yo);
t vector cột chứa thời điểm để tính đạo hàm, cịn y ma trận chứa hai cột hàng length(t), hàng ma trận y chứa biến số y(1), hàng thứ hai biến số y(2)
Dựa vào đặc điểm vẽ đ−ợc đồ thị pha, đồ thị y(2) y(1):
>> plot(y(:,1),y(:,2)) 051 01 52 02 530
-4-3-2
-101
23
4
H×nh H×nh H×nh
H×nh 16.916.916.916.9
Các hàm ODE MATLAB có trợ giúp trực tuyến, hàm có đối số nh− cách sử dụng riêng, bạn muốn nghiên cứu thêm tham khảo thêm phần trợ giúp trực tuyến chúng
-3-2-10123
-4-3-2
-10
12
(122)H×nh 16.10 H×nh 16.10 H×nh 16.10 H×nh 16.10
ch−¬ng 17
đồ hoạ hệ toạ độ phẳng
Trong toàn phần h−ớng dẫn sử dụng sách này, số đặc tính đồ hoạ MATLAB lần l−ợt đ−ợc giới thiệu, ch−ơng ch−ơng làm sáng tỏ thêm đặc tính MATLAB
17.1 Sư dơng lƯnh Plot 17.1 Sư dơng lƯnh Plot 17.1 Sư dơng lƯnh Plot 17.1 Sư dơng lƯnh Plot
Nh− bạn thấy ví dụ tr−ớc đó, phần lớn câu lệnh để vẽ đồ thị mặt phẳng lệnh plotplotplotplot.Lệnh plot plot plot plot vẽ đồ thị mảng liệu hệ trục thích hợp, nối điểm đ−ờng thẳng D−ới ví dụ mà bạn thấy tr−ớc (Hình 17.1):
>> x = linspace(0,2*pi,30); >> y = sin(x);
>> plot(x,y)
Ví dụ tạo 30 điểm liệu đoạn x theo chiều ngang đồ thị, tạo vector y khác hàm sine liệu chứa x Lệnh plotplotplotplot mở cửa sổ đồ hoạ gọi cửa sổ figurefigurefigure, cửa sổ tạo độ chia phù hợp với liệu, vẽ đồ thị qua figure điểm, đồ thị đ−ợc tạo thành việc nối điểm đ−ờng nét liền Các thang chia số dấu đ−ợc tự động cập nhật vào, nh−
cửa sổ figurefigurefigure tồn tại,figure plot plot plot plot xoá cửa sổ thời thay vào cửa sổ
H×nh 17.1 H×nh 17.1 H×nh 17.1 H×nh 17.1
Bây vẽ hàm sine cosine đồ thị >> z = cos(x);
(123)
H×nh 17.2 H×nh 17.2 H×nh 17.2 H×nh 17.2
Ví dụ cho thấy bạn vẽ nhiều đồ thị hình vẽ, bạn việc đa thêm vào plot plot plot plot cặp đối số, plot plot plot plot tự động vẽ đồ thị thứ hai màu khác hình Nhiều đ−ờng cong vẽ lúc nh− bạn cung cấp đủ cặp đối số cho lệnh plotplotplotplot
Nếu nh− đối số ma trận đối số cịn lại vector, lệnh plotplotplotplot vẽ t−-ơng ứng cột ma trận với vector đó:
(124)H×nh 17.3
Nếu nh− bạn thay đổi trật tự đối số đồ thị xoay góc 90 độ >> plot(W,x)
H×nh 17.4 H×nh 17.4 H×nh 17.4 H×nh 17.4
Nếu lệnh plotplotplotplot đ−ợc gọi mà có đối số, ví nh plot(Y)plot(Y)plot(Y)plot(Y) hàm plotplotplotplot đa kết khác, phụ thuộc vào liệu chứa Y Nếu giá trị Y số phức, Plot(Y)Plot(Y)Plot(Y)Plot(Y) t-−ơng đt-−ơng với plot ( real(Y ) )plot ( real(Y ) )plot ( real(Y ) )plot ( real(Y ) ) plot ( imag(Y ) )plot ( imag(Y ) )plot ( imag(Y ) )plot ( imag(Y ) ), tất tr−ờng hợp khác phần ảo Y th−ờng đ−ợc bỏ qua Mặt khác Y phần thực plot(Y)plot(Y)plot(Y)plot(Y) t−ơng ứng với
plot( plot( plot(
plot(1:length(Y), Y)1:length(Y), Y)1:length(Y), Y)1:length(Y), Y) 17.2 KiĨu ®
17.2 KiĨu ® 17.2 KiĨu ®
17.2 KiĨu ®−êng, dÊu vµ mµu−êng, dÊu vµ mµu−êng, dÊu vµ mµu−êng, dÊu vµ mµu
Trong ví dụ tr−ớc, MATLAB chọn kiểu nét vẽ solidsolidsolidsolid màu blueblueblueblue greengreengreengreen cho đồ thị Ngồi bạn khai báo kiểu màu, nét vẽ riêng bạn việc đa vào plotplotplotplot đối số thứ sau cặp liệu mảng Các đối số tuỳ chọn xâu kí tự, chứa nhiều theo bảng d−ới đây:
Ký hiƯu Mµu Ký hiƯu KiĨu nÐt vÏ Ký hiÖu ý nghÜa
b xanh da trời - nét liền s vuông
g xanh : đờng chấm d diamond
r - đ−ờng gạch
chÊm v triangle(down)
c xanh x¸m đờng gạch
gạch
^ triangle(up)
m đỏ tím O đ−ờng o < triangle(left)
(125)k ®en + ®−êng dÊu + p pentagram
w trắng * đờng hình * h hexagram
Nếu bạn khơng khai báo màu MATLAB chọn màu mặc định blueblueblueblue Kiểu đ−ờng mặc định kiểu solidsolidsolid trừ bạn khai báo kiểu đ−ờng khác Cịn dấu, khơng có dấu solid đ−ợc chọn khơng có kiểu dấu đ−ợc vẽ
Nếu màu, dấu, kiểu đ−ờng tất chứa xâu, kiểu màu chung cho dấu kiểu nét vẽ Để khai báo màu khác cho dấu, bạn phải vẽ liệu với kiểu khai báo chuỗi khác D−ới ví dụ sử dụng kiểu đ−ờng, màu, dấu vẽ khác nhau:
>> plot(x,y,' b:p',x,z,' c-',x,z,' m+')
Hình 17.5a Hình 17.5a Hình 17.5a Hình 17.5a 17.3 Kiểu đồ thị
17.3 Kiểu đồ thị 17.3 Kiểu đồ thị 17.3 Kiểu đồ thị
Lệnh colordefcolordefcolordefcolordef cho phép bạn lựa chọn kiểu hiển thị Giá trị mặc định colordefcolordefcolordefcolordef
white white white
white Kiểu sử dụng trục toạ độ, màu nền, nên hình vẽ màu xám sáng, tên tiêu đề trục màu đen Nếu bạn thích màu đen, bạn dùng lệnh colordef blackcolordef blackcolordef blackcolordef black Kiểu cho ta trục toạ độ đen, hình vẽ màu tối xám, tiêu đề trục mu trng 17.4 th l
17.4 Đồ thị l 17.4 Đồ thị l
17.4 Đồ thị lới, hộp chứa trục, nhÃn, lời giảiới, hộp chứa trục, nhÃn, lời giảiới, hộp chứa trục, nhÃn, lời giảiới, hộp chứa trục, nhÃn, lời chó gi¶i
Lệnh grid ongrid ongrid ongrid on thêm đ−ờng lới vào đồ thị Lệnh grid offgrid offgrid offgrid off bỏ nét này, lệnh
grid grid grid
grid mà tham số kèm theo xen kẽ chế độ onononon offoffoffoff MATLAB khởi tạo với
grid off grid off grid off
grid off Thơng th−ờng trục toạ độ có nét gần kiểu solidsolidsolidsolid nên gọi hộp chứa trục Hộp tắt với box offbox offbox offbox off và và box onbox onbox onbox on khơi phục lại Trục đứng trục ngang có nhãn với lệnh xlabelxlabel xlabelxlabel ylabelylabelylabelylabel Lệnh titletitletitletitle thêm vào đồ thị tiêu đề đỉnh Dùng hàm sinesinesinesine
cosine cosine cosine
(126)>> x = linspace(0,2*pi,30); >> y = sin(x);
>> z = cos(x); >> plot(x,y,x,z)
H×nh 17.5b H×nh 17.5b H×nh 17.5b H×nh 17.5b >> box off
(127)H×nh 17.6
Bạn thêm nhãn chuỗi kí tự vào vị trí cách sử dụng lệnh text text text text Cú pháp lệnh : text (x, y,string)text (x, y,string)text (x, y,string)text (x, y,string) x, y toạ độ tâm bên trái chuỗi văn Để thêm nhãn vào hình sinesinesinesine vị trí (2.5, 0.7) nh− sau:
>> grid on, box on >> text(2.5,0.7,'sin(x)')
Nếu bạn muốn thêm nhãn mà khơng muốn bỏ hình vẽ khỏi hệ trục xét, bạn thêm chuỗi văn cách di chuột đến vị trí mong muốn Lệnh gtextgtextgtextgtext thực việc
VÝ dơ (H×nh 17.8): >> gtext('cos(x)')
H×nh 17.7
(128)Hình 17.8 Hình 17.8 Hình 17.8 Hình 17.8 17.5 Kiến tạo hệ trục toạ độ
17.5 Kiến tạo hệ trục toạ độ 17.5 Kiến tạo hệ trục toạ độ 17.5 Kiến tạo hệ trục toạ độ
MATLAB cung cấp cho bạn cơng cụ kiểm sốt hồn tồn hình dáng thang chia hai trục đứng ngang với lệnh axisaxisaxisaxis Do lệnh có nhiều yếu tố, nên số dạng hay dùng đ−ợc đề cập Để biết cách đầy đủ lệnh axisaxisaxisaxis, bạn xem hệ trợ giúp help help help MATLAB help tham khảo khác Các đặc tính lệnh axisaxisaxisaxis c cho bng di õy:
Lệnh Mô tả
axis([xmin xmax ymin ymax]) đợc đa vector hàng
Thiết lập giá trị min,max hệ trục dùng giá trị
V=axis V l mt vector cột có chứa thang chia cho đồ thị tại:
[xmin xmax ymin ymax]
axis auto Trả lại giá trị mặc định thang chia axis(‘auto‘) xmin = min(x), xmax = max(x), v.v axismanual Giới hạn thang chia nh thang chia
axis xy Sử dụng (mặc định ) hệ toạ độ decac gốc toạ độ
Góc góc thấp bên trái, trục ngang tăng từ trái qua phải, trục đứng tăng từ d−ới lên
axis ij Sử dụng hệ toạ độ ma trận, gốc toạ độ đỉnh góc trái, trục đứng tăng từ đỉnh xuống, trục ngang tăng từ trái qua phải
(129)ch÷ nhËt
axisequal Thiết lập thang chia giống cho hai hệ trục axis tightequal T−ơng tự nh axis equal nh−ng hộp đồ thị vừa đủ đối
với liêu
axis normal Tt i ch độ axis equal, equal, tight vis3d
axis off Tắt bỏ chế độ trục, nhãn, lới, hộp, dấu Thoát khỏi chế độ lệnh title lệnh label
thay bëi lƯnh text vµ gtext axison Ngợc lại với axis off chúng cã thÓ
Thử kiểm nghiệm số lệnh axisaxisaxisaxis cho đồ thị bạn, sử dụng ví dụ tr−ớc cho ta kết nh− sau:
>> axis off % bỏ trục toạ độ
H×nh 17.9
(130)
H×nh 17.10 H×nh 17.10 H×nh 17.10 H×nh 17.10
>>axis ij % turn the plot upside-down
H×nh 17.11 H×nh 17.11 H×nh 17.11 H×nh 17.11
(131)H×nh 17.12 H×nh 17.12 H×nh 17.12 H×nh 17.12
>> axis xy normal % return to the defaults
H×nh 17.13 17
17 17
(132)
Để in hình mà bạn vừa vẽ hình ch−ơng trình MATLAB mà bạn cần, bạn dùng lệnh in từ bảng chọn đánh lệnh in vào từ cửa sổ lệnh:
+) In lệnh từ bảng chọn: Tr−ớc tiên ta phải chọn cửa sổ hình cử sổ hoạt động cách nhấn chuột lên nó, sau bạn chọn mục bảng chọn PrintPrintPrint từ bảng chọn filePrint filefile Dùng file thông số tạo lên mục bảng chọn Print SetupPrint SetupPrint SetupPrint Setup Page SetupPage SetupPage SetupPage Setup, đồ thị bạn đ−ợc gửi máy in
+) In lệnh từ cửa sổ lệnh: Tr−ớc tiên bạn phải chọn cửa sổ hình làm cửa sổ hoạt động cách nhấn chuột lên dùng lệnh figure(n)figure(n)figure(n)figure(n), sau bạn dùng lệnh in >> print % prints the current plot to your printer
Lệnh orientorientorientorient thay đổi kiểu in: Kiểu mặc định kiểu popopoportraitrtraitrtraitrtrait, in theo chiều đứng, trang Kiểu in landscape landscape landscape landscape kiểu in ngang kín tồn trang Kiểu in talltalltalltall kiểu in đứng nh−ng kín tồn trang Để thay đổi kiểu in khác với kiểu mặc định, bạn dùng lệnh
orient orient orient
orient với thông số nh sau: >> orient % What is the current orientation ans=
portrait
>> orient landscape % print sideways on the page >> orient tall % stretch to fill the vertical page
Nếu bạn muốn tìm hiểu kỹ chúng hÃy xem trợ giúp trực tun vỊ chóng
17.7 17.7 17.7
17.7 Thao tác vớThao tác vớThao tác vớThao tác với đồ thịi đồ thịi đồ thị i đồ thị
Bạn thêm nét vẽ vào đồ thị có sẵn cách dùng lệnh hold hold hold hold Khi bạn thiết lập
hold on hold on hold on
hold on, MATLAB không bỏ hệ trục tồn lệnh plotplotplotplot thực hiện, thay vào đó, thêm dờng cong vào hệ trục Tuy nhiên nh− liệu không phù hợp với hệ trục toạ độ cũ, trục đ−ợc chia lại Thiết lập hold offhold offhold offhold off bỏ cửa sổ figurefigurefigurefigure thay vào đồ thị Lệnh holdholdholdhold mà khơng có đối số bật tắt chức chế độ thiết lập holdholdholdhold tr−ớc Trở lại với ví dụ tr−ớc:
>> x = linspace(0,2*pi,30); >> y = sin(x);
>> z = cos(x); >> plot(x,y)
(133)Bây giữ nguyên đồ thị thêm vào đ−ờng cosine >> hold on %Giữ nguyên đồ thị vẽ lúc tr−ớc
>> ishold % hàm logic trả giá trị (true) hold trạng thái ON ans =
>> plot(x,z,'m') >> hold off
>> ishold % hold không trạng thái ON ans =
Chỳ ý để kiểm tra trạng thái holdholdholdhold ta dùng hàm isholdisholdisholdishold
H×nh 17.15 H×nh 17.15 H×nh 17.15 H×nh 17.15
Nếu bạn muốn hai hay nhiều đồ thị cửa sổ figurefigurefigurefigure khác nhau, dùng lệnh
figure figure figure
figure cưa sỉ lƯnh hc chän new figurenew figurenew figurenew figure tõ b¶ng chän file, file, file, file, figurefigurefigurefigure tham số tạo figurefigurefigurefigure Bạn chọn kiểu figurefigurefigurefigure cách dùng cht hc dïng lƯnh
figure(n) figure(n) figure(n)
figure(n) n số cửa sổ hoạt hoạt động
Mặt khác cửa sổ figurefigurefigure chøa nhiỊu h¬n mét hƯ trơc LƯnh figure subplot(m,n,p)subplot(m,n,p)subplot(m,n,p)subplot(m,n,p)
chia cửa sổ thành ma trận mxn khoảng để vẽ đồ thị, chọn p cửa sổ hoạt động Các đồ thị thành phần đ−ợc đánh số từ trái qua phải, từ xuống d−ới, sau đến hàng thứ hai v.v Ví dụ:
>> x = linspace(0,2*pi,30); >> y = sin(x);
>> z = cos(x);
>> a = 2*sin(x).*cos(x); >> b = sin(x)./(cos(x)+eps);
>> subplot(2,2,1) % pick the upper left of % by grid of subplots >> plot(x,y),axis([0 2*pi -1 1]),title('sin(x)')
>> subplot(2,2,2) % pick the upper right of the subplots >> plot(x,z),axis([0 2*pi -1 1]),title('cos(x)')
>> plot(x,z),axis([0 2*pi -1 1]),title('cos(x)')
(134)>> plot(x,a),axis([0 2*pi -1 1]),title('2sin(x)cos(x)')
>> subplot(2,2,4)%pick the lowwer right of the subplots >> plot(x,b),axis([0 2*pi -20 20]),title('sin(x)/cos(x)')
Hình 17.6 Hình 17.6 Hình 17.6 Hình 17.6 17.8 Một số đặc điểm khác
17.8 Một số đặc điểm khác 17.8 Một số đặc điểm khác
17.8 Một số đặc điểm khác đồ thị hệ toạ độ phẳng đồ thị hệ toạ độ phẳng đồ thị hệ toạ độ phẳng đồ thị hệ toạ phng
ã loglogloglogloglogloglog tơng tự nh plotplotplotplot ngoại trừ thang chia logarithm logarithm logarithm logarithm cho hai trục
ã semilogxsemilogxsemilogxsemilogx tơng tự nh plot plot plot plot ngo¹i trõ thang chia cđa trơc x logarithm logarithm logarithm logarithm thang chia trục y tuyến tính
ã semologysemologysemologysemology tơng tự nh plotplotplotplot ngoại trừ thang chia trục y logarithm logarithm logarithm logarithm, thang chia trục x tuyến tÝnh
• area( x, y )area( x, y )area( x, y )area( x, y ) t−ơng tự nh− plot (x,y)plot (x,y)plot (x,y)plot (x,y) ngoại trừ khoảng cách y đ−ợc điền đầy, giá trị y đ−ợc khai báo, nh−ng mặc định khơng
• Sơ đồ hình múi tiêu chuẩn đ−ợc tạo thành từ lệnh pie(a, b)pie(a, b)pie(a, b)pie(a, b), a vector giá trị b vector logic tuỳ chọn Ví dụ:
>> a = [.5 1.6 1.2 2.1]; >> pie(a,a==max(a));
(135)H×nh 17.7
H×nh 17.7 H×nh 17.7 H×nh 17.7
• Một cách khác để quan sát liệu biêu đồ ParetoParetoParetoPareto, giá trị vector đ−ợc vẽ thành khối chữ nhật Ví dụ dùng vector a nói trên:
>> pareto(a);
>> title('Example Pareto Chart')
H×nh 17.18 Hình 17.18 Hình 17.18 Hình 17.18
ã ụi bạn muốn vẽ hai hàm khác hệ trục mà lại sử dụng thang chia khác nhau, plotyyplotyyplotyyplotyy làm điều cho bạn:
>> x = -2*pi:pi/10:2*pi; >> y = sin(x);z = 2*cos(x); >> subplot(2,1,1),plot(x,y,x,z),
>> title('Two Plots on the same scale'); >> subplot(2,1,2),plotyy(x,y,x,z)
(136)H×nh 17.19 H×nh 17.19 Hình 17.19 Hình 17.19
ã Đồ thị bar bar bar bar vµ stair stair stair cã thĨ sinh bëi viƯc dïng lƯnh stair barbarbarbar, bar3bar3bar3bar3, barhbarhbarhbarh vµ stairsstairsstairsstairs Dới ví dụ:
>> x = -2.9:0.2:2.9; >> y = exp(-x.*x); >> subplot(2,2,1) >> bar(x,y)
>> title('Bar chart of bell Curve') >> subplot(2,2,2)
>> bar3(x,y)
>> title('3-D Bar Chart of a Bell Cuve') >> subplot(2,2,3)
>> stairs(x,y)
>> title('Stair Chart of a Bell Curve') >> subplot(2,2,4)
>> barh(x,y)
(137)H×nh 17.20 H×nh 17.20 H×nh 17.20 H×nh 17.20
• rose(V)rose(V)rose(V)rose(V) vẽ biểu đồ toạ độ cực cho góc vector v, t−ơng tự ta có
lệnh rose(v,n)rose(v,n)rose(v,n)rose(v,n) rose(v,x)rose(v,x)rose(v,x)rose(v,x) x vector D−ới ví dụ: >> v = randn(100,1)*pi;
>> rose(v)
>> title('Angle Histogram of Random Angle')
H×nh 17.21 H×nh 17.21 H×nh 17.21 H×nh 17.21
(138)chơng 18
Đồ hoạ
trong kh«ng gian chiỊu
MATLAB cung cấp số hàm để hiển thị liệu chiều nh− hàm vẽ đ−ờng thẳng không gian chiều, hàm vẽ bề mặt và khung dây màu đ−ợc sử dụng thay cho chiu th t
18.1 Đồ thị đ 18.1 Đồ thị đ 18.1 Đồ thị đ
18.1 Đồ thị đờng thẳng.ờng thẳng.ờng thẳng ờng thẳng
LƯnh plotplotplotplot tõ kh«ng gian hai chiỊu cã thĨ më réng cho kh«ng gian chiỊu b»ng lƯnh plot3plot3plot3plot3 Khuôn dạng plot3plot3plot3plot3 nh sau:
plot3 ( x1, y1, z1, S1, x2, y2, z2, S2, ) plot3 ( x1, y1, z1, S1, x2, y2, z2, S2, ) plot3 ( x1, y1, z1, S1, x2, y2, z2, S2, )
plot3 ( x1, y1, z1, S1, x2, y2, z2, S2, ), xn, yn zn vector ma trận, Sn xâu kí tự tuỳ chọn dùng cho việc khai báo màu, tạo biểu t−ợng kiểu đ−ờng Sau số ví dụ:
>> t = linspace (0, 10*pi); >> plot3(sin(t),cos(t),t)
>> title ('Helix'),xlabel('sin(t)') >> ylabel('cos(t)'),zlabel('t')
H×nh 18.1
Chú ý rằng: hàm zlabelzlabelzlabelzlabel tơng ứng với hàm hai chiều xlabelxlabelxlabelxlabel ylabelylabelylabelylabel Tơng tự nh vậy, lệnh axisaxisaxisaxis có khuôn dạng: axis ( [xmin xmax ymin ymax zmin zmax ] )axis ( [xmin xmax ymin ymax zmin zmax ] )axis ( [xmin xmax ymin ymax zmin zmax ] )axis ( [xmin xmax ymin ymax zmin zmax ] ) thiết lập giới hạn cho trục VÝ dơ :
(139)H×nh 18.2
Hàm text text text text có khn mẫu nh− sau: : : : text ( x, y, z, string )text ( x, y, z, string )text ( x, y, z, string )text ( x, y, z, string ) đặt vị trí xâu ‘string ‘ vào toạ x, y, z
18.2 Đồ thị bề mặt l 18.2 Đồ thị bề mặt l 18.2 Đồ thị bề mặt l 18.2 Đồ thị bề mặt lớiớiớiới
MATLAB định nghĩa bề mặt l−ới điểm theo h−ớng trục z đ−ờng kẻ hình vng mặt phẳng x-y Nó tạo lên mẫu đồ thị cách ghép điểm gần kề với đ−ờng thẳng Kết trơng nh− mạng l−ới đánh cá với mắt l−ới điểm liệu Đồ thị l−ới th−ờng đ−ợc sử dụng để quan sát ma trận lớn vẽ hàm có hai biến
B−ớc đa đồ thị l−ới hàm hai biến z = f (x, y ), t−ơng ứng với ma trận X Y chứa hàng cột lặp lặp lại MATLAB cung cấp hàm meshgridmeshgridmeshgridmeshgrid cho mục đích [ X, Y ] = meshgridmeshgridmeshgridmeshgrid(x, y ), tạo ma trận X, mà hàng vector x, ma trận Y có cột vector y Cặp ma trận sau đ−ợc sử dụng để −ớc l−ợng hàm hai biến sử dùng đặc tính tốn học mảng MATLAB
Sau ví dụ cách dïng hµm meshgrid.meshgrid.meshgrid.meshgrid
>> x = -7.5:.5:7.5; >> y = x;
>> [X,Y] = meshgrid(x,y);
X, Y cặp ma trận tơng ứng lới chữ nhật mặt phẳng x-y Mọi hàm z=f(x,y) cã thĨ sư dơng tÝnh chÊt nµy
>> R = sqrt(X.^2+Y.^2)+eps;
(140)Ma trận R chứa bán kính điểm [X,Y], khoảng cách từ điểm đến tâm ma trận Cộng thêm epsepsepseps để không để xảy phép chia cho Ma trận Z chứa sine bán kính chia cho bán kính điểm sơ đồ Câu lệnh sau vẽ đồ thị l−ới:
>> mesh(X,Y,Z)
H×nh 18.3 H×nh 18.3 H×nh 18.3 H×nh 18.3
Đồ thị đơn sắc Tuy nhiên bạn thay đổi màu sắc với trợ giúp MATLAB rễ dàng bạn đọc đến phần colormaps colormaps colormaps colormaps
Trong ví dụ này, hàm meshmeshmeshmesh xắp xếp giá trị phần tử ma trận vào điểm (Xị,Yị,Zị) không gian ba chiều meshmeshmeshmesh vẽ ma trận đơn t−ơng tự nh-− với đối số; mesh(Z)mesh(Z)mesh(Z)mesh(Z), sử dụng điểm (i,j,Zị) Nh− Z đ−ợc vẽ ng−ợc lại với số nó, tr−ờng hợp mesh(Z)mesh(Z)mesh(Z)mesh(Z) đơn giản chia lại độ khắc trục x, y theo số ma trận Z Bạn thử tạo ví dụ cho tr−ờng hợp này?
Đồ thị bề mặt ma trận Z trông nh− đồ thị l−ới tr−ớc đó, ngoại trừ khoảng cách hai đ−ờng khác (gọi patchs)patchs)patchs)patchs) Đồ thị loại dùng hàm surf,surf,surf,surf, có tất đối số nh− hàm meshmeshmeshmesh Hãy xem ví dụ d−ới (Hình 18.4):
(141)H×nh 18.4 H×nh 18.4 H×nh 18.4 H×nh 18.4
Để làm rõ thêm vài chủ đề, quay lại hàm peakspeakspeakspeaks đa phần tr-−ớc Đồ thị l−ới không gian chiều hàm đ−ợc đ−a nh− sau (hình 18.5): >> mesh(peaks)
>> title('Mesh Plot of Peaks function')
H×nh 18.5 H×nh 18.5 H×nh 18.5 H×nh 18.5
(142)18.3 Thao t 18.3 Thao t 18.3 Thao t
18.3 Thao tác với đồ thịác với đồ thịác với đồ thịác với đồ thị
MATLAB cho phép bạn khai báo góc để từ quan sát đ−ợc đồ thị không gian ba chiều Hàm view(azimuth, elevation ) view(azimuth, elevation ) view(azimuth, elevation ) view(azimuth, elevation ) thiết lập góc xem việc khai báo azimuthazimuthazimuthazimuth
elevation elevation elevation
elevation ‘ElevationElevationElevation ‘ mơ tả vị trí ng−ời quan sát, xem nh− góc đo độ hệ trục Elevation x-y ‘Azimut Azimut Azimut Azimut mơ tả góc hệ trục nơi ng−ời quan sát đứng
Azimuth Azimuth Azimuth
Azimuth đ−ợc đo độ từ phần âm trục y Phía âm trục y quay theo chiều kim đồng hồ góc -37.5 độ từ phía bạn ElevationElevationElevationElevation góc mà mắt bạn thấy đ−ợc mặt phẳng x-y Sử dụng hàm viewviewviewview cho phép bạn quan sát hình vẽ từ góc độ khác Ví dụ elevationelevationelevationelevation thiết lập âm, viewviewviewview nhìn hình từ phía d−ới lên Nếu azimuthazimuthazimuthazimuth
thiết lập d−ơng, hình quay ng−ợc chiều kim đồng hồ từ điểm nhìn mặc định.Thậm chí bạn nhìn trực tiếp từ cách thiết lập view(0,90 )view(0,90 )view(0,90 )view(0,90 ) Thực điểm nhìn mặc định chiều, x tăng từ trái qua phải, y tăng từ xuống d−ới, khuôn dạng
view(2) view(2) view(2)
view(2) hoµn toµn gièng nh− mỈc
định view(0, 90 )view(0, 90 )view(0, 90 )view(0, 90 ), view(3)view(3)view(3)view(3) thiết lập mặc định khơng gian chiều
Lệnh viewviewviewview có dạng khác mà tiện ích sử dụng view([X,Y,Z ])view([X,Y,Z ])view([X,Y,Z ])view([X,Y,Z ]) cho phép bạn quan sát vector chứa hệ trục toạ độ decac khơng gian chiều Khoảng cách từ vị trí bạn quan sát đến gốc toạ độ không bị ảnh h−ởng Ví dụ, view([0 10 ])view([0 10 ])view([0 10 ])view([0 10 ]), view([0 view([0 view([0 view([0 1 1 ])
0 ]) ])
0 ]) vµ view(0, )view(0, )view(0, )view(0, ) cho kết nh Các thông số azimuthazimuthazimuthazimuth elevationelevationelevationelevation mà bạn quan sát lấy lại đợc cách dïng [az, e] = [az, e] = [az, e] = [az, e] = viewviewviewview VÝdô:
>> view([-7 -9 7]) >> [az,el] = view az =
-37.8750 el =
31.5475
Một công cụ hữu dụng khác quan sát đồ thị không gian chiều hàm rotate3d rotate3d rotate3d rotate3d Các thơng số AzimtuhAzimtuhAzimtuhAzimtuh elevationelevationelevationelevation đ−ợc tác động chuột, rotate3drotate3d onrotate3drotate3d on on on cho phép chuột can thiệp, rotate3d offrotate3d offrotate3d offrotate3d off không cho phép
Lệnh hiddenhiddenhiddenhidden dấu nét khuất Khi bạn vẽ đồ thị, số phần bị che khuất phần khác, dùng lệnh nét khuất bị dấu đi, bạn nhìn phần tầm nhìn bạn Nếu bạn chuyển đến hidden offhidden offhidden offhidden off, bạn thấy phần khuất qua mạng l−ới D−ới ví dụ:
>> mesh(peaks(20)+7) >> hold on
>> pcolor(peaks(20)) >> hold off
(143)H×nh 18.8 H×nh 18.8 H×nh 18.8 H×nh 18.8
Bây bỏ chế độ dấu nét khuất ta thấy khác nhau: >> hidden off
>> title('Mesh with Hidden Off ')
(144)
18.4 Các đặc điểm khác đồ thị không gian chiều 18.4 Các đặc điểm khác đồ thị không gian chiều 18.4 Các đặc điểm khác đồ thị không gian chiều 18.4 Các đặc điểm khác đồ thị không gian chiều
• Hàm ribbon(x, y )ribbon(x, y )ribbon(x, y )ribbon(x, y ) t−ơng tự nh− plot(x, y )plot(x, y )plot(x, y )plot(x, y ) ngoại trừ cột y đ−ợc vẽ nh− dải riêng biệt không gian ba chiều D−ới đồ thị hình sine:
>> x=linspace(0,10,50); >> y=sin(pi*x);
>> ribbon(y,x)
H×nh 18.10 H×nh 18.10 H×nh 18.10 H×nh 18.10
• Hàm clabelclabelclabelclabel tăng thêm độ cao cho đồ thị đ−ờng viền Có ba mẫu clabel(cs)clabel(cs)clabel(cs)clabel(cs), clabel(cs, V )clabel(cs, V )clabel(cs, V )clabel(cs, V )
và clabel( cs, manual)clabel( cs, manual)clabel( cs, manual)clabel( cs, manual) clabel(cs)clabel(cs)clabel(cs)clabel(cs), cs cs cs cs cấu trúc đ−ờng viền đ−ợc trả từ lệnh
contour contourcontour
contour, cs=contour(z)cs=contour(z)cs=contour(z)cs=contour(z), lấy nhãn tất đồ thị đ−ờng viền với độ cao Vị trí nhãn đ−ợc lấy ngẫu nhiên clabel (c, manual)clabel (c, manual)clabel (c, manual)clabel (c, manual) định vị nhãn đ−ờng viền vị trí kích chuột t−ơng tự nh− lệnh ginputginputginputginput nói Nhấn phím Return Return Return kết thúc việc tạo nhãn Return
• Hàm contourfcontourfcontourfcontourf vẽ đồ thị đ−ờng viền kín, khơng gian đ−ờng viền đ−ợc lấp đầy màu
• Hai mẫu trạng thái lệnh meshmeshmeshmesh dùng với đồ thị l−ới là: meshcmeshcmeshcmeshc vẽ đồ thị l−ới thêm đ-−ờng viền bên d−ới, meshzmeshzmeshzmeshz vẽ đồ thị l−ới đồ thị có dạng nh mn che
ã Hàm waterfallwaterfallwaterfallwaterfall đợc xem nh meshmeshmeshmesh ngoại trừ điều hàm meshmeshmeshmesh xt hiƯn ë h−-íng x
(145)phần đóng góp tuỳ thuộc vào nguồn sáng bao quanh, phản chiếu ánh sáng hệ số phản chiếu (K=[ka,kd,ks,spread])
>> colormap(gray) >> surfl(peaks)
>> title('surf1 plot of peaks with default lighting')
H×nh 18.11 H×nh 18.11 H×nh 18.11 Hình 18.11
ã fill3fill3fill3fill3, phiờn bn chiều fillfillfillfill, vẽ đa giác không gian ba chiều Khn dạng tổng qt fill3(x, y, z, c)fill3(x, y, z, c)fill3(x, y, z, c)fill3(x, y, z, c), chiều đứng đa giác đ−ợc ba thành phần x, y, z Nếu c kí tự, đa giác đ−ợc lấp đầy màu nh− bảng màu c vector hàng có thành phần ([r g b]) r, g b giá trị thay cho màu đỏ, xanh xanh da trời Nếu c vector ma trận, đ−ợc sử dụng nh− số sơ đồ màu Nhiều đa giác đ−ợc tạo cách cho thêm nhiều đối số nh− fill3 (x1, y1, z1,c1, fill3 (x1, y1, z1,c1, fill3 (x1, y1, z1,c1, fill3 (x1, y1, z1,c1, x2, y2, z2, c2, ) x2, y2, z2, c2, ) x2, y2, z2, c2, ) x2, y2, z2, c2, ) Ví dụ sau vẽ ngẫu nhiên tam giác với màu:
>> color(cool)
>> fill3(rand(3,4),rand(3,4),rand(3,4),rand(3,4))
• bar3bar3bar3bar3 bar3hbar3hbar3hbar3h phiên chiều barbarbarbar v v v barhbarhbarhbarh,,,, bie3bie3bie3bie3 phiên ban pie.pie.pie.pie 18.5 Bảng màu
18.5 Bảng màu 18.5 Bảng màu 18.5 Bảng màu
(146)xanh da trời màu thành phần tạo Một số mẫu đ−ợc cho bảng d−ới đây:
§á §á §á
Đỏ Xanh câyXanh Xanh da trờiXanh câyXanh Xanh da trờiXanh da trêiXanh da trêi mµumµu mµumµu
đen trắng đỏ
xanh
xanh da trêi
vàng tím đỏ
lam x¸m -5 -5 -5 x¸m trung b×nh
-5 đỏ tối -62 -40 đỏ đồng
-49 -83 ngäc xanh biÓn
D−ới số hàm MATLAB để tạo bảng màu trên: Function
Function Function
Function M« tả bảng màuMô tả bảng màuMô tả bảng màuMô tả bảng màu
hsv Giỏ tr mu bóo hoà (HSV) hot đen-đỏ-vàng-trắng
gray xám cân tuyến tính bone xám có pha nhẹ với màu xanh copper sắc thái màu đồng
pink màu hồng nhạt nhẹ white trắng hoàn toµn
flag xen kẽ đỏ, trắng, xanh da trời, đen jet thay đổi màu bão ho
prism có màu sắc lăng kính cool mµu xanh tÝm
lines mµu cđa nÐt vÏ
summe Bóng xanh vàng autumn Bóng đỏ vàng
winter Bóng xanh xanh da trời spring Bãng cđa magenta vµ yellow
18.6 Sư dụng bảng màu 18.6 Sử dụng bảng màu 18.6 Sử dụng bảng màu 18.6 Sử dụng bảng màu
Câu lệnh colormap(M)colormap(M)colormap(M)colormap(M) cài đặt ma trận M nh bảng màu đ−ợc sử dụng hình Ví dụ: colorma colorma colorma colormap(cool)p(cool)p(cool)p(cool) cài đặt version 64 đầu vào bảng màu coolcoolcoolcool
Hàm plotplotplotplot plot3plot3plot3plot3 không dùng bảng màu trên, chúng sử dụng màu liệt kê bảng kiểu đ−ờng, điểm đánh dấu, màu plotplotplotplot Phần lớn hàm vẽ khác nh− mesh, surf, mesh, surf, mesh, surf, mesh, surf, contour, fill, pcol
contour, fill, pcol contour, fill, pcol
contour, fill, pcolorororor biến nó, sử dụng bảng màu
(147)>> [X,Y,Z]=peaks(30); >> surf(X,Y,Z,atan2(X,Y)) >> colormap(hsv),shading flat
>> axis([-3 -3 -6.5 8.1]),axis off >> title('using a color Argument to surf')
H×nh 18.12 H×nh 18.12 H×nh 18.12 H×nh 18.12
18.7 Sử dụng màu để thêm thông tin 18.7 Sử dụng màu để thêm thông tin 18.7 Sử dụng màu để thêm thông tin 18.7 Sử dụng màu để thêm thông tin
Màu đ−ợc dùng để thêm thơng tin vào đồ thị chiều đ−ợc sử dụng để tạo thành chiều thứ t− Các hàm nh− meshmeshmeshmesh surfsurfsurfsurf biến đổi màu dọc theo trục z, trừ đối số màu đ−ợc đa nh− surfsurfsurfsurf(X,Y,Z) hoàn toàn t−ơng đ−ơng với surf(X,Y,Z,t )surf(X,Y,Z,t )surf(X,Y,Z,t )surf(X,Y,Z,t ) thành phần thứ t− đ−ợc dùng nh− số biêu đồ màu Điều khiến cho đồ thị đầy màu nh−ng lại không thông tin mà trục z tồn
D−ới số cách sử dụng đối số màu để thêm thông tin nhấn mạnh thông tin tồn đồ thị
>> x=-7.5: 5:7.5; y=x % create a data set >> [X,Y]=meshgrid(x,y); %create plaid data >> R=sqrt(X.^2+Y.^2) +eps % create radial data
>> Z=sin(R)./R; % create a sombrero >> subplot(2,2,1),surf(X,Y,Z),
>> title('Color Varies with the Z_axis') >> subplot(2,2,2),surf(X,Y,Z,R),
>> title('Color Varies With the Radius') >> subplot(2,2,3),surf(X,Y,Z,del2(Z)), >> title('Color Varies with Curvature')
(148)>> dZ=sqrt(dZdx.^2+dZdy.^2) %compute the slope's manitude >> subplot(2,2,4),surf(X,Y,Z,dZ)
>> title('Color Varies With the slope Magnitude')
H×nh 18.13 H×nh 18.13 H×nh 18.13 H×nh 18.13
18.8 Hiển thị bảng màu 18.8 Hiển thị bảng màu 18.8 Hiển thị bảng màu 18.8 Hiển thị bảng màu
Bạn hiển thị bảng màu theo số cách sau Một cách xem tất phần tử trong ma trận bảng màu cách trực tiếp:
>> hot(8) ans =
0.3333 0.6667 1.0000 1.0000 0.3333 1.0000 0.6667 1.0000 1.0000 1.0000 1.0000 0.5000 1.0000 1.0000 1.0000
Thêm vào đó, hàm pcolorpcolorpcolorpcolor đ−ợc sử dụng để biểu diễn bảng màu Hãy thử ví dụ vài lần cách dùng hàm colormapcolormapcolormapcolormap khác thay đổi tham số n: >> colormap(jet(n))
>> n=8;
(149)>> pcolor([1:n+1;1 :n+1]')
>> title('using pcolor to display a colormap')
H×nh 18.4 H×nh 18.4 H×nh 18.4 H×nh 18.4
Hàm colorbarcolorbarcolorbarcolorbar thêm màu đứng màu ngang (cân chỉnh màu ) vào cửa sổ hình vẽ bạn, đ−a biểu đồ màu cho trục colorbar( h)colorbar( h)colorbar( h)colorbar( h) định vị màu ngang d−ới hình vẽ bạn colorbar( v)colorbar( v)colorbar( v)colorbar( v) định vị màu đứng bên phải hình vẽ bạn colorbarcolorbarcolorbarcolorbar khơng có đối số thêm màu ngang, màu khơng tồn cập nhật tồn
>> [X,Y,Z] = peaks; >> mesh(X,Y,Z ); >> colormap(hsv)
>> axis([-3 -3 -6 8]) >> colorbar
Hình 18.5 18.9 Thiết lập thay đổi bảng màu
(150)Thực tế colormapscolormapscolormapscolormaps ma trận, có nghĩa bạn thao tác chúng giống nh− ma trận khác Hàm brightenbrightenbrightenbrighten nhờ vào đăc điểm thay đổi colormap độ tăng giảm độ nhạy màu đậm bighten(n)bighten(n)bighten(n)bighten(n) với bighten(bighten(bighten(bighten( n)n)n)n) phục hồi colormap ban đầu Lệnh newmapnewmapnewmapnewmap=brighten(n)brighten(n)brighten(n)brighten(n) tạo màu sáng tối colormap hiên mà không làm thay đổi biêủ đồ màu Lệnh
newmap newmap newmap
newmap=brighten(cmap,n)brighten(cmap,n)brighten(cmap,n)brighten(cmap,n) điều chỉnh phiên màu đ−ợc khai báo mà không làm ảnh h−ởng đến colormapcolormapcolormapcolormap cmapcmapcmapcmap brighten(gcf, n)brighten(gcf, n)brighten(gcf, n)brighten(gcf, n) làm sáng tất đối t−ợng hình vẽ
Bạn tạo colormap riêng bạn cách đa ma trận mymapmymapmymapmymap m hàng,3 cột cài đặt với colormap(mymap) colormap(mymap) colormap(mymap) colormap(mymap) giá trị ma trận colormap phải thuộc khoảng từ đến Nếu bạn cố gắng sử dụng ma trận với nhiều cột chứa giá trị bé thua lớn hơn1 colormap đ−a thông báo lỗi
Bạn kết nối colormap theo kiểu tốn học Mặc dù kết đơi khơng thể đốn tr−ớc đ−ợc Ví dụ, biểu đồ có tên gọi pink :
>> pinkmap = sqrt (2/3*gray+1/3*hot);>> pinkmap = sqrt (2/3*gray+1/3*hot);>> pinkmap = sqrt (2/3*gray+1/3*hot);>> pinkmap = sqrt (2/3*gray+1/3*hot);
Bởi colormapcolormapcolormapcolormap ma trận, chúng đ−ợc vẽ đồ thị Lệnh rgbplotrgbplotrgbplotrgbplot vẽ đồ thị giá trị colormapcolormapcolormap t−ơng tự nh− lệnh colormap plotplotplotplot, nh−ng sử dụng màu đỏ, màu xanh xanh da trời cho nét vẽ rgbplot(gray)rgbplot(gray)rgbplot(gray)rgbplot(gray) cho biết ba màu tăng tuyến tính đồng Lệnh
rgbplot rgbplot rgbplot
rgbplot víi mét sè colormapcolormapcolormapcolormap kh¸c nh− jet jet jet jet, , , , hsvhsvhsvhsv, vµ prismprismprismprism
Giá trị cmin cmin cmin cmax cmin cmaxcmaxcmax đ−ợc trả lại caxiscaxiscaxiscaxis khơng có đối số Chúng th-−ờng giá trị lớn nhỏ liệu, caxis([cmin cmax ]) s dng colormap
colormap colormap
colormap nguyên cho liệu dải cmin cmin cmin cmin cmax, cmax, cmax, điểm liệu lớn cmax, cmax
cmax cmax
cmax sÏ bÞ chia thành màu kết hợp với cmax cmax cmax cmax Và điểm liệu có giá trị nhỏ cmin cmin cmin bị chia thành màu kết hợp với cmin Nếu cmin cmin cmincmincmin nhỏ min(data)min(data)min(data)min(data) cmax
cmax cmax
cmax lớn max(data )max(data )max(data )max(data ), màu kết hợp với cmincmincmincmin cmax cmax cmax cmax không đ−ợc sử dụng ; phần nhỏ colormapcolormapcolormapcolormap đ−ợc sử dụng caxis(auto)caxis(auto)caxis(auto)caxis(auto) hồi phục giá trị mặc định cmin cmin cmin cmin cmax.cmax.cmax.cmax
Ví dụ sau đợc minh hoạ colorplate4colorplate4colorplate4 colorplate4 >> pcolor([1:17;1:17]')
>> title('Default color range') >> colormap(hsv(8))
>> axis('auto') >> colorbar >> caxis ans =
(151)Hình 18.6
Chơng19
Mảng tế bào cấu trúc
MATLAB 5.0 giới thiệu loại liệu có tên gọi mảng tế bào cấu trúc Mảng tế bào đ−ợc xem nh− mảng số nhị phân nh− chứa l−u giữ nhiều kiểu liệu khác Cấu trúc mảng liệu h−ớng đối t−ợng xây dựng với tên tr−ờng chữa nhiều kiểu liệu khác nhau, bao gồm mảng tế bào cấu trúc khác Cấu trúc cung cấp cho ta ph−ơng tiện thuận lợi để nhóm kiểu liệu khác Những kiểu liệu này, mảng tế bào cấu trúc tạo cho bạn khả tổ chức liệu thành gói thuận tiện
19.1 M¶ 19.1 Mả 19.1 Mả
19.1 Mảng tế bàong tế bµong tÕ bµong tÕ bµo
Mảng tế bào mảng MATLAB mà phần tử tế bào Mỗi tế bào mảng tế bào chứa kiểu liệu MATLAB bao gồm mảng số, văn bản, đối t−ợng đặc tr−ng, mảng tế bào cấu trúc Ví dụ tế bào mảng tế bào mảng số, loại khác kiểu chuỗi văn bản, loại khác vector giá trị số phức Các mảng tế bào đ−ợc xây dựng với số chiều lớn 2, nhiên thuận tiện xét ng−-ời ta lấy số chiều
19.2 X©y dùng hiển thị mảng t 19.2 Xây dựng hiển thị mảng t 19.2 Xây dựng hiển thị mảng t 19.2 Xây dựng hiển thị mảng tế bàoế bµ bµo Õ bµo
Mảng tế bào đ−ợc xây dựng cách dùng câu lệnh gán, định mảng tr−ớc cách sử dụng hàm tế bào sau gán liệu cho mảng
Nh− loại mảng khác, mảng tế bào tạo cách gán liệu cho tế bào độc lập thời điểm Có hai cách khác thâm nhập vào mảng tế bào Nếu bạn sử dụng cú pháp mảng tiêu chuẩn, bạn phải để tế bào dấu ngoặc ‘{ }‘ Ví dụ:
(152)>> A(1, 2) = {2 + i};
>> A(2, 1) = {' A text string '}; >> A(2, 2,) = {12: -2 :0};
Dấu ngoặc nhọn bên phía phải dấu chØ r»ng biĨu thøc lµ mét tÕ bµo, hay gọi số tế bào Cách viết sau tơng đơng với cách viết trên:
>> A{1, } = [1 : : ]; >> A{1, } = 2+3i ;
>> A{2, } = 'A text string ' ; >> A{2, } = 12 : -2 : ;
Dấu ngoặc nhọn bên trái A mảng tế bào biểu thức đặt bên khai báo tế bào
MATLAB hiển thị mảng A nh sau: >> A
A =
[3X3 double] 2.0000+ 3.0000 i ' A text string '[1x7 double ]
§Ĩ hiĨn thị nội dung tế bào mảng tế bào ta dùng hàm celldispcelldispcelldispcelldisp, hiển thị nội dung riêng tế bào, truy nhập vào tế bào có sư dơng dÊu ngc nhän.Vi dơ : >> A{2,2}
MATLAB hiển thị sơ đồ cấu trúc đồ hoạ mảng tế bào cửa sổ việc gọi hàm cellplotcellplotcellplotcellplot
Hàm cellcellcellcell làm việc với mảng tế bào việc tạo mảng trống theo kích cỡ cđa m¶ng VÝ dơ :
>> C= cell ( 2, ) C=
[ ] [ ] [ ] [ ] [ ] [ ] 19.3 Tỉ hỵp khôi phục mả 19.3 Tổ hợp khôi phục mả 19.3 Tổ hợp khôi phục mả
19.3 Tổ hợp khôi phục mảng tế bàong tế bàong tÕ bµo ng tÕ bµo
Nếu bạn gán liệu cho tế bào ngồi số chiều có mảng MATLAB tự động mở rộng mảng điền vào ma trận số rỗng Chú ý khái niệm ‘{ }‘ thay cho ma trận tế bào rỗng ‘[ ]‘ thay cho mảng số ma trận rỗng
Sử dụng dấu móc vng để kết nối mảng tế bào: >> C= [A B]
C=
[3x3 double ] 2.0000+ 3.0000i [1x2 double] ' John Smith' 'A text string ' [1x7 double] [2.0000+3.0000i] [ ]
>> C=[A;B] C =
(153)Một tập tế bào đ−ợc tách tạo thành mảng tế bào Nếu D mảng tế bào 3x3, ng−ời ta tách để tạo thành mảng tế bào 2x2 nh− sau:
>> F = D(2:2,2:3);
Hàm reshapereshapereshapereshape đ−ợc sử dụng để thay đổi cấu hình mảng tế bào nh−ng dùng để thêm vào bớt tế bào
>> X = cells(3,4); >> size(X)
ans =
3
>> X= reshape(X,6,2); >> size(Y)
ans =
6
19.4 Truy nhËp vµ 19.4 Truy nhËp vµ 19.4 Truy nhËp vµ
19.4 Truy nhËp vµo mảng tế bàoo mảng tế bàoo mảng tế bàoo mảng tế bào
Để truy nhập liệu chứa phần tử mảng tế bào, sử dụng dấu ngoặc nhọn Dùng dấu ngoặc đơn thâm nhập phần tử nh tế bào Để truy nhập nội dung phần tử mảng tế bào, kết nối biểu thức nh− sau:
>> x = B{2,2} % truy nhËp néi dung cđa tÕ bµo x =
5 >> class(x)
ans=
double
>> y = B[2,2] % truy nhập vào thân tế bào y =
[5] >> class(y) ans=
cell
>> B{1,1} (1,2) % truy nhập vào phần tử thứ hai cđa % vector tÕ bµo ans=
2
Để truy nhập dải phần tử mảng tế bào, sử dụng hàm dealdealdealdeal >> [a,b] = deal(B{2,:1})
a =
2.0000+ 3.0000i b =
5
(154)19.5 Mảng tế bào chuỗi kí tự 19.5 Mảng tế bào chuỗi kí tự 19.5 Mảng tế bào chuỗi kí tự 19.5 Mảng tế bào chuỗi kí tù
Một ứng dụng phổ biến mảng tế bào xây dựng mảng văn Mảng chuỗi kí tự tiêu chuẩn địi hỏi tất chuỗi có chung độ dài Bởi mảng tế bào chứa nhiều kiểu liệu khác phần tử, chuỗi kí tự mảng tế bào khơng có giới hạn Ví dụ:
>> T = {' Tom';' Disk'} T=
'Tom' 'Disk' 19.6 CÊu 19.6 CÊu 19.6 CÊu 19.6 CÊu tróc tróc tróc tróc
Cấu trúc đối t−ợng MATLAB có tên ‘ chứa liệu‘ gọi fieldsfieldsfieldsfields Nh− phần tử mảng tế bào, tr−ờng cấu trúc có kiểu liệu Chúng khác chỗ cấu trúc tr−ờng đ−ợc truy nhập tên phổ biến số, khơng có hạn chế số nh− cấu hình tr−ờng cấu trúc Cũng giống nh− mảng tế bào, cấu trúc đ−ợc nhóm lại với tạo thành mảng mảng tế bào Một cấu trúc đơn mng cu trỳc 1x1
19.7 Xây dựng mả 19.7 Xây dựng mả 19.7 Xây dựng mả
19.7 Xây dùng m¶ng cÊu trócng cÊu trócng cÊu tróc ng cÊu tróc
Cấu trúc sử dụng dấu ‘ ‘ để truy nhập vào tr−ờng Xây dựng cấu trúc đơn giản nh− gán liệu vào tr−ờng độc lập Ví dụ sau tạo ghi client client client client cho th− viện kiểm tra
>> client.name = ' John Doe'; >> client.cost = 86.50;
>> client.test.AIC = [6.3 6.8 7.1 7.0 6.7 6.5 6.3 6.4] >> client.test.CHC = [2.8 3.4 3.6 4.1 3.5];
>> client client =
name L ' John Doe ' cost :86.50
test : [1x1 struct] >> client.test
ans=
AIC:6.3000 6.8000 7.1000 7.0000 6.7000 6.5000 6.3000 6.4000 CHC:2.8000 3.4000 3.6000 4.1000 3.5000
Bây tạo b¶n ghi clientclientclient thø hai: client >> client(2).name = ' Alice Smith '; >> client(2).cost = 112.35;
>> client(2).test.AIC = [5.3 5.8 7.0 6.5 6.7 5.5 6.0 5.9 ] >> client(2).test.CHC =[ 3.8 6.3 3.2 3.1 2.5 ]
(155)1x2 struct array with field name
cost test
Cấu trúc đ−ợc xây dựng cách dùng hàm structstructstructstruct để tạo tr−ớc mảng cấu trúc Cú pháp là: ( ‘ field‘ V1, ‘ field2‘, V2, ) field1, field2, v.v tr−ờng, mảng V1, V2, v.v phải mảng tế bào có kích th−ớc., số tế bào, giá trị Ví dụ, mảng cấu trúc đ−ợc tạo nh− sau:
>> N ={' John Doe ', ' Alice Smith'}; >> C = {86.50, 112.35 };
>> P = {[10.00 20.00 45.00];
>> bills = struct('name',N,'cost',C,'payment',P) bils=
1x2 struct array with fields
name
cost payment 19.8
19.8 19.8
19.8 Truy nhËp vµo trTruy nhập vào trTruy nhập vào trờng cấu trúcTruy nhập vào trờng cấu trúcờng cấu trúcờng cÊu tróc
Bởi nội dung cấu trúc tên nhiều số, nh− tr−ờng hợp mảng tế bào, tên tr−ờng cấu trúc phải đ−ợc biết đến để truy nhập liệu chứa chúng Tên tr−ờng đ−ợc tìm thấy trong cửa sổ lệnh, đơn giản việc nhập vào tên cấu trúc Tuy nhiên M-file, hàm cần thiết đ−ợc tạo để cập nhật tên tr−ờng Hàm fieldnamefieldnamefieldnamefieldname trả lại mảng tế bào có chứa tên tr-−ờng cấu trúc
>> T = fieldnammes(bills)
T =
' name ' ' cost ' ' payment '
Có hai ph−ơng pháp để truy nhập vào tr−ờng cấu trúc Chỉ số trực tiếp sử dụng kĩ thuật mục thích hợp, nh− ph−ơng pháp truy nhập tr−ờng cấu trúc, số mảng thích hợp để truy nhập vào số mảng tế bào Sau ví dụ dựa cấu trúc bills
bills bills
bills client client client client xét trên: >> bills.name
ans =
John Doe ans=
Alice Smith >> bills(2).cost ans=
112.3500 >> bills(1) ans=
(156)payment: 10.000 20.0000 45.0000
>> baldue = bills(1).cost - sum(bills(1).payment ) baldue=
6.5000
>> bills(2).payment(2) ans =
12.3500
>> client(2).test.AIC(3) ans=
7.000
Ph−ơng pháp mục trực tiếp th−ờng đ−ợc sử dụng để truy nhập giá trị tr−ờng Tuy nhiên, M-file tên tr−ờng đ−ợc gọi từ hàm fieldnamesfieldnamesfieldnamesfieldnames, hàm getfigetfigetfigetfieldeldeldeld
setfield setfield setfield
setfield đ−ợc sử dụng để truy nhập liệu cấu trúc Ví dụ : >> getfield(bills,{1},'name' ) % t−ơng tự nh bills(1).name
ans=
John Doe
>> T = fieldnames(bills);
>> getfriend(bills,{2},T{3},{2})%t¬ng tù nh s(2),payment(2) ans=
12.3500
Ví dụ sau trả lại cấu trúc có chứa kiểu liệu nh− cấu trúc nguyên thuỷ với giá trị bị thay đổi Dòng lệnh t−ơng đ−ơng client(2).test.AIC(3) = 7.1 là:
>> client = setfield(client,{2 },'test', 'AIC ',{3},7.1) client=
1x2 struct array with fields name
cost test >> client(2).test.AIC(3) ans=
7.1000
Một tr−ờng đ−ợc thêm vào mảng cấu trúc đơn giản cách gán giá trị cho tr−ờng cấu trúc
>> client(1).addr = {' MyStreet';' MyCity '} client =
1x2 struct array with fields name
cost test addr
Mét tr−êng cã thÓ đợc bỏ khỏi cấu trúc ( mảng cÊu tróc ) b»ng lƯnh
rmfield rmfield rmfield
rmfield S= rmfield ( S, field )S= rmfield ( S, field )S= rmfield ( S, field )S= rmfield ( S, field ) bỏ tr−ờng field từ cấu trúc S S= rmfield ( S, F ) S= rmfield ( S, F ) S= rmfield ( S, F ) S= rmfield ( S, F ), F mảng tế bào tên tr−ờng, bỏ nhiều tr−ờng từ cấu trúc S thời điểm
(157)1x2 struct array with fields name
cost test
19.9 Sự nghịch đảo hàm kiểm tra 19.9 Sự nghịch đảo hàm kiểm tra 19.9 Sự nghịch đảo hàm kiểm tra 19.9 Sự nghịch đảo hàm kiểm tra
Sự nghịch đảo mảng tế bào cấu trúc cách dùng hàm
struct2cell struct2cell struct2cell
struct2cell cell2structcell2structcell2structcell2struct Tên tr−ờng phải đ−ợc cung cấp đầy đủ cho cell2structcell2structcell2structcell2struct bị chuyển thành mảng tế bào từ cấu trúc Sự chuyển đổi từ mảng số mảng xâu kí tự thành mảng tế bào cách sử dụng hàm num2cellnum2cellnum2cellnum2cell cellstrcellstrcellstrcellstr Ng−ợc lại chuyển đổi từ mảng tế bào thành mảng kí tự hàm charcharcharchar
Mặc dù hàm classclassclassclass trả kiểu kiểu liệu đối t−ợng, classclassclassclass không thuận tiện sử dụng để kiểm tra kiểu liệu Hàm isaisaisaisa(x, ‘ class ‘ ) trả lại truetruetruetrue x đối t−ợng kiểu ‘ class‘ Ví dụ, isaisaisaisa ( client, ‘ struct ‘ ) trả lại truetruetrue Để thuận tiện, số hàm kiểm tra true số khác có sẵn th− viện ch−ơng trình nh−: isstruct, iscell, ischar, isnumeric,isstruct, iscell, ischar, isnumeric,isstruct, iscell, ischar, isnumeric,isstruct, iscell, ischar, isnumeric, islogical
islogical islogical islogical
-oOo -
Chơng 20
Biểu tợng hộp công cụ toán học
Cỏc ch−ơng tr−ớc, bạn biêt đ−ợc MATLAB mạnh ph−ơng diện lập trình, tính tốn Mặc dù khả tính tốn mạnh, nhiên cịn có hạn chế Nh− máy tính, MATLAB sở sử dụng số Nó nhận số (123/4) biến (x =[ ])
Hộp cơng cụ tốn học tập hợp công cụ ( hàm ) để MATLAB sử dụng nhằm giải toán Có cơng cụ để tổ hợp, đơn giản hố, tích phân, vi phân giải phép tốn đại số phép tốn vi phân Các cơng cụ khác sử dụng đại số học tuyến tính để chuyển đổi xác dạng nghịch đảo, định thức khuôn mẫu tiêu chuẩn
Các công cụ SymboSymboSymboSymbolic Math Tollbox lic Math Tollbox lic Math Tollbox đ−ợc tạo nên từ ch−ơng trình phần mềm lic Math Tollbox mạnh có tên Maple@ phát triển khởi đầu từ trờng đại học Waterloo Ontario, Canada
bây phần mềm hãng Waterloo Maple Software Khi bạn yêu cầu MATLAB thực phép tốn, sử dụng hàm Symbolic Math Tollbox Symbolic Math Tollbox Symbolic Math Tollbox Symbolic Math Tollbox để làm việc trả lại kết cửa sổ lệnh
20.1 Biểu thức đối t 20.1 Biểu thức đối t 20.1 Biểu thức đối t
20.1 Biểu thức đối t−ợng đặc tr−ợng đặc tr−ợng đặc tr−ợng đặc tr−ng−ng−ng−ng
(158)nhận dạng biểu t−ợng đ−ợc đa ra, xác nh− cách bạn giải đại số học tính tốn Các ma trận tốn học mảng mà phần tử đối t−ợng tốn học biểu thức
20.2 Tạo sử dụng đối t− 20.2 Tạo sử dụng đối t− 20.2 Tạo sử dụng đối t−
20.2 Tạo sử dụng đối t−ợng đặc tr−ợng đặc tr−ợng đặc tr−ợng đặc tr−ngngngng
Đối t−ợng đặc tr−ng đ−ợc xây dựng từ chuỗi kí tự biến số học sử dụng hàm symsymsymsym Ví dụ x = sym (‘ x ‘ ) tạo biến đặc tr−ng x, y = sym ( ‘ y ‘ ) tạo biến đặc tr−ng y, y = sym ( ‘ 1/3 ‘ ) tạo biến đặc tr−ng y mang giá trị 1/3 Giả sử biến đặc tr−ng đ−ợc định nghĩa, đ−ợc sử dụng biểu thức toán học t−ơng tự nh− biến số học đ−ợc sử dụng MATLAB Nếu nh− biến x, y đ−ợc tạo tr-−ớc lệnh z= (x+y) / ( x-2 ) tạo biến z biểu thức mà thay có mang hay nhiều biến đặc tr−ng x y
Một đối t−ợng số học chuyển thành đối t−ợng đặc tr−ng D−ới ví dụ: >> m = magic(3) % tạo ma trận số
m =
8
3
4
>> M = sym(m) % tạo ma trận đặc tr−ng từ m M =
[ 8, 1, ] [ 3, 5, ] [ 4, 9, ]
>> det(M) % xác định định thức ma trận đặc tr−ng M ans =
-360
Ví dụ xây dựng ma trận vuông 3x3, chuyển đổi thành ma trận đặc tr−ng, tìm định thức ma trận
Hàm symsymsymsym cho phép bạn lựa chọn định dạng cho hiển thi đặc tr−ng giá trị số Cú pháp là: S = symsymsymsym ( A, fmt ) A giá trị số ma trận fmt đặc tính định dạng tuỳ chọn, ‘f ‘, ‘ r ‘, ‘ e ‘, ‘ d ‘ Giá trị mặc định ‘ r ‘ Nếu chọn ‘ f ‘ t−ơng ứng hệ chữ số lục phân, ‘ r‘ t−ơng ứng chữ số hữu tỉ, ‘ e ‘ t−ơng tự nh− ‘ r ‘ nh−ng dạng tắc hàm mũ, cịn ‘ d ‘ t−ơng ứng chữ số hệ thập phân
D−ới số ví dụ hiển thị số định dạng tuỳ chọn: Lệnh Dạng hiển thị 1/3 Lớp
format short 0.3333 double format long 0.333333333333333 double format short e 3.3333e-001 double
format long e 3.333333333333333e-001 double
(159)sym ( 1/3, ‘f ‘ ) ‘1.555555555555 ‘*2^(-2) sym sym ( 1/3, ‘r ‘ ) 1/3 sym sym ( 1/3, ‘e‘ ) 1/3-eps/12 sym sym ( 1/3, ‘d ‘ ) 333333333333333333314829616256 sym Sự khác định dạng đặc tr−ng gây số hỗn độn Ví dụ: >> sym(1/3)- sym(1/3,'e') % lỗi dấu âm số hữu tỉ
ans =
1/12*eps
>> double(ans) % định dạng thập phân ans =
1.8504e-17
20.3 20.3 20.3
20.3 Sự biểu diễn biểu thức đặc tr−Sự biểu diễn biểu thức đặc tr−Sự biểu diễn biểu thức đặc tr−Sự biểu diễn biểu thức đặc tr−ng MATLABng MATLABng MATLABng MATLAB
MATLAB có biểu thức đặc tr−ng giống nh− biểu thức có chứa đối t−ợng đặc tr-−ng khác chúng biến số, biểu thức, phép tốn khơng chúng gần giống nh− biểu thức MATLAB Sau vài ví dụ biểu thức đặc tr−ng
BiĨu thøc t−ỵng tr−ng Sự trình bày MATLA x=sym( x ) y= M=syms(‘a‘,‘b‘,‘c‘,‘d‘); x=sym(‘x‘) cos(x2)-sin(2x) f=syms x a b
x=sym(‘x‘) f=int(x^3/sqrt(1-x),a,b)
Các hàm đặc trng MATLAB cho phép bạn thao tác biểu thức theo nhiều cách khác Ví dụ:
>> x = sym('x') % tạo biến đặc tr−ng x
>> diff(cos(x)) % đối cos(x ) với biến số x ans =
-sin(x)
>> sym('a','b','c','d' )% tạo biến số đặc tr−ng a, b, c d >> M = [a, b, c, d] % tạo ma trận đặc tr−ng M =
[a, b] [c, d]
>> det(M) % tìm định thức ma trận đặc tr−ng M ans =
a*b - b*c
Trong ví dụ đầu tiên, x đ−ợc định nghĩa nh− biến đặc tr−ng tr−ớc đ−ợc sử dụng biểu thức, t−ơng tự nh− biến số phải đ−ợc gán giá trị tr−ớc chúng đ−-ợc sử dụng Điều cho phép MATLAB xem xét cos(x) nh− biểu thực đặc tr−ng, difdifdifdif((((cos(x)) phép toán đặc tr−ng phép toán số học Trong ví dụ số 2, hàm symssymssymssyms th−ờng đ−ợc định nghĩa số biến số đặc tr−ng symssymssymssyms(‘a‘, ‘b‘ ) t−ơng đ-−ơng với a = sym('a'); b= sym('b' ); MATLAB biết M=[a, b; c, d ] ma trận đặc tr−ng chứa đựng biến số đặc tr−ng, ddddet(M)et(M)et(M)et(M) phép toán đặc tr−ng
(160)‘b‘, c, d ) tơng đơng nhng nh bạn biết công thức dễ thực
Chúng ta xem xét kĩ ví dụ thứ hai nêu trên:
>> a = 1; b = 2; c = 3; d = % định nghĩa biến số a đến d >> M = [a,b;c,d] % M ma trận số
M=
1
3
>> size(M) %M lµ mét ma trËn bËc hai ans =
2
>> class(M) % Có loại đối t−ợng M? ans =
double
>> M = '[a, b; c, d ]' % M chuỗi đặc tr−ng M =
[a, b :c, d ]
>> size(M) % M lµ mét vector hµng cđa kÝ tù ans =
1
>> class( M ) ans =
char
>> M = sym('[a,b;c,d ]') % đối t−ợng đặc tr−ng nh−ng
% ma trận M=
[a,b;c,d]
>> size(M) % M vector phần tư (2 dÊu ph¶y ) ans =
1
>> class(M) ans =
sym
>> syms a b c d % định nghĩa biến số đặc tr−ng a đến d >> M = [a,b;c,d] % M ma trận đặc tr−ng
M =
[a, b] [c, d] >> size(M)
ans =
2
>> class(M) ans =
(161)>> a = 1; b = ; syms c d % định nghĩa biến cố định từ a
>> M = [a,b;c,d] % M ma trận đặc tr−ng từ a đến d M=
[1, 2] [c, d] >> size(M)
ans=
sym
Trong ví dụ này, M đ−ơc định nghĩa theo cách:
• KiĨu thø nhÊt: nã gÇn gièng víi ma trËn bËc hai
ã Kiểu thứ hai chuỗi kí tự
• Kiểu thứ ba đối t−ợng đặc tr−ng hợp lệ, nh−ng khơng thể sử dụng mi trng hp
ã Kiểu thứ t mét ma trËn bËc hai
• Kiều cuối cho tháy biến số biến đặc tr−ng có kết hơp biểu th−c đặc tr−ng để tạo thành ma trận đặc tr−ng
Biểu thức đặc tr−ng biến đ−ợc gọi hàm đặc tr−ng Khi hàm đặc tr−ng hiển thị, chúng đơi khó mà phân biệt đợc với số nguyên Ví dụ:
>> f=sym(3) %tạo đặc tr−ng f=
>> class(f) % kiểu đối t−ợng f ans=
sym >> g = sym(pi) g=
pi >> class(g) ans=
sym >> h = sym(sin(pi/4)) h=
sqrt(1/2) >> class(h) ans=
sym 20.4 Biến đặc tr− 20.4 Biến đặc tr− 20.4 Biến đặc tr− 20.4 Biến đặc tr−ngngngng
Khi làm việc với biểu thức đặc tr−ng có nhiều biến đặc tr−ng, xác biến biến độc lập Nếu MATLAB không đâu biến độc lập nhận biến gần x theo thứ tự chữ
Biến độc lập đơi cịn đ−ợc gọi biến tự Bạn yêu cầu MATLAB biến biểu thức đặc tr−ng Để biết đ−ợc ta sử dụng hàm findsymfindsymfindsymfindsym:
(162)>> findsym(a*t+s/(u+3),1) % u gần x ans =
u
>> findsym(sin(a+omega),1) % omega gÇn x nhÊt ans =
omega
>> findsym(3*i + 4*j) % i j tơng tự nh sqrt(-1) ans =
' '
Nếu findsym findsym findsym findsym khơng tìm thấy biến đặc tr−ng, trả lại chuỗi rỗng 20.5 Phép toán biểu thức đặc tr−
20.5 Phép toán biểu thức đặc tr− 20.5 Phép toán biểu thức đặc tr− 20.5 Phép toán biểu thức đặc tr−ngngngng
Giả sử bạn tạo tạo đ−ợc biểu thức đặc tr−ng, bạn muốn thay đổi cách Bạn muốn lấy phần biểu thức, kết hợp hai biêu thức tìm giá trị số biểu thức đặc tr−ng Có nhiều cơng cụ cho phép bạn làm điều
Tất hàm đặc tr−ng, ( với vài điểm đặc biệt nói phần sau) dựa biểu thức đặc tr−ng mảng đặc tr−ng Kết giống nh− số nh−ng biểu thức đặc tr−ng Nh− nói trên, bạn tìm đâu kiểu số nguyên, chuỗi đặc tr−ng đối t−ợng đặc tr−ng cách sử dụng hàm classclassclassclass từ MATLAB sở
20.6 20.6 20.6
20.6 Tách tử số mẫu sốTách tử số mẫu sốTách tử số mẫu số Tách tử số mẫu số
Nếu biểu thức bạn đa thức hữu tỉ mở rộng tới đa thức hữu tỉ tơng đơng ( bao gồm toàn phần tử tử số có chung mẫu số), bạn tách tử số mẫu số cách sư dơng hµm numdennumdennumdennumden VÝ dơ:
m = x2, f = a x2/( b-x) g = x 2 /2 + x /3 -3/5
h = (x2 + 3)/ ( x - ) + 3x/(x-1)
numden numden numden
numden tổ hợp hữu tỉ hoá biểu thức cần thiết, trả lại kết tử số mẫu số Câu lệnh MATLAB đợc thực nh− sau:
>> sym x a b % tạo số biến đặc tr−ng >> m = x^2 % tạo biểu thức đơn giản m =
x^2
>> [n,d] = numden(m) % t¸ch tư sè vµ mÉu sè n =
x^2 d =
1
>> f = a*x^2/(b-x) % t¹o mét biĨu thøc liªn quan f =
a*x^2/(b-x)
>> [n d] = numden(f) % tách tử số mÉu sè m =
(163)-b + x
Hai biểu thức cho ta kết qu¶ nh− mong muèn >> g = 3/2*x^2 + 2*x - 3/4 % tạo biểu thức khác g =
3/2*x^2 + 2*x - 3/4
>> [n,d] = numden(g) % hữu tỉ hoá tách phÇn n =
6*x^2 + 8*x - d =
4
>> h = (x^2 + 3)/(2*x - 1) + 3*x/(x - 1) % tỉng cđa ®a thøc h÷u tØ h =
x^3 + 5*x^2 - d= (2*x - 1)*(x - 1)
>> h2 = n/d % t¹o l¹i biĨu thøc cho h h2 =
(x^2 + 3)/(2*x - 1) + 3*x/(x - 1)
Hai biểu thức g h đ−ợc hữu tỉ hoá trở biểu thức đơn giản với tử số mẫu số, tr−ớc phần tử đ−ợc tách chia tử số cho mẫu số tạo lại biểu thức nguyên gốc
20.7 Phép toán đại số tiêu chuẩn 20.7 Phép toán đại số tiêu chuẩn 20.7 Phép toán đại số tiêu chuẩn 20.7 Phép toán đại số tiêu chuẩn
Một số phép tốn tiêu chuẩn biểu diễn biểu thức đặc tr−ng sử dụng toán tử quen thuộc Ví dụ cho hai hàm:
f = 2x2 + 3x - g = x2 - x +
>> sym('x') % định nghĩa biến số đặc tr−ng >> f = (2*x^2 + 3*x - 5) % định nghĩa biểu thức đặc tr−ng f g
f=
(2*x^2 + 3*x - ) >> x^2 - x +
g =
x^2 - x + >> f +
ans =
3*x^2 + 2*x +
>> f - g % t×m biĨu thøc cđa f-g ans =
x^2 + 4*x - 12
>> f*g % t×m mét biĨu thøc cđa f*g ans =
(2*x^2 + 3*x -5 ) *( x^2 - x + 7) >> f/g % t×m mét biĨu thøc cđa f/g ans =
(2*x^2 + 3*x - )/(x^2 - x + 7)
(164)ans =
(2*x^2 + 3*x - 5)*3*x
Thực phép tốn biểu thức chứa biến số đặc tr−-ng cho kết biểu thức đặc tr−tr−-ng, bạn tổ hợp biểu thức cố định để tạo biểu thức Ví dụ:
>> a = 1; b = 3/2 ; x = sym('x'); % tạo số biến số đặc tr−ng >> f = sin(a - x) % tạo số biểu thức
ans=
-sin(x-1) >> g = sin(b*x^2) ans=
sin(3/2*x^2)
>> b*f/(g - 5)+ x % kÕt hỵp chóng ans =
-3/2*sin(x - 1)/(sin(3/2*x^2)- )+ x )
Tất phép toán thực tốt với đối số mảng 20.8
20.8 20.8
20.8 Các phép toán nâng caoCác phép toán nâng caoCác phép toán nâng caoCác phép toán nâng cao
MATLAB biểu diễn nhiều phép toán nâng cao biểu thức đặc tr−ng Hàm
compose compose compose
compose kết hợp f(x ) g ( x) thành f ( g(x)) Hàm finversefinverse finversefinverse tìm hàm nghịch đảo biểu thức hàm symsumsymsumsymsumsymsum tìm tổng đặc tr−ng biểu thức Ví dụ :
f = 1/ ( + x2 ) g = sin ( x ) h = x/ ( + u 2 ) k = cos ( x+v )
>> syms x u v % định nghĩa biến đặc tr−ng >> f = 1/(1+x^2) % tạo biểu thức
>> g = sin(x) >> h = x/(1 + u^2) >> k = cos(x + v)
>> compose(f,g) % t×m biĨu thøc cđa f( g ( x )) ans =
sym(1/(1 + x^2))
compose compose compose
compose đ−ợc sử dụng hàm mà có biến độc lập khác >> compose(h,k) % cho h( x), k ( x ), tìm h( k(x) )
ans=
cos(x + v)/(1 + u^2)
>> compose(h,k,u,v) % cho h( u), k( v ), t×m h( k( v)) ans =
x/(1 + cos(2*v)^2)
(165)g( f (x)) = x Ví dụ hàm nghich đảo e ln(x), ln(e) =x Hàm nghịch đảo sin(x) arcsin(x), hàm nghịch đảo 1/tan(x) arctan(1/x) Hàm finversefinversefinversefinverse trở thành hàm nghịch đảo biểu thức Chú ý finversefinversefinversefinverse trả lại kết chí kết khơng
>> syms x a b c d z % định nghĩa số biến đặc tr−ng >> finverse(1/x) % nghịch đảo 1/x x
ans =
1/x
>> finverse(x^2) % tìm giải pháp để g(x2 ) =x
ans =
x^(1/2)
>> finverse(a*x + b) % tìm giải pháp để g(f(x)) = x ans =
-(b - x)/a
>> finverrrrse(a*b + c*d - a*z,a) %tìm giải pháp để g(f(a))=a ans=
-(c*d - a)/(b - z)
Hàm symsumsymsumsymsumsymsum tìm tổng đặc tr−ng biểu thức Có cú pháp hm:
symsum(f) symsum(f) symsum(f)
symsum(f) trả lại tổng , symsum(f,s)symsum(f,s)symsum(f,s)symsum(f,s) trả lại tổng , symsum(f,a,b)symsum(f,a,b)symsum(f,a,b)symsum(f,a,b) trả lại tổng , hàm
symsum(f, a, b, s) symsum(f, a, b, s) symsum(f, a, b, s)
symsum(f, a, b, s) trả lại tổng
Chúng ta xem xét tổng , trả lại x3/3-x2/2+x/6
>> syms x n >> symsum(x^2) ans =
1/3*x^3 - 1/2*x^2 + 1/6*x 20.9 Hàm nghịch đảo
20.9 Hàm nghịch đảo 20.9 Hàm nghịch đảo 20.9 Hàm nghịch đảo
Mục trình bày cơng cụ để chuyển đổi biểu thức đặc tr−ng sang giá trị số ng−ợc lại Có số hàm đặc tr−ng trở thành giá trị số
Hàm sym sym sym sym chuyển đổi chuỗi mảng số thành biểu diễn đặc tr−ng; hàm doubledoubledoubledouble thực ng−ợc lại dubleubleubleuble chuyển đổi đặc tr−ng ( biểu thức đặc tr−ng biến) thành giá trị số có kiểu xác định doubledoubledoubledouble
>> phi = sym('(1 + sqrt(5))/2') phi =
(1 + sqrt(5))/2
>> double(phi) % nghịch đảo giá trị số ans =
1.6180
Hai cách cho ta kết
Bạn làm việc với đa thức MATLAB bản, sử dụng vector mà phần tử hệ số đa thức Hàm đặc tr−ng sym2poli sym2poli sym2poli sym2poli chuyển đổi đa thức đặc tr−ng thành vector hệ hệ số Hàm poli2sympoli2sympoli2sympoli2sym làm ngợc lại, bạn khai báo biến để sử dụng phép toán cuối
(166)>> f = x^3 + 2*x^2 - 3*x + % f đa thức đặc tr−ng f =
x^3 + 2*x^2 - 3*x +
>> n = sym2poli(f) % t¸ch vector c¸c hƯ sè n =
1 -3
>> poly2sym(n) % tạo lại đa thức x ( mặc định ) ans =
x^3 + 2*x^2 - 3*x +
>> s = sym('s') % định nghĩa s nh− biến đặc tr−ng >> poly2sym(n,s) % tạo lại đa thức f
ans=
s^3 + 2*s^2 - 3*s + 20.10 Sù thay thÕ biÕn sè
20.10 Sù thay thÕ biÕn sè 20.10 Sù thay thÕ biÕn sè 20.10 Sù thay thÕ biÕn sè
Giả sử bạn có biểu thức đặc tr−ng x, bạn muốn đổi biến thành y MATLAB cung cấp cho bạn công cụ để thay đổi biểu thức đặc tr−ng, gọi subssubssubssubs Cú pháp là:
subs subs subs
subs( f, old, new ), f biểu thức đặc tr−ng, old biến biểu thức đặc tr-−ng, new biến đặc trtr-−ng, biểu thức ma trận giá trị số ma trận Nội dung new thay old biểu thức f D−ới số ví dụ:
>> syms a alpha b c s x % định nghĩa vài biến đặc tr−ng >> f = a*x^2 + b*x + c % tạo hàm f(x)
f =
a*x^2 + b*x + c
>> subs(f,x,s) % thay thÕ xb»ng s biĨu thøc cđa f ans=
a*s^2 + b*s + c
>> subs(f,a,[alpha;s]) % thay a ma trận đặc trng a ans=
[alpha*x^2 + b*x + c] [s*x^2 + b*x + c]
>> g= 3*x^2 + 5*x - % tạo hàm khác g=
3*x^2 + 5*x -
>> h = subs(g,x,2) % new giá trị số h =
18
>> class(h) % biểu diễn kết nội dung đặc tr−ng ans =
sym
Ví dụ tr−ớc biểu diễn cách subssubssubssubs tạo hệ số, sau làm đơn giản hố biểu thức Từ kết hệ số nội dung đặc tr−ng, MATLAB rút gọn thành giá trị đơn Chú ý subssubssubssubs hàm đặc tr−ng, trở thành biểu thức đặc tr−ng, nội dung đặc tr−ng chí số Để nhận số cần sử dụng hàm doubledoubledoubledouble
(167)>> double(h) % chuyển đổi biểu thức đặc tr−ng thành số ans=
18
>> class(ans) % biểu diễn kết giá trị số ans=
double 20.11 PhÐp lÊy vi ph©n 20.11 PhÐp lÊy vi ph©n 20.11 PhÐp lÊy vi ph©n 20.11 PhÐp lÊy vi ph©n
Phép lấy vi phân biểu thức đặc tr−ng sử dụng hàm diff diff diff diff theo mẫu sau:
>> syms a b c d x s % định nghĩa vài biến đặc tr−ng >> f = a*x^3 + x^2 - b*x - c % định nghĩa biểu thức đặc tr−ng f =
a*x^3 + x^2 - b*x - c
>> diff(f) % lấy vi phân f với x biến mặc định ans =
3*a*x^2 + 2*x - b
>> diff(f,a) % lÊy vi ph©n cđa f víi a thay cho x ans =
x^3
>> diff(f,2) % lấy vi phân f hai lần với ? ans=
6*a*x +
>> diff(f,a,2) % vi phân lần với ? ans=
0
Hm diffdiffdiffdiff thao tác mảng Nếu f vector đặc tr−ng ma trận,
diff( f) diff( f) diff( f)
diff( f) lÊy vi phân phần tử mảng:
>> f = [a*x,b*x^2;c*x^3,d*s] % tạo mảng đặc tr−ng f =
[ a*x b* x^2 ] [ c*x^3 d*s ]
Chú ý hàm diffdiffdiffdiff sử dụng MATLAB để tính phép vi phân số học vector số ma trận
20.12 PhÐp tÝch ph©n 20.12 PhÐp tÝch ph©n 20.12 PhÐp tÝch ph©n 20.12 PhÐp tÝch ph©n
(168)>> x = sym('x');
>> p = int(log(x)/exp(x^2)) % lÊy tÝch ph©n
Warning:Explicit integral could not be found
In C:\MATLAB\toolbox\symbolic\@sym\int.m at line 58 p = int(
>> pretty(p) ans =
output from pretty
Hàm tích phân, nh− hàm vi phân có nhiều cú pháp int(f) int(f) int(f) int(f) tìm phép tính tích phân theo biến độc lập mặc định, cịn int(f, s ) tìm phép lấy tích phân theo biến đặc tr−ng s Khn mẫu int( f, a, b )int( f, a, b )int( f, a, b )int( f, a, b ) int (f, s, a, b )int (f, s, a, b )int (f, s, a, b )int (f, s, a, b ), a, b biến số, tìm biểu thức đặc tr−ng cho phép lấy tích phân theo cận từ a đến b T−ơng tự cho hàm int(f, m, n )
int(f, m, n ) int(f, m, n ) int(f, m, n ) vµ
int ( f, s, m, n ) int ( f, s, m, n ) int ( f, s, m, n ) int ( f, s, m, n )
>> syms x s m n % định nghĩa số biến
>> f = sin(s + 2*x) % t¹o mét hàm tợng trng f=
sin(s+2*x)
>> int(f) % phÐp lÊy tÝch ph©n theo biÕn x ans=
-1/2*cos(s+2*x)
>> int(f,s) % phép lấy tích phân theo đối số s ans=
-cos(s + 2*x)
>> int(f,pi/2,pi) % lấy tích phân theo biến x với cận từ pi/2 đến pi ans=
-cos(s)
>> int(f,s,pi/2,pi) % lấy tích phân theo s, cận từ pi/2 đến pi ans=
2*cos(x)^2 - - 2*sin(x)*cos(x)
>> g = simple(int(f,m,n)) % lấy tích phân theo x, cận từ m đến n g =
-1/2*cos(s + 2*n) + 1/2*cos(s + 2*m)
Trong ví dụ này, hàm simplesimplesimplesimple đợc sử dụng để đơn giản hố kết phép lấy tích phân Chúng ta nghiên cứu thêm hàm simplesimplesimplesimple sau
Cũng nh− hàm diffdiffdiffdiff, hàm lấy tích phân intintintint phần tử mảng đặc tr−ng: >> syms a b c d x s % định nghĩa số biến đặc tr−ng
>> f = [a*x,b*x^2;c*x^3,d*s] % xây dựng mảng đặc tr−ng f=
[a*x, b*x^2 ] [c*x^3, d*s ]
>> int(f) % lấy tích phân mảng phần tử theo đối số x ans =
(169)[1/4*c*x^4, d*s*x]
Ví dụ : Giải pháp đặc tr−ng ph−ơng pháp tính tốn cổ điển
Fox Mulder, giám sát mái nhà cao ốc Roswell, New Mexexexexico, ăn bữa tr−a phát vật có hình dáng kì lạ không độ cao 50 m Anh ta lấy cà chua chín đỏ khỏi túi đeo sau l−-ng, tì vào cạnh mái nhà ném mạnh cà chua vào không trung Quả cà chua đ−ợc bay lên với vận tốc ban đầu v0 = 20 m/s Mái cao 30 m so với mặt đất, thời gian bay t giây Hỏi đạt đến độ cao cực đại, độ cao mà cà chua đạt tới so với mặt đất? Khi cà chua chạm tới mật đất? Giả sử khơng có lực cản khơng khí gia tốc phụ thuộc vào sức hút không đổi a =-9.7536 m/s2
Chúng ta chọn mặt đất độ cao 0, y = mặt đất y = 30 đỉnh nhà Vận tốc tức thời v = dy/dt, gia tốc a = d2y/dt2 Do lấy tích phân lần gia
tốc, ta đ−ợc vận tộc tức thời, cịn tích phân vận tốc ta đ−ợc độ cao y >> t = sym('t'); % định nghĩa biến dặc tr−ng thời gian
>> digits(5); % độ xác chữ số >> a = sym('-9.7536') % gia tôc đo m/s2
a =
-9.7536
>> v = int(a,t) %vËn tèc xem nh− hµm thêi gian v =
-9.7536*t
>> v = v + 20 % ë thêi ®iĨm t=0 vËn tèc lµ 20m/s v =
-9.7536*t + 20
>> y = int(v,t) %tìm độ cao y thời điểm t cách lấy tích phân y =
-4.8768*t^2+20.*t
>> y = y + 30 % độ cao t=0 30 m y =
-4.8768*t^2 + 20.*t + 30
Kiểm tra xem kết có không, nh− thay t=0 vào biểu thức, ta đ−ợc:
>> yo = subs(y,t,0) yo =
30
kết nh− độ cao cà chua tr−ớc đ−ợc ném
Bây có vận tốc vị trí hàm thời gian t Độ cao cực đại mà cà chua ngừng lên bắt đầu rơi xuống Để tìm điểm này, ta tìm giá trị t v=0 cách dùng hàm solvesolvesolvesolve Hàm tìm điểm khơng biểu thức đặc tr−ng, hay nói cách khác, solve(f)solve(f)solve(f)solve(f), f hàm x, tìm x cho f(x) =0
(170)2.0505
Bởi solvesolvesolvesolve hàm đặc tr−ng, trả lại đặc tr−ng ( chí trơng nh− số) Bây tìm độ cao cực đại,ở thời điểm t = 2.0505 s
>> y_max = subs(y, t, t_top ) % thay thÕ t bëi t_top y y_max =
50.505
Chú ý hàm subssubssubssubs có gái trị nh− làm tr−ớc kiểm tra biểu thức y, subssubssubssubs thay biến đặc tr−ng 2.0505 vào giá trị t biểu thức
Bây tìm thời gian để cà chua chạm mặt đất >> t_splat = solve(y) % cà chua chạm mặt đất y =0 t_splat =
[ -1.1676 ] [ 5.2686 ]
Do kết số âm cà chua khơng thể chạm đất tr−ớc đ−ợc ném đi, nghiệm thứ hai nghiệm có nghĩa Từ suy độ cao cà chua thời điểm t giây đ−ợc cho ph−ơng trình y = -9.7536t2 + 20t + 30, cà chua đạt tới độ cao cực đại
50.505m so với mặt đất thời điểm t = 2.0505 s, chạm mặt đất thời điểm t = 5.2686 s
20.13 Vẽ đồ thị biểu thức đặc tr− 20.13 Vẽ đồ thị biểu thức đặc tr− 20.13 Vẽ đồ thị biểu thức đặc tr− 20.13 Vẽ đồ thị biểu thức đặc tr−ng ng ng ng
Để có ý t−ởng tốt chuyện xảy với cà chua, vẽ kết trị chơi Gọi vị trí cà chua (độ cao) đ−ợc miêu tả biểu thức
y = (- 4.8768)*t^2 + 20*t + 30
(171)0 -30
-20 -10 10 20 30 40 50
t -4.8768*t^2+20.*t+30
Nh bạn thấy, ezplotezplotezplotezplot vẽ đồ thị hàm đặc tr−ng dải -2 t
20.14 Định dạng đơn giản hoá biểu thức 20.14 Định dạng đơn giản hoá biểu thức 20.14 Định dạng đơn giản hoá biểu thức 20.14 Định dạng đơn giản hoá biểu thức
Đôi MATLAB trả lại biểu thức đặc tr−ng khó để đọc Một số cơng cụ có sẵn trợ giúp làm cho biểu thức dễ đọc Tr−ớc tiên hàm prettyprettyprettypretty Lệnh hiển thị biểu thức đặc tr−ng theo khn mẫu t−ơng tự nh− kểu tốn học Chúng ta xem mở rộng chuỗi Taylor:
>> x = sym('x');
>> f = taylor(log(x+1)/(x-5)) f =
-1/5*x+3/50*x^2-41/750*x^3+293/7500*x^4-1207/37500*x^5
>> pretty(f)
41 293 1207 -1/5 x + 3/50 x - - x + x - - x 750 7500 37500
Biểu thức đặc tr−ng đ−a d−ới nhiều dạng t−ơng tự MATLAB sử dụng số lệnh để đơn giản hố thay đổi khn mẫu biểu thức đặc tr−ng
>> x = sym('x');
>> f = (x^2 - 1)*(x - 2)*(x - 3) % tạo hàm f =
(x^2 - 1)*(x - 2)*(x - 3)
>> collect(f) % gom tất mục nhnhau ans =
x^4 - 5*x^3 + 5*x^2 + 5*x - >> horner(ans)
ans =
-6 + (5 + (5 + (-5 + x)*x)*x)*x
(172)ans =
(x - 1)*(x - 2)*(x - 3)*(x + 1) >> expand(f)
ans =
x^4 - 5*x^3 + 5*x^2 + 5*x -
simplify simplify simplify
simplify cơng cụ mạnh, mục đích để đơn giản hoá biểu thức d−ới nhiều kiểu khác nh−: tích phân luỹ thừa phân số; luật số mũ hàm log; Bessel, hình học hàm gamma Một vài ví dụ minh hoạ điều này:
>> syms x y a
>> simplify(sin(x)^2 + 3*x + cos(x)^2 - 5) ans =
-4 + 3*x
>> simplify(log(2*x/y)) ans =
log(2) + log(x/y) >> simplify((-a^2 + 1)/(1 - a)) ans =
a +
20.15 Tóm tắt số đặc điểm khác 20.15 Tóm tắt số đặc điểm khác 20.15 Tóm tắt số đặc điểm khác 20.15 Tóm tắt số đặc điểm khác
• Biểu thức đặc tr−ng số phức cú pháp MATLAB đ−ợc trình bày theo hình mẫu mà ta dễ đàng đọc việc sử dụng hàm prettyprettyprettypretty
• Có thể có nhiều kiểu t−ơng tự biểu thức đặc tr−ng, số chúng dễ dàng sử dụng số khác tình khác MATLAB đa số công cụ để thay đổi khuôn dạng biểu thức Đó :
C«ng C«ng C«ng
C«ng Mô tảMô tả Mô tảMô tả
collect Gom tất mục giống factor Biểu diễn dới dạng đa thức expand Mở rộng tất mục
simplify Đơn giản hoá biêu thức
simple Tìm biểu thức tơng đơng có chuỗi kí tự ngắn
ã Hm c tr−ng MATLAB đ−ợc sử dụng để chuyển biểu thức đặc tr−ng thành phân thức., cho đa thức hữu tỉ int( f )int( f )int( f )int( f ) lấy tích phân hàm này, diff( f )diff( f )diff( f )diff( f ) lấy vi phân hàm Ví dụ:
>> s = sym('s');
>> Y =(10*s^2 + 40*s + 30 )/(s^2 + 6*s + 8) Y =
(10*s^2 + 40*s + 30)/(s^2 + 6*s + 8) >> diff(int(Y))
ans =
10 - 15/(s + 4) - 5/(s + 2) >> pretty(ans)
(173)10 - - - - s + s +
Kỹ thuật thật hữu ích ta muốn tối giản đa thức có bậc cao mẫu số
>> x = sym('x');
>> g = (x^3 + 5)/(x^2 - 1) g =
(x^3 + 5)/(x^2 - 1) >> diff(int(g))
ans =
x + 3/(-1+ x) - 2/(x + 1) >> pretty(ans)
x + - - -
-1 + x x + 20.16 Tù lµm
20.16 Tù lµm 20.16 Tù lµm 20.16 Tù lµm
Tìm giá trị e với độ xác 18,29,30 31 số Chú ý kết gần với giá trị số ngun nhất, nh−ng khơng hồn tồn số nguyên
>> vpắexp(pi*sqrt(163))',18) 20.17 Gi¶i ph
20.17 Gi¶i ph 20.17 Giải ph
20.17 Giải phơng trìnhơng trìnhơng trình ơng trình
Phng trỡnh c trng cú thể đ−ợc giải cơng cụ tốn học có sẵn MATLAB Một số đố đ−ợc giới thiệu, số đ−ợc chứng minh phần sau
20.18 Gi¶i ph 20.18 Gi¶i ph 20.18 Gi¶i ph
20.18 Giải ph−ơng trình đại số đơn giản−ơng trình đại số đơn giản−ơng trình đại số đơn giản −ơng trình đại số đơn giản
Hàm solvesolvesolvesolve gán biểu thức đặc tr−ng tr−ớc giải nó: >> syms a b c x
>> solve(a*x^2 + b*x + c) ans =
[1/2/a*(-b + (b^2 - 4*a*c)^(1/2))] [1/2/a*(-b - (b^2 - 4*a*c)^(1/2))]
Kết vecto đặc tr−ng mà phần tử có dạng nh− Để giải phép tốn có chứa dấu bằng, giải chuỗi có chứa biểu thức:
>> solve('a*x^2 + b*x - (-c)') ans =
[1/2/a*(-b + (b^2 - 4*a*c)^(1/2))] [1/2/a*(-b -
(174)Nếu nh− bạn muốn giải đối số khác so với biến số mặc định bạn khai báo
solve solve solve
solve nh− sau:
>> solve(a*x^2 + b*x + c,b) ans =
-(a*x^2 + c)/x
PhÐp to¸n cã thĨ giải cách gán biểu thức cho Bây giải cos(x)=sin(x) tan(x) =sin(2x) theo x, qui kết chúng biến f t:
>> f = solve(cos(x)- sin(x)) f =
1/4*pi
>> t = solve(tan(x)- sin(2*x)) t =
[ 0] [ pi] [ 1/4*pi] [ -3/4*pi] Kết dới dạng số: >> double(f)
ans = 0.7854 >> double(t) ans =
3.1416 0.7854 -2.3562
20.19 Một vài phép toán đại số 20.19 Một vài phép toán đại số 20.19 Một vài phép toán đại số 20.19 Một vài phép toán đại số
Có thể giải vài phép toán lúc Câu lệnh [a1, a2, , an ] = solve(f1, f2, ,fn ) giải n phép toán cho biến mặc định trả lại kết a1, a2, , an Tuy nhiên biến mặc định đ−ợc l−u trữ Ví dụ:
>> syms x y
>> [a1 a2] = solve(x^2 + x^y + y - 3, x^2 - 4*x + 3) a1 =
[ 1] [ 3] a2 =
[ 1]
[ -(6*log(3)+lambertw(1/729*log(3)))/log(3)] 20.20 PhÐp to¸n
20.20 PhÐp to¸n 20.20 PhÐp to¸n
(175)Thơng th−ờng phép tốn vi phân khó giải, MATLAB cung cấp cho bạn số công cụ mạnh để tìm kết phép tốn vi phân
Hàm dsolvedsolvedsolvedsolve giải phép toán vi phân cho ta kết Cú pháp dsolvedsolvedsolvedsolve khác với phần lớn hàm khác Đối số hàm phải xâu kí tự thay biểu thức, ví nh− xâu chứa dấu ‘=‘ Điều rõ ràng khác so với hàm solvesolvesolvesolve, mà đối số phải biểu thức đặc tr−ng khơng có dấu ‘=‘
Phép toán vi phân đ−ợc nhận kí hiệu chữ hoa D D2, D3, v.v Bất kứ chữ theo sau Ds phụ thuộc vào biến Phép toán ( d2y/dt2 ) đ−ợc thay chuỗi kí tự
‘D2y=0‘ biến độc lập đ−ợc ra, khơng mặc định t Ví dụ giải phép tốn
(dy,dt) - 1+2y2:
>> clear
>> dsolve('Dy=1+y^2') ans =
tan(t - C1)
trong C1 số Cũng tốn nh−ng cho giá trị ban đầu y(0) =1 có kết sau:
>> dsolve('Dy=1+y^2, y(0)=1') ans =
tan(t+1/4*pi)
20.21 Một vài phép toán tích phân 20.21 Một vài phép toán tích phân 20.21 Một vài phép toán tích phân 20.21 Một vài phép toán tích ph©n
Hàm dsolvedsolvedsolvedsolve giải nhiều phép toán vi phân lúc Khi giải nhiều phép toán vi phân dsolvedsolvedsolvedsolve trả biến vào cấu trúc vector nh solvesolvesolvesolve làm Chú ý
dsolve dsolve dsolve
dsolve xắp xếp biến tr−ớc độc lập tr−ớc trả Ví dụ: Giải phép toán sau:
df/dt = 3f + 4g dg/d = -4f + 3g >> [f,g] = dsolve('Df = 3*f + 4*g, Dg = -4*f + 3*g') f =
exp(3*t)*cos(4*t)*C1 + exp(3*t)*sin(4*t)*C2 g =
-exp(3*t)*sin(4*t)*C1 + exp(3*t)*cos(4*t)*C2 20.22 Ma trận đại số tuyến tính
20.22 Ma trận đại số tuyến tính 20.22 Ma trận đại số tuyến tính 20.22 Ma trận đại số tuyến tính
Ma trận đặc tr−ng vector mảng mà phần tử biểu thức đặc tr-−ng chúng đ−ợc tạo hàm symsymsymsym::::
>> syms a b c s t
>> A = [a,b,c;b,c,a;c,a,b]
A =
(176)[ c, a, b]
>> G = [cos(t),sin(t);-sin(t),cos(t)] G =
[ cos(t), sin(t)] [ -sin(t), cos(t)]
Kích th−ớc ma trận đặc tr−ng tìm đ−ợc hàm chuẩn sizesizesizesize lengthlengthlengthlength Ví dụ: >> syms a b c d e f
>> S = [a,b,c;d,e,f] S =
[ a, b, c] [ d, e, f] >> h = size(S) h =
>> [m,n] = size(S) m =
n =
>> length(S) ans =
Phần tử mảng đặc tr−ng đ−ợc truy nhập t−ơng tự nh− mảng số >> syms ab cd ef gh
>> G = [ab,cd,ef,gh] G =
[ ab, cd, ef, gh] >> G(1,2)
ans = cd
20.23 Phép tốn đại số tuyến tính 20.23 Phép tốn đại số tuyến tính 20.23 Phép tốn đại số tuyến tính 20.23 Phép tốn đại số tuyến tính
Phép nghịch đảo định thức ma trận đ−ợc tính hàm: invinvinvinv detdetdetdet
>> H = sym(hilb(3)) H =
[1, 1/2, 1/3] [1/2, 1/3, 1/4] [1/3, 1/4, 1/5] >> det(H)
ans = 1/2160 >> J = inv(H) J =
(177)[ 30, -180, 180] >> det(J)
ans = 2160 20.24 Hµm b 20.24 Hµm b 20.24 Hµm b
20.24 Hµm b−íc vµ xung−íc vµ xung−íc vµ xung−íc vµ xung
Hµm stepstepstepstep, u(t) vµ hµm impulse,impulse,impulse,impulse, (t) thờng đợc dùng hệ thống Hàm bớc Ku(tKu(tKu(t Ku(t a )
a ) a )
a ) K số đ−ợc định nghĩa nh− sau: Ku(t-a) =0 t<a Ku(t-a)= K T>=a D−ới hàm b−ớc:
20.25 Biến đổi Laplace 20.25 Biến đổi Laplace 20.25 Biến đổi Laplace 20.25 Biến đổi Laplace
Phép biến đổi laplace biến đổi từ miền t sang miền s Hàm nh− sau: L(s) =
>> syms a s t w
>> f = exp(-a*t)*cos(w*t) f =
exp(-a*t)*cos(w*t) >> L = laplace(f,t,s) L=
(s + a)/((s + a)^2 + w^2) >> pretty(L)
s + a - 2
s + a) + w 20.26 Biến đổi Fourier
20.26 Biến đổi Fourier 20.26 Biến đổi Fourier 20.26 Biến đổi Fourier
Hàm biến đổi Fourier Fourier ng−ợc nh− sau: F() = f(t)=
MATLAB dùng ‘w‘ thay cho biểu thức đặc tr−ng >> syms t w
>> f=t*exp(-t^2) f =
t*exp(-t^2)
>> f=fourier(f,t,w) % biến đổi fourier sử dụng tham số t w f =
-1/2*i*pi^(1/2)*w*exp(-1/4*w^2)
>> ifourier(f,w,t) % timbiến đổi fourier ng−ợc ans =
1/2*4^(1/2)*t*exp(-t^2) >> simplify(ans)
ans =
(178)-oOo -
chơng 21
hộp công cụ hệ thống ®iỊu khiĨn
21.1 Sự biểu diễn đồ thị 21.1 Sự biểu diễn đồ thị 21.1 Sự biểu diễn đồ thị 21.1 Sự biểu diễn đồ thị
Phần lớn công cụ Hộp công cụ hệ thống điều khiển Hộp công cụ hệ thống điều khiển Hộp công cụ hệ thống điều khiển Hộp công cụ hệ thống điều khiển đ−ợc luận giải dễ hiểu ph−ơng diện hàm truyền không gian trạng thái Thêm vào hệ thống nhiều đầu vào, nhiều đầu (MIMO) đ−ợc sinh từ việc tạo ma trận B, C, D có địi hỏi số chiều Sự biểu diễn hàm truyền MIMO đ−ợc hình thành sử dụng ma trận tế bào l−u trữ đa thức hàm truyền t−ơng ứng Ví dụ :
>> num = { 10, [ 10]; -1, [3 ] } ; % mảng tế bào >> den= { [ 10 ], [1 10 ]; [ ], [1 3 ] ; %m¶ng tÕ
% bµo bËc hai thay cho hệ thống có đầu vào đầu
Hµm trun Hµm trun Hµm trun Hµm trun Liªn tơc
H(s)= = m<=n MATLAB: :num = [ N1 N2 Nm+1 ], den =[ D1 D2 Dn+1 ] Rêi r¹c
H(z) = = m<=n MATLAB: num [N1 N2 Nn+1 ], den = [ D1 D2 Dn+1] ( mÉu z-1 )
H(z) == MATLAB: num = [ N1 N2 Nn+1], den =[ D1 D2 D n+1 ]
Zero Zero Zero
Zero polepolepolepole GainGainGainGain
Liªn tơc H(s)== m<n MATLAB: K, Z = [Z1 ; Z2 ; Zm], P=[ P1 ; Pn ] Rêi r¹c H(z)= = m<= n MATLAB: K, Z = [Z1 ; Z2 ; Zm], P=[ P1 ; .Pn ]
Không gian trạng thái Không gian trạng thái Không gian trạng thái Không gian trạng thái Liªn tơc
x= Ax + Bu y = Cx + Du MATLAB : A, B, C, D Rêi r¹c
x[n+1] = Ax[n] + B u[n] y[n] = C x[n] + Du[n] MATLAB : A, B, C, D =
Cã tơng quan tự nhiên 1-1 số mảng tế bào số ma trận hàm truyền
21.2 §èi t 21.2 §èi t 21.2 §èi t
(179)MATLAB cung cấp cách để tóm l−ợc mảng liệu t−ơng quan thành đối t-−ợng tuyến tính, bất biến theo thời gian, đối tt-−ợng LTI Điều giúp cho việc quản lí chúng đ−ợc dễ dàng Ví dụ:
>> my_sys= zpk( z, p, k )
Zero/ pole / gain from input to output:
- s
Zero / pole / gain from input to output: ( s+1 )
- (s+10) (s+2)
xây dựng đối t−ợng LTI zero-pole-gain có tên my_sys có chứa hệ thống đầu vào đầu Cũng nh− vậy:
>> H = tf( num, den )
Transfer function from input to output 10
#1: s+10 -1 #2: s
Transfer function from input to output s+10
#1:
s^2+6 s+10 3s+1 #2:
s^2 + s +
tạo hàm truyền đối t−ợng LTI từ mảng tế bào num num num num dendenden nhập vào tr−ớc Cũng nh− den hệ thống hiển thị chế độ dễ hiểu
Cuối cùng, đối t−ợng LTI không gian trạng thái đ−ợc hình thành nh− sau: >> a = [ ; -2 -4 ] ; b = [ ]; c = [ 1 ] ; d =0;
% ®inh nghÜa ma trËn không gian trạng thái >> system2=ss( a, b, c, d)
a=
x1 x2
x1 1.00000
x -2.00000 -4.00000 b =
(180)c =
x1 x2 y1 1.00000 1.00000 d=
u1
y1
HÖ thèng liªn tơc theo thêi gian
Trong tr−ờng hợp này, hệ thống xác định thành phần biến gắn với phần tử xác nhận hệ thống liên tục theo thời gian
Để xây dựng hệ thống gián đoạn theo thời gian, sử dụng hàm zpk, tf,zpk, tf,zpk, tf,zpk, tf, hàm ss, ss, ss, ss, bạn thiết phải khai báo chu kì lấy mẫu kèm theo với hệ thống đ−ợc xem nh− đối số đầu vào cuối cùng.Ví dụ:
>> dt_sys = tf ( [ 0.2 ], [ -1 ], 0.01 ) hµm trun
z+0
z-1
thêi gian lÊy mÉu : 0.01
Hệ thống rời rạc theo thời gian có chu kì lấy mẫu : 0.01 21.3 Khôi phục liệu
21.3 Khôi phục liệu 21.3 Khôi phục liệu 21.3 Khôi phục liệu
Giả sử đối t−ợng LTI đ−ợc tạo dựng, liệu tách cách sử dụng hàm tfdata, zpkdatatfdata, zpkdatatfdata, zpkdatatfdata, zpkdata,,,, ssdatassdatassdatassdata Ví dụ :
>> [nz, dz ]= tfdata (dt_sys ) % tách nh mảng tế bào nz =
[1x2 double ] dz =
[1x2 double ]
>> [ n z, dz ] = tfdata (dt_sys, 'v' ) % chÝch nh− lµ vector z =
[ -0.2 ] p =
[ ] k =
>> [z, p, k ] =zpkdata ( dt_sys, 'v' ) % chÝch nh− lµ vector z =
-0.2 p =
1 k =
1
(181)a =
1 b =
1 c =
1.2 d =
1
Nếu nh− đối t−ợng LTI đ−ợc xây dựng đ−ợc tách theo mẫu
21.4 Sự nghịch đảo đối t 21.4 Sự nghịch đảo đối t 21.4 Sự nghịch đảo đối t
21.4 Sự nghịch đảo đối t−ợng LTI−ợng LTI−ợng LTI −ợng LTI
Bên cạnh việc tách đối t−ợng LTI thành nhiều kiểu khác nhau, chúng cịn đ−ợc chuyển đổi thành dạng khác cách sử dụng hàm tự tạo Ví dụ : >> t = tf ( 100, [1 100]) % xây dựng hàm truyền
Hµm trun : 100 s^2 + s + 100 >> sst = ss(t )
a = x1 x2
x1 -6.00000 -6.25000
x2 16.00000
b = u1
x1 2.00000
x2
c = x1 x2
y1 3.12500
d = u1
y1
HƯ thèng liªn tơc theo thêi gian >> zpkt = zpkt(t)
Zero / pole / gain: 100
(s^2+ s + 100 ) 21.5 Thuật toán đối t 21.5 Thuật toán đối t 21.5 Thuật toán đối t
21.5 Thuật toán đối t−ợng LTI−ợng LTI−ợng LTI−ợng LTI
Sử dụng đối t−ợng LTI cho phép bạn thiết lập thuật toán sơ đồ khối Ví dụ, hàm truyền lặp hệ thống hồi tiếp G( s ) Thì hàm truyền lặp gần : T(s ) = G(s ) ( + G(s) ) Trong MATLAB, điều nầy bắt đầu:
>> g = tf( 100, [1 0]) % hàm truyền lặp Hàm truyền:
(182)s^2 + s >> t = g/(1+g)
hµm trun:
100 s^2 + 600 s
s^4 + 12 s^3 + 136 s^2 + 600 s
>> t = minreal(t) % thiÕt lËp hµm hủ pole-zero Hµm trun:
100
s^2 + s + 100
21.6 Ph©n tÝch hƯ thèng 21.6 Ph©n tÝch hƯ thèng 21.6 Ph©n tÝch hƯ thèng 21.6 Ph©n tÝch hÖ thèng
Hộp dụng cụ hệ thống điều khiển( The Control System Toolbox )The Control System Toolbox )The Control System Toolbox )The Control System Toolbox ) có đề cập đến việc phân tích hệ thống số thiết kế hàm Để hoàn thiện tài liệu này, xem helphelphelp trực tuyến help Để hiểu đ−ợc số đặc điểm của, tham chiếu đến đối t−ợng LTI open-loop closed-loop
>> g = zpk ( [ ], [ 0, -5, -10 ], 100 ) % hÖ thèng open-loop Zero/pole/gain :
100 s (s+5 ) ( s+ 10 )
>>t =minreal ( g /( +g ) ) HÖ thèng closed-loop Zero / pole/ gain:
100
(s+11.38 ) ( s^2 + 3.62 s ) + 8.789 ) Poles cđa hƯ thèng nµy lµ:
>>pole( t ) ans =
-11.387
-1.811 + 2.3472 i -1.811 + 2.3472 i
(183)Hình 21.1 Hình 21.1 Hình 21.1 Hình 21.1 Đồ thị Bode đơn giản hệ thống closed-loop là: >> bode(t)
H×nh 21.2 H×nh 21.2 H×nh 21.2 Hình 21.2 Đáp ứng xung hệ thống
(184)H×nh 21.3 H×nh 21.3 H×nh 21.3 H×nh 21.3
Ngồi ph−ơng pháp nêu trên, hộp cơng cụ hệ thống điều khiển cịn đa thêm cho bạn lệnh trợ giúp ltiview ltiview ltiview ltiview Hàm cho phép bạn lựa chọn đối t−ợng LTI từ cửa sổ lệnh quan sát đáp ứng khác hình
21.7 Danh sách hàm hộp công cụ hệ thống điều khiển 21.7 Danh sách hàm hộp công cụ hệ thống điều khiển 21.7 Danh sách hàm hộp công cụ hệ thống điều khiển 21.7 Danh sách hàm hộp công cụ hệ thống điều khiển Sự hình thành kiểu LTI
Sự hình thành kiểu LTI Sự hình thành kiểu LTI Sự hình thành kiểu LTI
ss Xây dựng kiểu không gian trạng thái zpk Xây dựng kiểu zero-pole-gain
tf Xây dựng kiểu hàm truyền
dss Chỉ rõ kiểu hoạ pháp không gian trạng thái
filt rõ lọc sè
set Thiết lập sửa đổi đặc tíh LTI ltiprops Trợ giúp tri tiết cho c tớnh TTI
Phân tách liệu Phân tách liệu Phân tách liệu Phân tách liệu
ssdata Tách ma trận không gian trạng thái
zpkdata Tách liệu zero-pole-gain tfdata Tách tử số mẫu số dssdata Chỉ verion ssdata
(185)Đặc tính loại Đặc tính loại Đặc tính loại Đặc tính loại
class kiÓu model (‘ ss ‘, ‘ zpk ‘, or ‘ tf ‘ ) size Sè chiỊu cđa đầu vào/ đầu
isempty True cho kiểu LTI rỗng
isct True cho kiểu liên tục theo thời gian isdt True cho loại gián đoạn theo thêi gian isproper True cho kiĨu LTI c¶i tiÕn
issiso True cho hệ thống đầu vào/ đầu isa Kiểm tra Loại LTI đợc đa
Sự nghịch đảo Sự nghịch đảo Sự nghịch đảo Sự nghịch đảo
ss Chuyển đổi thành không gian trạng thái zpk Chuyển đổi thành zero-pole-gain
tf Chuyển đổi thành hàm truyền
c2d Chuyển đổi từ liên tục sang gián đoạn
d2d Lấy mẫu lại hệ thông rời rạc thêm độ trễ đầu vào
C¸c phÐp to¸n C¸c phÐp to¸n C¸c phÐp to¸n C¸c phép toán
+ - Cộng trõ hƯ thèng LTI ( m¾c song song )
* Nhân hệ thống LTI (mắc nối tiếp ) \ Chia trái: sys1\sys2 nghĩa là: inv
(sys1)*sys2
/ Chia ph¶i: sys1/sys2 cã nghÜa sys1*inv(sys2 )
Hoán vị ngợc
. Hoán vị đầu vào/đầu
[ ] S kết nối hệ thống LTI ngang/ dọc inv Nghịch đảo hệ thống LTI
§éng häc §éng häc §éng häc §éng häc
pole, eig HƯ thèng poles
tzero Sự truyền hệ thống số pzma Biu Pole-Zero
dcgai Định hớng DC ( tần số thấp) norm Chỉ tiêu hƯ thèng LTI
covar Covar of response lªn nhiễu trắng
damp Tần số tự nhiên sù suy gi¶m cùc hƯ thèng
esort Xắp xếp cực tính liên tục phần thực dsort Xắp xếp cực tính rời rạc biên độ pade Xp x pade ca thi gian tr
Đáp ứng thời gian Đáp ứng thời gian Đáp ứng thời gian Đáp ứng thời gian
(186)impulse Đáp ứng xung
inittial Đáp ứng hệ thống không gian trạng thái với trạng thái khởi tạo
lsim Đáp ứng đầu vào tuỳ ý Ltiview Đáp ứng phân tích GUI
gensig Phát sinh tín hiệu đầu vào cho lsim stepfun Phát sinh đầu vào đơn vị -bớc Đáp ứn
Đáp ứn Đáp ứn
Đáp ứng tần sốg tần sèg tÇn sèg tÇn sè
bode Đồ thị Bode đáp ứng tần số sigma Đồ thị giá trị tần số
nyquist §å thÞ Nyquist
nichols Biểu đồ Nichols
ltiview Đáp ứng phân tích GUI
evalfr Đáp ứng tần số tần số định
margin Giới hạn pha tăng ích Liên kÕt hƯ thèng
Liªn kÕt hƯ thèng Liªn kÕt hƯ thèng Liªn kÕt hƯ thèng
append Nhóm hệ thống LTI việc thêm đầu đầu vào parallel Kết nối song song ( t¬ng tù overload + )
series KÕt nèi nèi tiÕp ( t¬ng tù overload * ) feeback KÕt nèi håi tiÕp hai hÖ thèng
star TÝch sè star( kiĨu liªn kÕt LFT )
connect Chuyển hố từ kiểu khơng gian trạng thái sang đặc tính biểu đồ khối
Dơng thiÕt kÕ cỉ ®iĨn Dơng thiÕt kÕ cỉ ®iĨn Dơng thiÕt kÕ cỉ ®iĨn Dơng thiÕt kÕ cỉ ®iĨn
rlocus Quỹ tích nghiệm acker Sự thay cực SISO place Sự thay MIMO estime Khuôn dạng đánh giá
C«ng thiÕt kÕ LQG C«ng thiÕt kÕ LQG C«ng thiÕt kÕ LQG C«ng thiÕt kÕ LQG
lqr, dlqr Bé ®iỊu chØnh hồi tiếp phơng trình bậc hai tuyến tính
lqry Bộ điều chỉnh LQ với đầu phụ lqrd Bộ biến đổi LQ rời rạc sang liên tục kalman Bộ đánh giá Kalman
(187)Giải phép toán ma trận Giải phép toán ma trận Giải phép toán ma trận Giải quyÕt phÐp to¸n ma trËn
lyap Giải phơng trình Lyapunop liên tục dlyap Giải ph ơng trình Lyapunop rời rạc care Giải phơng trình đại số Riccati liên tục dare Giải phơng trình đại số Riccati rời rạc Sự
Sù Sù
Sù biĨu diƠnbiĨu diƠnbiĨu diƠnbiĨu diƠn
crtldemo Giới thiệu đến hộp công cụ hệ thống điều khiển jetdemo Thiết kế kinh điển chống suy giảm âm
phơng tiện vận chuyển trực thăng diskdemo Thiết kế điều khiển số ổ đĩa cứng
milldemo Điều khiển LQG SISO MIMO hệ thống cán thép tròn
kalmdemo Thiết kế lọc Kalman mô -oOo -
Chơng 22
Hép dơng xư lÝ tÝn hiƯu
22.1 Ph©n tÝch tÝn hiƯu 22.1 Ph©n tÝch tÝn hiƯu 22.1 Ph©n tÝch tÝn hiƯu 22.1 Ph©n tÝch tÝn hiƯu
Hép c«ng xư lÝ tín hiệu cung cấp công cụ cho kiểm tra phân tích tín hiệu; kiểm tra phân tích tần số phổ xây dựng lọc
chúng ta xây dựng tín hiệu nhiễu sau phân tích >> t = linspace(0,10,512); % trục thời gian
>> x = 3*sin(5*t)- 6*cos(9*t)+ 5*randn(size(t));
(188)
H×nh 22.1H×nh 22.1H×nh 22.1H×nh 22.1 >> x = fft(x);
>> X = fft(x); >> Ts = t(2)- t(1); >> Ts = t(2)- t(1) Ts =
0.0196
>> Ws = 2*pi/Ts; >> Wn = Ws/2 Wn =
160.5354
>> W = linspace(0,Wn,length(t)/2); >> Xp = abs(X(1:length(t)/2)); >> plot(w,Xp)
(189)H×nh 22.2 >> i = find(w<=20);
>> plot(w(i),Xp(i)) >> grid
>> xlabel('tan so, rad/s')
>> titile('Pho bien cua tin hieu nhieu')
0 10 15 20
0 200 400 600 800 1000 1200 1400
tan so, rad/s Pho bien cua tin hieu nhieu
(190)chơng 23
trợ giúp 23.1 Cưa sỉ lƯnh trỵ gióp
23.1 Cưa sỉ lƯnh trỵ gióp 23.1 Cưa sỉ lƯnh trỵ gióp 23.1 Cưa sỉ lƯnh trỵ gióp
MATLAB trợ giúp số lệnh giúp bạn truy nhập thông tin nhanh chóng lệnh MATLAB hàm bên cửa sổ lệnh, bao gồm hel hel hel helpppp, lookforlookforlookforlookfor,whatsnewwhatsnewwhatsnewwhatsnew, vµ infoinfoinfoinfo
23.1.1 LƯnh help 23.1.1 LÖnh help 23.1.1 LÖnh help 23.1.1 LÖnh help
Lệnh helphelphelphelp MATLAB cách đơn giản để nhận trợ giúp bạn biết đ−ợc topic cần trợ giúp Nhập vào lệnh helphelphelphelp topic, hình hiển thị nội dung topic nh− tồn Ví nh−:
>> help sqrt
SQRT Square root
SQRT(x) is the square root of the elements of x complex results are produced if X is not positive
See also SQRT
B¹n nhận đợc trợ giúp MATLAB hàm bậc hai Mặt khác, nh bạn nhập vào dòng lÖnh sau:
>> help cows
cows not found
thì MATLAB cows Bởi hàm th viện mẫu
Chú ý: ví dụ trên, SQRT đ−ợc viết chữ hoa Tuy nhiên sử dụng sqrt không chữ in, MATLAB ngôn ngữ chặt chẽ nên SQRT không đ−ợc biết đến trình sinh lỗi
>> SQRT (2)
??? SQRT ( |
Missing operator, coma, or semicolon
Để tóm tắt, tên hàm đ−ợc in hoa dễ đọc nhng sử dụng, hàm sử dụng kí tự thơng th−ờng
Lệnh helphelphelphelp hoạt động tốt nếu nh− bạn biết xác topic mà bạn muốn trợ giúp mà điều th−ờng khó thực hiện, helphelphelphelp h−ớng dẫn bạn trực tiếp truy tìm xác topic mà bạn muốn, bạn đơn giản nhập vào helphelphelphelp mà khơng có topic
>> help
HELP topics
(191)MATLAB : specfun - hàm toán học đặc biệt
MATLAB : matfun - hàm ma trận - đại số học tuyến tính MATLAB : datafun - hàm biến đổi fourier phân tích liệu MATLAB : polyfun - đa thức phép nội suy
MATLAB : funfun - phơng án giải ODE hàm hàm MATLAB : sparfun - ma trËn sparfun
MATLAB : graph2d - đồ hoạ chiều MATLAB : graph3d - đồ hoạ chiều MATLAB : specgraph - đồ thị phổ MATLAB : graphics - thao tác đồ hoạ
MATLAB : uitools - công cụ giao tiếp ng−ời sử dụng đồ hoạ MATLAB : strfun - xâu kí tự
MATLAB : iofun - tƯp vµo /
MATLAB : timefun - ngµy tháng thời gian
MATLAB : datattypes - cấu trúc kiểu liệu MATLAB : MacOS - hàm Macintosh MATLAB : demos - ví dụ minh hoạ
MATLAB : specmat - ma trận đặc biệt MATLAB : local - tham chiếu
MATLAB : cántol - hép c«ng hƯ thèng ®iỊu khiĨn MATLAB : signal - hép c«ng xư lÝ tÝn hiƯu
MATLAB : symbolic - hộp công cụ toán học Thêm trợ gióp th− mơc: topic, nhËp vµo ‘ help topichelp topichelp topichelp topic‘ 23.1.2 LÖnh lookfor
23.1.2 LÖnh lookfor 23.1.2 LÖnh lookfor 23.1.2 LÖnh lookfor
LÖnh lookforlookforlookforlookfor cung cấp trợ giúp việc tìm kiếm tất dòng đầu help help help help topic
topic topic
topic,và M-file đờng dẫn mà MATLAB tìm, trả lại danh sách tất file chứa từ khoá mà bạn khai báo Một điều quan trọng từ khoá không cần thiết lệnh MATLAB Ví dụ:
>> lookfor complex
CONJ complex conjugate IMAG complex imaginary part REAL complex real part
CDF2RDF complex diagonal form to real block diagonal form RSF2CSF real block diagonal form to complex diagonal form CPLXPAIR sort numbers into complex conjugata pairs
Từ khoá complexcomplexcomplex lệnh MATLAB, nhng đợc tìm ë complex phÇn helphelphelphelp gåm lƯnh cđa MATLAB NÕu muốn biết thông itn lệnh này, hày nhập vµo tõ lƯnh helphelphelphelp VÝ dơ:
>> help CONJ
CONJ complex
CONJ (x) is the complex conjugate of X
(192)See also : REAL, IMAG, I, J
23.1.3 LƯnh whatsnew vµ info 23.1.3 LƯnh whatsnew vµ info 23.1.3 LƯnh whatsnew vµ info 23.1.3 LƯnh whatsnew vµ info
Đúng nh− tên gọi nó, whatsnewwhatsnewwhatsnewwhatsnew infoinfoinfoinfo hiển thị thơng tin thay đổi cải tiến MATLAB hộp dụng cụ nó, dùng mà khơng có đối số,
info info info
info hiển thị thông tin chung MATLAB, phong pháp tiếp cận MathWorks, cịn nều dùng có đối số, ví nh−: whatsnewwhatsnewwhatsnewwhatsnew MATLAB info signalinfo signalinfo signalinfo signal,,,, file ReadmeReadmeReadmeReadme chứa thơng tin ToolboxToolboxToolboxToolbox hiển thị, tồn
23.2 Cưa sỉ trỵ gióp 23.2 Cưa sỉ trỵ gióp 23.2 Cưa sỉ trỵ gióp 23.2 Cưa sỉ trỵ gióp
Một mở rộng hệ thống trợ giúp MATLAB5 cửa sổ helphelphelp Lệnh help
helpwin helpwin helpwin
helpwin mở cửa sổ hình bạn bạn dùng chuột di chuyển sáng đến mục mà bạn quan tâm Nếu dùng lệnh helpwin helpwin helpwin helpwin mà khơng có tham số, cửa sổ helphelphelphelp có dạng nh− hình sau:
H×nh 23.1H×nh 23.1H×nh 23.1H×nh 23.1
NhÊn kép vào topic hiển thị cửa sỉ helphelphelp, sÏ hiĨn thÞ mét cưa sỉ míi help chứa topic hàm gắn với
(193)
c¸c Mc¸c M File cđa Student c¸c Mc¸c M File cđa Student File cđa Student File cđa Student Editionionionion HELP Topic
Th− mơc MATLAB
Mục đích chung câu lệnh Mục đích chung câu lệnh Mục đích chung câu lệnh Mục đích chung câu lệnh
Th«ng tin chung Th«ng tin chung Th«ng tin chung Th«ng tin chung
help Trỵ gióp trùc tun, hiĨn thị văn dòng lệnh helpwin Trợ gióp trùc tun,cưa sỉ truy xt
helpdesk Tra nhanh thông tin thắc mắc demo Chạy chơng trình mẫu
whatsnew Hiển thị file Readme
Readme Th«ng tin míi cËp nhËt MATLAB Quản lí không gian làm việc
Quản lí không gian làm việc Quản lí không gian làm việc Quản lí không gian làm việc
who Danh sách biến
whos Danh sách biến tại, khuôn dạng dài clear Xoá bỏ biến hàm khỏi nhớ
pack Hợp không gian làm việc
load Nạp biến vào không gian làm việc từ đĩa save L−u biến vào đĩa
quit Thoát khỏi mục MATLAB Quản lí đ
Quản lí đ Quản lí đ
Quản lí đờng dẫnờng dẫnờng dẫn ờng dẫn
path Nhận/tạo đờng dẫn
addpath Thờm th mc theo đờng dẫn rmpath Rời th− mục từ từ đ−ờng dẫn editpath Sửa đổi đ−ờng dẫn
Qu¶n lí hàm lệnh Quản lí hàm lệnh Quản lí hàm lệnh Quản lí hµm vµ lƯnh
what Danh sách file đặc tr−ng MATLAB th− mục type Danh sỏch file-M
edit Soạn thảo filr-M
lookfor Tìm kiếm tất file-M theo từ khoá which Xác định hàm file
pcode Tạo file-P
inmem Danh sách hàm nhớ mex Biên dịch hàm MEX
Câu lệnh Câu lệnh Câu lệnh
Câu lệnh điều khiểnều khiểnều khiểnều khiển
echo LÊy l¹i lƯnh tõ file-M
more Kiểm soát đầu trang cửa sỉ lƯnh
(194)format Thiết lập định dạng cho đầu
Hoạt động lệnh hệ thống Hoạt động lệnh hệ thống Hoạt động lệnh hệ thống Hoạt động lệnh hệ thống
cd Thay đổi th− mục làm việc hin ti
pwd Hiển thị th mục làm việc
dir Danh sách th mục
delete Xoá file
getenv Lấy lại biến môi trờng
! Thực câu lệnh hệ điều hành
dos Thực lệnh dos trả lại kết
unix Thực lệnh unix trả lại kết
vms Thực lệnh VMS DCL trả lại kết
web Mở trình xét duyệt Web
computer Loại máy tính M
M M
M file rèifile rèifile rèifile rèi
debug Danh s¸ch
c¸c lƯnh gỡ rối
dbstop Tạo điểm
ngắt
dbclear Di chuyển
điểm ngắt
dbcont TiÕp tơc thùc hiƯn lƯnh
dbstack HiĨn thÞ hàm gọi ngăn xếp
dbstatus Danh sách
các điểm ngắt
dbstep Thực
một nhiều dòng
dbtype Danh sách file-M với số lợng dòng
dbup Thay i phm vi khơng gian làm việc địa ph−ơng dbquit Thốt khỏi chế độ gỡ rối
dbmex file- MEX
rèi ( chØ cho UNIX )
Các toán tử kí t Các toán tử kí t Các toán tử kí t
(195)Các toán tư C¸c to¸n tư C¸c to¸n tư C¸c to¸n tư
plus (+) Céng
uplus (+) Céng unary minus ( - ) Trõ
uminus (-) Trõ unary mtimes( *) Nh©n ma trËn times (*) Nhân mảng
mpower (^) Luỹ thõa ma trËn power ( ^ ) Luü thõa mảng mldivide (\ ) Chia trái ma trận
mrdivide /) Chia ph¶i ma trËn ldivide (.\ ) Chia trái mảng
mdivide (./ ) Chia phải ma trận kron Sản phẩm căng To¸n t
To¸n t To¸n t
To¸n tư quan hƯư quan hƯư quan hƯư quan hƯ
eq (== ) B»ng
ne ( ~= ) Kh«ng b»ng lt (< ) Nhá thua gt (>) Lín h¬n
le (<= ) Nhá thua ge (>= ) Lớn b»ng To¸n tư logic
To¸n tư logic To¸n tư logic To¸n tư logic
and ( & ) Logic or ( | ) Logic not ( ~ ) Logic phủ định xor Logic phủ định
any True nÕu mäi phần tử vector khác không all True tất phần tử khác không Các toán tử Bitwise
C¸c to¸n tư Bitwise C¸c to¸n tư Bitwise C¸c to¸n tư Bitwise
bitand Bitwise and bitcmp Bit hoµn thµnh bitor Bitwise OR
bitmax Maximum floating point integer bitset ThiÕt lËp bÝt
bitget NhËn bÝt bitshift DÞch bit ThiÕt lËp c¸c kÝ tù
ThiÕt lËp c¸c kÝ tù ThiÕt lËp c¸c kÝ tù ThiÕt lËp c¸c kÝ tù
union ThiÕt lËp liªn kÕt unique ChØ sù nhÊt
intersect Thiết lập giao setdiff Tạo khác setxor Thiết lập phủ định
(196)Các kí tự đặc biệt Các kí tự đặc biệt Các kí tự đặc biệt Các kí tự đặc biệt
colon Dấu hai chấm () Dấu ngoặc đơn [ ] Dấu ngoắc vuông { } Dấu ngoắc nhọn Chấm thập phân
Truy nhËp cÊu tróc tr−êng Th− mơc mĐ
Sù tiÕp tơc , DÊu ph¶y ; DÊu chÊm ph¶y % Chú thích
! Liên quan câu lệnh hệ điều hành = Gán
Nháy transpose(.) Chuyển vị
ctranspose( ) Chuyn vị số pắc liên hợp horzcat [, ] Gép chuỗi theo chiều ngang vertcat[; ] Gép chuỗi theo chiều đứng subsasgn Gán subscripted
bsref Tham chiÕu subscripted
subsindex ChØ sè subscripted CÊu Trúc ngôn ngữ lập trình
Câu lệnh điều khiển Câu lệnh điều khiển Câu lệnh điều khiển Câu lệnh ®iỊu khiĨn
if §iỊu kiƯn thùc hiƯn c©u lƯnh elseif Dïng víi if
else Dïng víi if
end KÕt thóc lƯnh if, for, while for Lặp lại câu lệnh số lần while vòng lặp while
break Thoát khỏi vòng lặp for while return Trë vỊ tõ hµm gäi
pause Tạm dừng nhấn phím Thi hành định gi
Thi hành định gi Thi hành định gi Thi hành định giáááá
eval Thùc hiƯn x©u víi biĨu thøc MATLAB feval Thực hàm xâu
evalin Định giá biểu thức không gian làm việc builtin Thực hàm đợc tạo ph−ơng pháp xếp chồng assignin Gán biến không gian làm việc
(197)Script, hàm, biến Script, hàm, biến Script, hàm, biến Script, hàm, biÕn
script VỊ script MATLAB vµ file-M function Thêm hàm
global Định nghĩa biến toàn cục
mfilename Tên M-file thực lists Dấu phảy phân chia c¸c danh s¸ch
exist Kiểm tra xem biến hàm có đ−ợc định nghĩa hay khơng
isglobal True biến tồn cục Thao tác với đối số
Thao tác với đối số Thao tác với đối số Thao tác với đối số
nargchk Công nhận số l−ợng đối số đầu vào nargin Số l−ợng hàm đối số đầu vào nargout Số l−ợng hàm đối số đầu
varagin Danh sách đối số đầu vào, độ dài biến varaout Danh sách đối số đầu ra, độ dài biến inputname Tên đối s u vo
Hiển thị thông báo Hiển thị thông báo Hiển thị thông báo Hiển thị thông báo
error Hiển thị thông báo lỗi hàm huỷ warning Hiển thị thông báo cảnh báo lasterr Thông báo lỗi trớc
errortrap Bỏ qua lỗi trình kiểm tra disp Hiển thị mảng
fprintf Hin th thụng báo định dạng sprintf Ghi liệu định dạng vo mt xõu u vo t
Đầu vào t Đầu vào t
Đầu vào tơng hỗơng hỗơng hỗ ơng hỗ
input Nhắc ngời sử dụng nhập vµo keyboard Gäi bµn phÝm tõ M-file
pause Đợi ngời sử dụng nhập liệu vào uimenu Tạo giao diện bảng chọn-ngời sử dụng uicontrol Tạo giao diện ngời điều khiển
Ma trận Thao tác với ma trận Ma trận Thao tác với ma trận Ma trận Thao tác với ma trận Ma trận Thao t¸c víi ma trËn
Ma trËn Ma trận Ma trận Ma trận
zeros Mảng số không ones Mảng số
eye Nhận dạng ma trận repmat Tái tạo mảng
rand Số ngẫu nhiên xắp xếp đồng randn Số ngẫu nhiên xắp xếp thông th−ờng linspace Vector khơng gian tuyến tính
(198): Vector không gian thông thờng số ma trận
Thông tin mảng sở Thông tin mảng sở Thông tin mảng sở Thông tin mảng sở
size Kích cỡ ma trận length Độ dài vector ndims Số chiÒu
disp Hiển thị ma trận văn isempty True ma trận trống isequal True ma trận đồng isnumaric True cho mảng số
islogical True cho m¶ng logic
logical Chuuyển đổi giá trị số thành logic
Thao t¸c víi ma trËn Thao t¸c víi ma trËn Thao t¸c víi ma trËn Thao t¸c víi ma trËn
reshape Thay đổi kích c
diag Ma trận đờng chéo đờng chÐo cđa ma trËn tril TrÝch phÝa d−íi ma trËn tam gi¸c
triu Trích phía ma trận tam giác fliplr Ma trận flip theo h−ớng trái /phải flippud Ma trận flip theo h−ớng trên/ dới flipdim Ma trận flip dọc theo chiều khai báo rot90 Quay góc 90
find Tìm số phần tử khác kh«ng end ChØ sè cuèi
sub2ind Chỉ số tuyến tính từ multiple subscripts ind2sub Multiple subscripts từ số tuyến tính Hằng biến đặc biệt
Hằng biến đặc biệt Hằng biến đặc biệt Hằng biến đặc biệt
ans Trả lại kết biểu thức không đ−ợc gán eps Viết d−ới dạng dấu phảy động
realmax Số dấu phảy động d−ơng lớn realmin Số dấu phảy động d−ơng nhỏ pi 3.1415926535897
i, j Đơn vị ảo inf Vô
NaN Không phải số isNaN True NaN
isinf True số phần tử không vô isfinite True số phần tử vô flops Đếm số chữ số sau dấu phảy động
Các biến đặc biệt Các biến đặc biệt Các biến đặc biệt Các biến đặc biệt
(199)pi i, j inf
NaN Không phải dạng số clock §ång hå t−êng date Ngµy
flops Đếm hoạt động dấu phảy động nargin Số l−ợng đối số hàm vào narout Số l−ợng đối số hàm
Các loại ma trận đặc biệt Các loại ma trận đặc biệt Các loại ma trận đặc biệt Các loại ma trận c bit
comban Bầu bạn
diag Đờng chéo
eye Nhận dạng
gallery BÝ mËt
hadamar Hadamard
hankel Hankel
hilb Hilbert
invhilb Hilbert đảo
linspace Vector
logspace Vector
magic Vu«ng Magic
meshdom Thùc hiƯn cho mesh plots
ones H»ng
rand Các phần tử ngẫu nhiên
toeplitz Toeplitz
vander Vandermonde
zeros Kh«ng
Các hàm toán học thông th Các hàm toán học thông th Các hàm toán học thông th Các hàm toán học thông thờngờngờng ờng Các hàm l
Các hàm l Các hàm l
Các hàm lợng giácợng giácợng giác ợng giác
sin Hµm sine
cos Hµm cosine
tan Hµm tangent
asin Hµm arcsine
acos Hµm arccosine
atan Hµm arctangent
atan2 Hàm arctan góc phần t
sinh Sine hyperpolic
cosh Cosine hyperpolic
tanh Tangent hyperpolic
asinh Arcsine hyperpolic
acosh Arccosine hyperpolic
(200)Các hàm toán học Các hàm toán học Các hàm toán học Các hàm toán học
abs Tr tuyt i biên độ số phức
angle Gãc pha
sqrt Căn bậc hai real Phần thực
imag Phần ảo
conj Phức liên hỵp
round Làm trịn đến số ngun gần fix Làm trịn đến khơng
floor Làm trịn đến âm vơ ceil Làm trịn đến vô sign Hàm dấu
rem Sự lu lại khối ( modulus) exp Hàm mũ sở e
log Logarithm tự nhiên log10 Log 10 sở
Cỏc hàm đặc biệt Các hàm đặc biệt Các hàm đặc biệt Các hàm đặc biệt
airy Hàm airy
besselj Hàm Bessel loại thứ bessely Hàm Bessel loại thứ hai
besselh Hàm Bessel loại thứ ba ( hàm Hankel ) besseli Sửa đổi hàm Bessel loại thứ besselk Sửa đổi hàm Bessel loại thứ hai beta Hm beta
betainc Hàm beta không hoàn toµn betaln Hµm logarithm beta
erf Hµm lỗi
erfc Hàm lỗi thành phần ellipk Phép tích phân elliptic ellipj Hàm elliptic Jacobian
gamma Hµm gamma
gammaln Hµm logarithm gamma inverf Hàm lỗi ngợc
rat Xấp xỉ Hµm lÝ thuyÕt sè häc
Hµm lÝ thuyÕt sè häc Hµm lÝ thuyÕt sè häc Hµm lÝ thuyÕt sè häc
factor HƯ sè s¬ khai
isprime True số sơ khai primes Danh sách số sơ khai gcd Bộ chia chung lín nhÊt lcm PhÐp nh©n chung nhá nhÊt rat Xấp xỉ hữu tỉ
rats Đầu hữu tỉ perms Sự hoán vị
nchoosek Sự tổ hợp chập K N phần tử Đồ hoạ