1. Trang chủ
  2. » Kỹ Năng Mềm

Tin hoc

215 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

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ạ

Ngày đăng: 17/05/2021, 18:24

w