Tự học Matlab

pdf 138 trang phuongnguyen 2971
Bạn đang xem 20 trang mẫu của tài liệu "Tự học Matlab", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftu_hoc_matlab.pdf

Nội dung text: Tự học Matlab

  1. Pikachu – Vietdown.org Ch−ơng 1 Cơ sở Matlab 1.1 Tổng quan về Matlab 1.1.1 Khái niệm về Matlab Matlab lμ một ngôn ngữ lập trình thực hμnh bậc cao đ−ợc sử dụng để giải các bμi toán về kỹ thuật.Matlab tích hợp đ−ợc việc tính toán, thể hiện kết quả, cho phép lập trình, giao diện lμm việc rất dễ dμng cho ng−ời sử dụng. Dữ liệu cùng với th− viện đ−ợc lập trình sẵn cho phép ng−ời sử dụng có thể có đ−ợc những ứng dụng sau đây. • Sử dụng các hμm có sẵn trong th− viện, các phép tính toán học thông th−ờng • Cho phép lập trình tạo ra những ứng dụng mới. • Cho phép mô phỏng các mô hình thực tế. • Phân tích, khảo sát vμ hiển thị dữ liệu. • Với phần mềm đồ hoạ cực mạnh • Cho phép phát triển,giao tiếp với một số phần mềm khác nh− C++, Fortran. 1.1.2 Tổng quan về cấu trúc dữ liệu của MATLAB, các ứng dụng Matlab lμ một hệ thống t−ơng giao,các phần tử dữ liệu lμ một mảng( mảng nμy không đòi hỏi về kích th−ớc ). Chúng cho phép giải quyết các vấn đề liên quan đến lập trình bằng máy tính,đặc biệt sử dụng các phép tính về ma trận hay véc tor vμ có thể sử dụng ngôn ngữ C học Fortran lập trình rồi thực hiện ứng dụng lập trình đó bằng các câu lệnh goị từ MATLAB .MATLAB đ−ợc viết tắt từ chữ matrix laboratory tức lμ th− viện về ma trận, từ đó phần mềm MATLAB đ−ợc viết nhằm cung cấp cho việc truy cập vμo phần mềm ma trận một cáh dễ dμng, phần mềm ma trận nμy đ−ợc phát triển bởi các công trình Linpack vμ Eispack . Ngμy nay MATLAB đ−ợc phát triển bởi Lapack vμ Artpack tạo nên một nghệ thuật phần mềm cho ma trận. a.Dữ liệu Dữ liệu của MATLAB thể hiện d−ới dạng ma trận( hoặc mảng –tổng quát), vμ có các kiểu dữ liệu đ−ợc liệt kê sau đây • Kiểu đơn single , kiểu nμy có lợi về bộ nhớ dữ liệu vì nó đòi hỏi ít byte nhớ hơn, kiểu dữ liệu nμy không đ−ợc sử dụng trong các phép tính toán học, độ chính xác kém hơn • Kiểu double kiểu nμy lμ kiểu thông dụng nhất của các biến trong MATLAB • Kiểu Sparse. • Kiểu int8, uint8, int16 . . . Trang 1
  2. • Kiểu char ví dụ ‘Hello’ • Kiểu cell. • Kiểu Structure. Trong MATLAB kiểu dữ liệu double lμ kiểu mặc định sử dụng trong các phép tính số học. Các bạn có thể tham khảo các kiểu dữ liệu khác trong đĩa CD Help MATLAB 6.0 b. ứng dụng MATLAB tạo điều kiện thuận lợi cho: • Các khoá học về toán học • Các kỹ s−, các nhμ nghiên cứu khoa học • Dùng MATLAB để tính toán ,nghiên cứu tạo ra các sản phẩm tốt nhất trong sản xuất. c.Toolbox lμ một công cụ quan trọng trong Matlab Công cụ nμy đ−ợc MATLAB cung cấp cho phép bạn ứng dụng các kỹ thuật để phân tích, thiết kế , mô phỏng các mô hình . Ta có thể tìm thấy toolbox ở trong mô tr−ờng lμm việc của . • Mạng nơron • Logic mờ • Simulink 1.1.3 Hệ thống MATLAB Hệ thống giao diện của MATLAB đ−ợc chia thμnh 5 phần • Môi tr−ờng phát triển. Đây lμ nơi đặt các thanh công cụ, các ph−ơng tiện giúp chúng ta sử dụng các lệnh vμ các file, ta có thể liệt kê một số nh− sau. + Desktop + Command Window + Command History + Browsers for viewinghelp • Th− viện, các hμm toán học Bao gồm các cấu trúc nh− tính tổng, sin cosin atan, atan2 etc , các phép tính đơn giản đến các phép tính phức tạp nh− tính ma trận nghich đảo, trị riêng, chuyển đổi furier ,laplace , symbolic library • Ngôn ngữ MATLAB Đó lμ các ngôn ngữ cao về ma trận vμ mảng, với các dòng lệnh, các hμm, cấu trúc dữ liệu vμo , có thể lập trình h−ớng đối t−ợng. • Đồ hoạ trong MATLAB Trang 2
  3. Bao gồm các câu lệnh thể hiện đồ hạo trong môi tr−ờng 2D vμ 3D, tạo các hình ảnh chuyển động, cung cấp các giao diện t−ơng tác giữa ng−ời sử dụng vμ máy tính . • Giao tiếp với các ngôn ngữ khác. MATLAB cho phép t−ơng tác với các ngôn ngữ khác nh− C , Fortran 1.1.4 Lμm quen với matlab Tr−ớc tiên để khởi động MATLAB bạn kích đúp (hoặc đơn) vμ biểu t−ợng file MATLAB.exe ,trên mμn hình xuất hiện cửa sổ sau.( Xem hình vẽ 1.1 ) Cửa sổ đó chứa các thanh công cụ( giao diện ng−ời vμ máy) cần thiết cho việc quản lý các files, các biến ,cửa sổ lệnh, có thể coi desktop lμ các panel gồm các ô, vùng, quản lý vμ tác dụng của từng cửa sổ nhỏ đ−ợc quản lý bởi desktop Hình vẽ 1.1 Trang 3
  4. Trên hình vẽ ta thấy cửa sổ desktop(cửa sổ lớn nhất), vμ các cửa sổ phụ của nó 1.1.5 Lμm việc với các cửa sổ của MATLAB đ−ợc quản lý bởi desktop a. Cửa sổ Command window : Lμ cửa sổ giao tiếp chính của Matlab bởi đây lμ nơi nhập giá trị các biến, hiển thị giá trị,tính toán giá trị của biểu thức, thực thi các hμm có sẵn trong th− viện (dạng lệnh), hoặc các hμm(dạng function) do ng−ời dùng lập trình ra trong M-files. Các lệnh đ−ợc đ−ợc nhập sau dấu nhắc ‘ >> ‘, vμ nếu có sai sót trong quá trình gõ(nhập) lệnh thì hãy nhấn phím Enter cho đến khi nhận đ−ợc dấu nhắc >>. Thực thi lệnh bằng nhấn phím Enter. Gõ các lệnh sau: >> A= pi/2 ; >> B= sin(A) B= 1 Hoặc ch−ơng trình soạn thảo trong M-file d−ới đây: % Chuong trinh trong M-file x= 0:pi/6:2*pi; y=sin(x); plot(x,y); % chuong trinh đ−ợc l−u với tên file lμ ve_sin.m thực thi ch−ơng trình trên trong cửa sổ Command window bằng dòng lệnh sau >> ve_sin Chúng ta thấy rõ hơn trong mục “ Sử dụng lệnh trực tiếp “ ở phần sau. b. Cửa sổ command History Các dòng mμ bạn nhập vμo trong cửa sổ Command window ( các dòng nμy có thể lμ dòng nhập biến ,hoặc có thể lμ dòng lệnh thực hiện hμm nμo đó ) đ−ợc giữ lại trong cửa sổ Command History ,vμ cửa sổ nμy cho phép ta sử dụng lại những lệnh đó bằng cách kích Trang 4
  5. đôi chuột lên các lệnh đó hoặc các biến, nếu nh− bạn muốn sử dụng lại biến đó. Xem hình 1.2 Kích đôi chuột lên lênh hoặc biến để sử dụng lại Hình 1.2 c. Cửa sổ Workspace: Lμ cửa sổ thể hiện tên các biến bạn sử dụng cùng với kích th−ơc vùng nhớ(số bytes), kiểu dữ liệu(lớp) ,các biến đ−ợc giải phóng sau mỗi lần tắt ch−ơng trình.(xem hình 1.3) Kích đôi chuột lên biến để xem dữ liệu(hoặcYêu thay đổi giá trị) Hình 1.3 Ngoμi ra nó cho phép thay đổi giá tri , cũng nh− kích th−ớc của biến bằng cách kích đôi chuột lên các biến. Hoặc kích vμo nút bên trái ngay cạnh nút save Ví dụ khi chọn biến(giả thử lμ biến b) rồi kích đúp(hoặc kích chuột vμo nút cạnh nút save) ta đ−ơc cửa sổ sau gọi lμ Array Editor: xem hình 1.4 Trang 5
  6. Tiêu đề lμ tên biến b , định dạng dữ liệu ở ô có tên lμ: Numeric format, mặc định lμ dạng short, Kích th−ớc size lμ 1 by 3 (tức lμ một hμng vμ 3 cột) ta có thể thay đổi kích th−ớc nμy bằng cách thay đổi số có trong ô kích th−ớc size. + Dùng cửa sổ nμy để l−u các biến ở d−ới lμ dữ liệu của biến b, ta có thể thay đổi chúng bằng cách thay đổi giá trị trong các ô đó Hình 1.4 Ví dụ Nhập biến >>b=[1 2 3 ]; >>x=pi; Tất cả các biến đều đ−ợc l−u trong Workspace trong đó thể hiện cả kích th−ớc (Size), số Bytes vμ kiểu dữ liệu(class) (8 bytes cho mỗi phần tử dữ liệu kiểu double cụ thể lμ 24 bytes dμnh cho b vμ 8 bytes dμnh cho a) d. Cửa sổ M-file Lμ một cửa sổ dùng để soạn thảo ch−ơng trình ứng dụng, để thực thi ch−ơng trình viết trong M-file bằng cách gõ tên của file chứa ch−ơng trình đó trong cửa sổ Commandwindow. Khi một ch−ơng trình viết trong M-file, thì tuỳ theo ứng dụng cụ thể, tuỳ theo ng−ời lập trình mμ ch−ơng trình có thể viết d−ới dạng sau +Dạng Script file :Tức lμ ch−ơng trình gồm tập hợp các câu lệnh viết d−ới dạng liệt kê ,không có biến dữ liệu vμo vμ biến lấy giá trị ra +Dạng hμm function có biến dữ liệu vμo vμ biến ra. e. Đ−ờng dẫn th− mục: Nơi l−u giữ các file ch−ơng trình 1.2 Nhập biến,lệnh trực tiếp từ cửa sổ Command Window: Sau khi xuất hiện dấu nhắc >> trong cửa sổ command window điều đó đồng nghĩa cho phép bạn nhập biến hoặc thực hiện các câu lệnh mong muốn. Trang 6
  7. Do dữ liệu của MATLAB đ−ợc thể hiện d−ới dạng matrận cho nên các biến dùng trong MATLAB dữ liệu của nó cũng thể hiện d−ới dạng ma trận, việc đặt tên biến không đ−ợc đặt một cáh tuỳ tiện mμ phải đặt theo một quy định • Tên ma trận(biến) phải bắt đầu bằng một chữ cái, vμ có thể chứa đến 19 ký tự lμ số hoặc chữ. • Bên phải dấu bằng lμ các giá trị của ma trận • Dấu chấm phẩy(; )lμ để phân cách các hμng, còn các giá trị trong hμng đ−ợc phân cách nhau bởi dấu phẩy(,) hoặc dấu cách( phím space). • Kết thúc nhập ma trận th−ờng có dấu chấm phẩy hoặc không tuỳ theo bạn muốn thể hiện kết quả của nó hay không. a. Nhập các biến, matrận, các lệnh liệt kê trực tiếp Thông th−ờng Matlab sử dụng 4 vị trí sau dấu phẩy cho các số thập phân có dấu phẩy chấm động, vμ sử dụng biến “ ans “ cho kết quả của phép tính. Ta có thể đăng ký biến thể hiện kết quả nμy của riêng mình . Xét tập các lệnh sau: Ví dụ tr−ờng hợp không sử dụng biến l−u kết quả, biến ans tự động đ−ợc gán >> 8+9 ans = 17 Nhập biến r = 8/10 trong cửa sổ CommandWindow nh− sau: >> r = 8/10 r=0.8000 Bạn có thể sử dụng các biến nμy cho các phép tính tiếp theo ví dụ nh−: >> s=10*r s= 8 Ví dụ nhập trực tiếp các số liệu nh− sau >> a=[1 2;3 4] a = 1 2 3 4 Matlab có hμng trăm hμm đ−ợc định nghĩa sẵn ví dụ nh− hμm tính sin . >> x=pi; %nhập biến x >> sin(x) % nhập lệnh sin(x), ấn enter để thực hiện lệnh tính sin(x) ans = 1.2246e-016 + Các phép tính sử dụng trong Matlab : Trang 7
  8. Trong MATLAB cũng sử dụng các phép toán thông th−ờng đ−ợc liệt kê trong bảngsau Ký tự ý nghĩa Lệnh Matlab + Cộng a + b a+b - Trừ a - b a-b * Nhân ab a*b / Chia phải a/b a a/b= b \ Chia trái b/a a b\a = b ^ Mũ a^b a^2 Thứ tự −u tiên các phép toán: Tất cả các biểu thức toán học đều đ−ợc thực hiện từ trái qua phải, ta có bảng thứ tự −u tiên nh− sau: Thứ tự −u tiên Các phép 1 Dấu ngoặc trong biểu thức 2 Toán tử mũ ^ , thực thi từ trái qua phải 3 Toán tử nhân, chia có cùng mức −u tiên,thực hiện từ trái sang phải . 4 Cộng , trừ Ví dụ1 : >> a=[1 2;3 4]; >> b=[5 6;7 8]; >> a+b^2 ans = 68 80 94 110 Ví dụ2 Giải ph−ơng trình bậc hai, các lệnh nhập trong của sổ CommandWindow >>a= 1; >>b=-2; >>c=1; >>delta= b^2- 4*a*c; >>x1=(-b+ sqrt(delta) )/(4*a); >>x2=(-b- sqrt(delta) )/(4*a); Trang 8
  9. Chú ý : + Các lệnh đ−ợc kết thúc bằng dấu chấm phẩy, Matlab sẽ không thể hiện kết quả trên mμn hình, ng−ợc lại không có dấu chấm phẩy Matlab sẽ thể hiện kết quả. + Trong quá trình nhập ma trận nếu các phần tử trên một hμng dμi quá ta có thể xuống dòng bằng toán tử ba chấm( . . . ) Ví dụ >>Number_apples=10;Number_Oranges=25,Number_bananas=34; >>Fruit_Purchased= Number_apples+ Number_Oranges+ Number_bananas 1.3 Sử dụng các lệnh gián tiếp từ các file dữ liệu Nh− đã trình bμy trong phần cửa sổ M-file, tập hợp các lệnh của MATLAB đ−ợc soạn thảo trong cửa sổ M-file d−ới dạng Script file hoặc dạng hμm function(có biến đầu vμo vμ ra), vμ đ−ợc ghi (l−u)vμo file dữ liệu có phần mở rộng lμ .m (Thông th−ờng các ch−ơng trình soạn thảo trong M-file th−ờng đ−ợc l−u theo đ−ờng dẫn C:\matlab\ work\Tên_file ), muốn thực thi ch−ơng trình soạn thảo đó ta gọi lệnh trong cửa sổ Commandwindow, tuỳ theo ch−ơng trình viết dạng Script file hay function mμ trong cửa sổ ta có 2 cách gọi nh− sau: • Đối với ch−ơng trình viết dạng Script file >> tên_file ; a=1; b=-2; c=1; delta=b^2-4*a*c; x1=(-b+sqrt(delta))/(2*a) x2=(-b-sqrt(delta))/(2*a) % l−u vμo file GPTB2.m Ví dụ giải ph−ơng trình bậc hai tìm nghiệm x1 vμ x2 viết trong M-file dạng Scriptfile: Thực thi ch−ơng trình trên trong cửa sổ CommandWindow bằng lệnh >>GPTB2 • Đối với ch−ơng trình viết dạng function ,có tham số đầu vμo vμ ra,ta phải truyền đủ các tham số cần thiết. Ví dụ : Giải ph−ơng trình bậc hai với ba tham số đầu vμo lμ các hệ số a , b, c vμ hai biến đầu ra lμ nghiệm của ph−ơng trình x1 vμ x2 (Xem cách viết hμm function ở mục sau) function [x1, x2] =GPTB2(a,b,c) x1=(-b+sqrt(delta))/(2*a); %Tinh nghiem x1 Trang 9 x2=(-b- sqrt(delta))/(2*a); %Tinh nghiem x2
  10. Thực hiện bμi toán trên trong Command window nh− sau: >>a= 1; >>b=-2; >>c=1; >>[x1,x2]=GPTB2 (a,b,c) % cấu trúc chung lμ [x1,x2]=Tên_file (a,b,c) ( hoặc [x1,x2]=GPTB2(1,-2,1) ) L−u ý rằng khi viết ch−ơng trình trong M-file, bạn muốn ghi chú thích ta dùng ký tự % đặt tr−ớc dòng chú thích nh− sau % dòng chú thích Ví dụ 2 %Viết trong M-file(dạng Script file) x=0:0.1:10 ; %Tạo vector x y=cos(x); plot(x,y); % Vẽ đồ thị hμm cosin %l−u vμo file có tên lμ dai1.m Thực thi hμm trên cửa sổ commandwindow bằng lệnh >> dai1 Viết ch−ơng trình trong M-file đ−ợc dùng lμ chủ yếu ,đặc biệt đối với những ch−ơng trình dμi , phức tạp thì bạn nên viết trong M-file. 1.4 Dòng nhắc gán giá trị biên Đối với bạn đã học lập trình Pascal, bạn muốn nhập giá trị khi thực thi ch−ơng trình bạn dùng cặp lệnh: writeln( 'Nhập giá trị của a='); readln(a); Nh−ng đối với MATLAB thì bạn sẽ thấy rất đơn giản chỉ dùng một lệnh duy nhất đó lμ : a=input(‘Nhap gia tri cua a=’); Ví dụ: Trong cửa sổ Commandwindow ta gõ lệnh >> a =input(‘nhap a=’); Trang 10
  11. Nhấn Enter cho kết quả d−ới dạng nhap a= 3; đồng nghĩa với việc gán a=3. Sử dụng dòng nhắc gán giá trị biên trong tr−ờng hợp ta muốn thay đổi giá trị các biến lúc thực thi ch−ơng trình. Ví% dụ Ch : sử−ơng dụng trình dòng viết nhắc trong gán giá M-file trị biên, bạn để giải có thểph− ơngviết trình trong bậc hai CommandWindow a=input(‘nhap he so a=’); b=input(‘nhap he so b=’); c=input(‘nhap he so c-=’); Delta=b^2-4*a*c; x1=(-b+ sqrt(Delta))/(2*a) x2=(-b+ sqrt(Delta))/(2*a) 1.5 Cách tạo một hμm function Tr−ớc hết ta thống nhất rằng, để tạo một hμm function ta phải soạn thảo nó trong M- file. Cấu trúc hμm nh− sau: %Khai báo hμm có từ khoá function function[danh sách tên kết quả]= Tên_hμm(danh sách các biến đầu vμo) % Thân ch−ơng trình câu lệnh 1; câu lệnh 2; câu lệnh 3; câu lệnh n; %kết thúc ch−ơng trình khi kết thúc câu lệnh Chú ý: • Danh sách tên kết quả, vμ tham số đầu vμo đ−ợc cách nhau bằng dấu phẩy. Ví dụ : function[x1,x2,x3]=dai2(a,b,c,d) • Thân ch−ơng trình không bắt đầu bằng từ khoá Begin vμ không kết thúc bằng từ khoá End nh− Ngôn ngữ lập trình Pascal. • Ta nên l−u vμo file có tên trùng với tên hμm Ví dụ: Cho sơ đồ khối của hệ thống điều khiển tự động nh− hình d−ới đây num num u 2 1 y den den (- 2 1 Trang 11
  12. Nhiệm vụ: Tính hμm truyền kín của hệ thống Ch−ơng trình có thể đ−ợc viết nh− sau: function[numk, denk]=ham_truyen(num1, den1, num2, den2) numh=conv(num1, num2);% conv lμ hμm nhân, hμm nμy đ−ợc định nghĩa sẵn denh=conv(den1,den2); numk=numh; m=length(denh)- length(numh); numh1=[zeros(:,m), numh]; denk= numh1+denh; %kết thúc ch−ơng trình tại đây bạn nên l−u vμo file có tên lμ ham_truyen. Thực thi hμm: >> num1=[1 1]; >>den1=[1 2 1]; >>num2=[1 2]; >>den2=[1 2 1 4]; >>[numk,denk]=ham_truyen(num1,den1,num2,den2); 1.6 Sử dụng hμm có sẵn Có rất nhiều hμm có sẵn, đó lμ các hμm đã đ−ợc lập trình sẵn,vμ đ−ợc đ−a vμo th− viện, để xem một hμm cũng nh− cấu trúc, cách sử dụng ta dùng lệnh >>help tên_hμm Ví dụ Ta muốn xem cấu trúc hμm ode23 >>help ode23 1.7 Vẽ các hμm Dùng lệnh fplot để vẽ các hμm, hμm nμy có thể có sẵn(ví dụ nh− sin, cos . . .), hoặc các hμm tạo bởi ng−ời dùng viết trong M-file dạng function Cấu trúc: fplot(‘Tên_hμm’,[Xmin ,Xmax] ,tol,N,’LineSpec’);hoặc fplot( @Tên_hμm,[Xmin ,Xmax] ,tol,N,’LineSpec’); L−u ý:Đối với các hμm toán học có sẵn(không phải định nghĩa) ví dụ nh− sin, cos , thì có thể thực hiện nh− sau: + fplot(‘sin(x)’,2*pi*[-1 1] ) %vẽ y=sin(x) với x=[-2*pi 2*pi]; + fplot([sin(x),tan(x),cos(x)]’, 2*pi*[-1 1] ); Trang 12
  13. %vẽ ba đồ thị trên cùng một cửa sổ với x=[-2*pi 2*pi] ; • Dùng hμm inline ví dụ : f=inline(‘x+2’); fplot(f,[0 2] ); • Đối với các hμm trong M-file có thể sử dụng các cách sau Ví dụ: Tính f1, f2, f3 function [f1,f2,f3]= FUNC(x) f1= x+3; f2=x; f3=x.^2; %l−u vμo file FUNC.m Hμm FUNC sẽ trả về một vector hμng ứng với mỗi giá trị của x, ví dụ x=[x1;x2] thì hμm FUNC sẽ trả về ma trận sau đây. f1(x1) ,f2(x1), f3(x1) f1(x2) ,f2(x2), f3(x2) Lợi dụng đặc điểm nμy ta có thể vẽ nhiều đồ thị trên cùng một cửa sổ thông qua ví dụ sau: %Tạo hμm Y function Y=myfun(x) Y(:,1)=200*sin(x(:))./(x(:); Y(:,2)=x(:).^2; %l−u vμo file có tên lμ myfun.m Thực thi ch−ơng trình trên trong Commandwindow >>fplot( ‘myfun’,[-20 20] ); (hoặc dùng >>fplot(@myfun ,[-20 20] ) Các thông số tol, N , LineSpec lần lựot lμ sai số liên quan(t−ơng đối), số điểm ít nhất, biểu diễn thuộc tính của đ−ờng. Chú ý:Khi bạn muốn hạn chế khoảng biểu diễn cả trục x vμ y thì dùng [Xmin Xmax Ymin Ymax] . 1.8 L−u vμ lấy dữ liệu Với Matlab khi thoát khỏi ch−ơng trình(tắt),các biến dữ liệu(trongWorkspace) sẽ bị mất,do vậy khi thực hiện lại ch−ơng trình bạn phải khai báo lại các biến cần thiết trên, Trang 13
  14. điều nμy gây mất thời gian, vμ biện pháp tốt lμ bạn l−u tất cả các biến cần thiết cho ch−ơng trình của bạn vμo file riêng, vμ khi cần chúng ta gọi chúng ra bằng một lệnh L−u dữ liệu có thể lμ : • L−u tất cả các biến trong vùng lμm việc( Workspace) hoặc • Một số biến nhất định tuỳ theo nhu cầu . Sau đây lμ các cách l−u các biến dữ liệu: 1.8.1 L−u vμ lấy dữ liệu d−ới file nhi phân(binary) L−u dữ liệu: >>save('C:\matlabR12\work\ten_file') %l−u toμn bộ biến trong Workspace >>save('C:\matlabR12\work\ten_file', 'x','y')% chỉ l−u biến x vμ y Chú ý: C:\matlabR12\work\ten_file lμ đ−ờng dẫn tới file, thông th−ờng khi cμi đặt ch−ơng trình thì mặc định lμ cμi vμo ổ C (nếu bạn cμi vμo ổ D, khi sử dụng lệnh save, bạn chỉ cần thay đổi thμnh :D:\matlabR12\work\ten_file) Ví dụ: %Viết trong Command Window >>a=1; >>b=1; >>c=-2; >>save('C:\matlabR12\work\Bien', 'x','y') Khôi phục lại dữ liệu dùng lệnh sau: load ('C:\matlabR12\work\ten_file') % lấy dữ liệu Ví dụ: Bây giờ ta xoá hai biến a vμ b ra khỏi ch−ơng trình vμ thực hiện lệnh load để lấy lại dữ liệu: >>clear a ; %xoá biến a >>clear b ; %xoá biến b >> load ('C:\matlabR12\work\ten_file') >>a %kiểm tra xem a đã khôi phục lại ch−a a=1 >>b%kiểm tra xem b đã khôi phục lại ch−a b=1 1.8.2 L−u vμ lấy dữ liệu d−ới file ASCII >>save('C:\matlabR12\work\ten_file','-ASCII'). L−u toμn bộ biến trong workspace vμo file Trang 14
  15. >>save('C:\matlabR12\work\ten_file','x','y','-ASCII'). L−u hai biến x vμ y vμo file >>load ('C:\matlabR12\work\ten_file', '-ASCII '). khi thực hiện lệnh nμy thì trong Workspace sẽ xuất hiện biến có tên lμ tên của file , kích đúp chuột lên biến nμy sẽ xuất hiện dữ liệu của toμn bộ biến đ−ợc l−u giữ, việc truy nhập đến biến l−u giữ thông qua việc truy nhập kiểu Matrận Ví dụ Command window >>a=2; >>b=3; >>c=4; >>save('C:\matlabR12\work\ save')%l−u 3 biến trong file tên save >> load('C:\matlabR12\work\ save')%khôi phục dữ liệu hoặc >> save('C:\matlabR12\work\ save', 'a','b')%l−u hai biến a vμ b trong file %tên save T−ơng tự: >>a=3; >>b=4; >>save('C:\matlabR12\work\save','a','b','-ASCII') >>load('C:\matlabR12\work\save','-ASCII') %khôi phục dữ liệu Trong workspace sẽ có biến save nh− sau: Kích đúp vμo save sẽ xuất hiện dữ liệu của hai biến a vμ b Hoặc đơn giản để l−u biến bạn có thể chọn biến rồi kích vμo nút save trong cửa sổ Workspace 1.9 Các toán tử logic vμ các lệnh điều kiện Trang 15
  16. 1.9.1 Các toán tử quan hệ Một biểu thức logic trong MATLAB có đ−ợc từ sự so sánh các đại l−ợng khác nhau(ví dụ hai đại l−ợng A vμ B). Những ký hiệu thể hiện sự so sánh đ−ợc gọi lμ các toán tử quan hệ , sau đây lμ liệt kê các toán tử Bảng liệt kê các toán tử quan hệ Toán tử quan hệ ý nghĩa Lớn hơn vd A>B = Lớn hơn hoặc bằng A>=B == Bằng vd A==B ~= Không bằng vd A~=B Các toán tử quan hệ thực hiện việc só sánh từng phần tử của mảng, chúng trả lại một mảng có cùng kích th−ớc với hai mảng trên( hai mảng ban đầu phải có cùng kích th−ớc nếu không sẽ gây ra lỗi),với các phần tử trong mảng lμ 0 hoặc 1 t−ơng ứng với các quan hệ so sánh lμ sai hay đúng Tr−ờng hợp đặc biệt so sánh hai số phức: + Khi dùng các toán tử quan hệ lμ thì chỉ so sánh phần thực của nó mμ thôi . + Khi dùng các toán tử quan hệ = thì so sánh cả phần thực lẫn phần ảo Khi so sánh hai chuỗi . Dùng toán tử strcmp Cấu trúc: strcmp( chuỗi1, chuỗi2) Ví dụ : >>Chuoi1= ‘Pham Duc Dai’; >>Chuoi2=’Vu van van’; >>ss=strcmp(Chuoi1, Chuoi2); ss=0 Chú ý : Khi so sánh một số vô h−óng với một ma trận thì số đó đ−ợc nhân với một m trạn ones(size(ma trận so sánh)) sao cho nó có kích th−ớc giống với ma trận cần so sánh rồi mới so sánh . Ví dụ: X=5; X>=[1 2 3 ; 4 5 6; 7 8 9] Ù X=5*ones(3,3); X>[1 2 3 ; 4 5 6; 7 8 9] Kết quả trả về : ans= Trang 16
  17. 1 1 1 1 1 0 0 0 0 >>X=5; >>X >=[1 2 3 ; 4 5 6; 7 8 9] ans 1 1 1 1 1 0 0 0 0 1.9.2 Các toán tử logic (Logical Operator & | ~) Cấu trúc: Toán tử logic ý nghĩa & Vμ vd A&B | Hoặc vd A|B ~ Đảo vd ~A Các ký hiệu & , | ,~ lμ các toán tử logic vμ hoặc đảo. Chúng thực hiện trên từng phần tử của của các mảng so sánh( toán tử logic cho phép thực hiện trên nhiều mảng với yêu cầu lμ các mảng phải có cùng kích th−ớc), kết quả trả về lμ một ma trận có cùng kích th−ớc với các ma trạn so sánh trên. Các toán tử logic th−ờng dùng để liên kết các biểu thức quan hệ. Bảng chân lý: Đầu vμo And Or Xor Not A B A&B A|B xor(A,B) ~A 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 Mức −u tiên cao nhất đối với toán tử logic đảo( not ,~) , hai toán tử and vμ | có cùng mức −u tiên , trong một biểu thức toán học thì chúng đ−ợc thực hiện theo thứ tự từ trái sang phải. Ta có thể sử dụng các toán tử ‘and’ , ‘or’ ,’not’ ⇔ & , | , ~ nh− bảng sau: A&B and(A,B) A|B or(A,B) ~A not(A) Trang 17
  18. Chú ý trong các biểu thức sử dụng các toán tử locgic thì ta nên dùng dấu ngoặc để xác định rõ rμng ,vμ đảm bảo tính t−ơng thích trong các phiên bản mới của Matlab Tổng kết: • Các phép tính số học sẽ đ−ợc thực hiện tr−ớc khi thực hiện các biểu thức logic. • Khi tính toán ta nên thêm dấu ngoặc đơn để lμm biểu thức trở nên sáng sủa hơn. • Gặp những biểu thức phức tạp sẽ sử lý các tính toán số học tr−ớc, sau đó các toán tử logic đ−ợc xem xét từ trái qua phải . 1.10 Các câu lệnh điều kiện, rẽ nhánh 1.10.1 Câu lệnh điều kiện if. Cấu trúc % Đây lμ cấu trúc đơn giản nhất. if expression Statements; end; % Cấu trúc sử dụng lệnh elseif ,else vμ if đ−ợc viết liền if expression1 Statements; elseif expression2 Statement; else Statements; end Biểu thức expression bao gồm các toán tử quan hệ ví dụ nh− (count 0 ), Ngoμi ra nó còn kết hợp với các toán tử logic để liên kết các biểu thức quan hệ. Ví dụ 1: if (count 0) Ví dụ 2: Cho khoảng [a b], viết ch−ơng trình chia khoảng nμy thμnh n khoảng bằng nhau với n function v= lnearspace(a,b,n) cho if n > v=Soan1(5,1,5) v = Trang 18 5 4 3 2 1
  19. Ví dụ 3: Ch−ơng trình xác định dấu của số nhập vμo : function s= sign(x) if x>0 s=1; % so duong elseif x =5)&(Diem<7) fprintf(‘Hoc luc trung binh’);
  20. 1.10.2 Vòng lặp for Cấu trúc: for i= imin :Δi: imax statements; end Δi : Lμ b−ớc nhảy của vòng lặp for, giá trị mặc định lμ =1; Ví dụ: Tính tổng s= 1+2^p +3^p+ n^p ; ( p lμ số mũ ) function s= Sump(n , p) s=0; for i=1:n ; s=s+i^p ;end; Hai ch−ơng trình sau đây lμ giống nhau for i=1:100; x=1:100; y(i)=sin(i); ⇔ y=sin(x); end; 1.10.3 Vòng lặp while Cấu trúc: while( bieu_thuc_logic) statements; end; Tr−ớc hết vòng lặp kiểm tra xem nếu biểu thức logic đúng thì thực hiện các câu lệnh statements. n=input(‘Nhap n=’); Ví dụ: s=0; i=0; while( i<n) s=s+i; end; 1.10.4 Lệnh ngắt break , error, return Trang 20
  21. • Lệnh break :Tác dụng điều khiển ch−ơng trình nhảy ra khỏi vòng lặp for hay while gần nó nhất. Ví dụ:Nhập một số d−ơng nếu âm thì nhập lại while 1 n= input(‘nhap n=’); while(n 0 break; %Thoat khoi vongwhile chinh end end 1.10.5 Lệnh error vμ lệnh return - Lệnh error: Dùng để thông báo lỗi , hiển thị cho ng−ời lập trình biết đó lμ lỗi gì ? Ví dụ: error(‘error message’); hiển thị thông điệp lỗi khi thực hiện câu lệnh nμy. a=input(‘Nhap a=’); b=input(‘Nhap b=’); % Thuc hien a: b if b==0 error(‘divide by zeros’); end; Khi thực thi ch−ơng trình trên ( nhập b=0) thì xuất hiện dòng chữ đỏ Nh− sau: ??? Error using ==> soan1 divide by zeros Chú ý rằng soan1 lμ tên file l−u ch−ơng trình trên - Lệnh return: Th−ờng đ−ợc sử dụng trong các hμm của MATLAB. Lệnh return sẽ cho phép quay trở về thực thi những lệnh nằm trong tác dụng của lệnh return. 1.10.6 Biến toμn cục Biến toμn cục đ−ợc dùng trong phạm vi toμn bộ các ch−ơng trình, nếu các ch−ơng trình đó khai báo biến toμn cục đó. Cấu trúc: global x y z % khai báo ba biến toμn cục x y z Trang 21
  22. Ví dụ đơn giản sau: function[ u,v]=Main(x,y) global a b; Tinhham(x,y,z); u=a;v=b; %Ch−ơng trình con tính hμm function Tinhham(x,y,z) global a b; a=x^2 +y^2+ z^2; b=x^3 +y^3+ z^3; Thực thi ch−ơng trình: >> x=2,y=3,z=4; >> [u,v]=Main(x,y,z); 1.10.6 Định dạng dữ liệu ra Các phép tính trong MATLAB đ−ợc thực hiện với độ chính xác cao, ta có thể định dạng cho các số xuất ra mμn hình tuỳ từng yêu cầu cụ thể: Ví dụ số a= 4/3 với • format short (đây lμ chế độ mặc định gồm 4 số sau dấu phẩy) a=1.3333 • format short e a= 1.3333e+00 • format long a=1.3333333333333 • format lang e a=1.3333333333333e+000 Ngoμi cách nμy ra ta định dạng dữ liệu bằng thanh tool công cụ trên mμn hình Ví dụ: Gõ các lệnh sau trong cửa sổ CommandWindow >>format long >>a=4/3 a= 1.3333333333333 1.10.7 Một số hμm toán học thông th−ờng hay sử dụng Trang 22
  23. Tên hμm ý nghĩa Sin Hμm sin Cos Hμm cos Tan Hμm tan Asin Hμm acsin Acos Hμm accos Atan Hμm tính arctg Angle Lấy góc pha Fix Lμm tròn h−ớng 0 Floor Lμm tròn h−ờng -∞ Exp Hμm e mũ Ceil Lμm tròn h−ớng -∞ Log Logarit cơ số e log10 Logarit cơ số 10 sqrt(x) Căn bậc hai 1.11 Các hằng số đ−ợc sử dụng trong Matlab • Ký tự inf thay thế cho ∞ trong toán học Inf : lμ số vô cùng lớn mμ Matlab không thể hiện đ−ợc ví dụ: >> 5/0 ans = inf • Ký tự NaN thay thế cho một số không xác định ví dụ: >> 0/0 ans= NaN • Ký tự pi thể hiện lμ số π =3.14159 • Ký tự eps 1.12 Số phức trong Matlab Sử dụng i vμ j để thể hiện phần ảo với i= j= sqrt(-1) Ví dụ: >> 5+6i ans = Trang 23
  24. 5.0000 + 6.0000i >> 5+6j ans = 5.0000 + 6.0000i Chú ý khi lμm với số phức cần phân biệt : y= 7/2*i vμ x= 7/2i cho hai kết quả khác nhau >> y= 7/2*i y = 3.5*i >> x=7/2i x= -3.5i Ví dụ các phép tính về số phức: >> s=3+7i >>w=5-9i >>w+s >>w-s >>w*s >>w/s 1.13 Các lệnh thoát khỏi ch−ơng trình,liệt kê các biến, xoá biến . • Lệnh exit : Tác dụng thoát khỏi ch−ơng trình . • Lệnh clc (clear command) xoá tất cả các lệnh trong cửa sổ CommandWindow • Lệnh clear xoá toμn bộ các biến trong bộ nhớ hiện thời . • Lệnh clear Xoá danh sách biến đ−ợc liệt kê ra. • Lệnh whos cho biết tất cả các biến hiện thời, kích th−ớc ô nhớ biến đó. • Lệnh quit cũng giống nh− lệnh exit • Các phím mũi tên lên xuống (trên bμn phím) đ−ợc dùng để gọi lại các lệnh đã thực hiện tr−ớc đó. Câu hỏi& Bμi tập cuối ch−ơng Nêu đặc điểm của các cửa sổ ( CommandWindow, history .) 1. Sử dụng Lệnh trực tiếp từ cửa sổ command window vμ gián tiếp từ các file 2. Các câu lệnh điều kiện , vòng lặp 3. L−u vμ lấy dữ liệu cho một hoặc nhiều biến. Bμi tập1 : Giải hệ ph−ơng trình bậc nhất dùng dòng nhắc gán giá trị biên nhập các hệ số a,b,c,d,m,n hệ cho nh− sau: ax +by=m Trang 24
  25. cx+dy=n Bμi tập 2: Sinh viên vẽ các hμm sau a. Vẽ đặc tính điode với quan hệ dòng điện vμ điện áp trên điode nh− sau i=I0*(exp(40*v)-1)(A); I0=1.E-6; vector v=[-10:0.005:0.8] . Sinh viên thực hiện theo hai cách viết trực tiếp trong CommadWindow vμ viết hμm trong M-file. b. Vẽ các hμm cơ bản sin(x) ,cos(x) ,tan(x) dùng lệnh fplot . c. Vẽ hμm y= sin(x)/x , y=x, y=sin(x) trên cùng một đồ thị . Bμi tập3 : L−u tất cả các biến bạn đã dùng trong quá trình thực hμnh vμo file riêng của mình, để lần sau lấy ra dùng lại. Bμi 4:Lập ch−ơng trình dạng hμm function để giải ph−ơng trình bậc hai Bμi 5:Lập hμm tính hμm truyền kín các sơ đồ hệ thống điều khiển trong sách lý thuyết điều khiển tự động Bμi 5:Lập hμm function [Q, R]=divide (a,b) tìm th−ơng vμ số chia hai số a vμ b Trang 25
  26. Ch−ơng 2 Th− viện toán học kiểu ký tự (symbolic matlab) 2.1 Giới thiệu về th− viện toán học kiểu ký tự Symbolic matlab lμ th− viện các phép toán kiểu ký tự đ−ợc đ−a vμo môi tr−ờng tính số học của matlab , th− viện nμy lμm phong phú vμ tiện ích thêm với nhiều kiểu tính toán về toán học khác cho phần tính số học vμ đồ hoạ đã có tr−ớc đây trong th− viện Matlab. 2.2 Các lệnh cơ bản khai báo biến symbolic 2.2.1 Lệnh syms vμ lệnh sym + Nhiệm vụ tạo đối t−ợng (bao gồm cả biến) symbolic Cấu trúc: syms arg1 arg2 syms arg1 arg2 real syms arg1 arg2 unreal Mô tả Khai báo các biến arg1 , arg2 lμ các biến symbolic có hai cách khai báo dùng lệnh syms hoặc lệnh sym nh− sau: syms arg1 arg2 Khai báo các thông số arg1, arg2 lμ các biến symbolic , ta có thể khai báo nh− sau arg1 = sym('arg1'); arg2 = sym('arg2'); T−ơng tự : syms arg1 arg2 real lμ ký hiệu ngắn gọn cho arg1 = sym('arg1','real'); arg2 = sym('arg2','real'); Các biến khai báo nh− trên lμ các biến thực kiểu symbolic .Vậy thì các biến nμy khác gì các biến khai báo không có đặc tính real? Ta phân biệt nh− sau: Đối với một biến thực symbolic thì nó có các tính chất của số thực ví dụ nh− (arg)2>0 (khi khai báo lμ syms arg real) còn khi bạn khai báo lμ syms arg thì các biến nμy chỉ đơn thuần lμ biến symbolic không có các tính chất của số thực tức lμ (arg)2 sẽ không có dấu ,mμ chỉ coi lμ các ký tự symbolic mμ thôi Tiếp tục Trang 1
  27. syms arg1 arg2 unreal lμ ký hiệu ngắn gọn cho arg1 = sym('arg1','unreal'); arg2 = sym('arg2','unreal'); Ví dụ: syms x beta real giống nh− việc khai báo x = sym('x','real'); beta = sym('beta','real'); Để xoá đối t−ợng symbolic x vμ beta khỏi (trạng thái) 'real' ta lμm nh− sau syms x beta unreal Chú ý : clear x sẽ không xoá đối t−ợng symbolic x khỏi trạng thái 'real'. Bạn có thể thực hiện đ−ợc điều trên(tức lμ xoá x khỏi trạng thái số thực) bằng cách sử dụng các lệnh syms x unreal or clear mex or clear all. 2.2.2.Lệnh sym Tạo một số, một biến vμ một đối t−ợng symbolic Cấu trúc nh− sau S = sym(A) x = sym('x') x = sym('x','real') x = sym('x','unreal') S = sym(A,flag) where flag is one of 'r', 'd', 'e', or 'f'. Mô tả: S = sym(A) Tạo một đối t−ợng S của lớp 'sym' từ A.Nếu thông số đầu vμo lμ một chuỗi , kết quả lμ một số ,một biến symbolic.Nếu thông số đầu vμo lμ một số vô h−ớng hay một matrận, kết quả lμ một thể hiện của các số đã cho d−ới dạng symbolic x = sym('x') Tạo biến symbolic với tên lμ x chứa kết quả trong x x = sym('x','real') cho rằng x lμ thực cho nên conj(x) bằng với x(có thể coi đây lμ ph−ơng pháp kiểm tra số thực ) Ví dụ: x = sym('x','unreal') lμm cho biến x(trong sạch) vμ không có đặc tính nμo thêm(đảm bảo rằng x không phải lμ biến thực) Ví dụ + pi= sym('pi') kết quả cho lại giá trị số pi (đầu vμo lμ một chuỗi) + Lệnh pi = sym('pi') vμ delta = sym('1/10') Kết quả delta= 1/10 ; Cấu trúc sau cho phép chuyển đổi số symbolic sang các dạng số thực vμ các dạng số khác tuỳ thuộc vμo flag lμ ' r ' , ' d ' ,' e ' hoặc ' f ' Trang 2
  28. S = sym(A,flag) ở đó flag lμ một trong 'r', 'd', 'e', or 'f'. Ví dụ : Tạo ma trận symbolic A A=[ 1 2 3 ; 4 5 6]; >>A=[ 1 2 3; 4 5 6]; >>A=sym(A) Kết quả trả về ma trận A= [ 1 2 3] [ 4 4 6] Ví dụ: Tạo biến symbolic x ,y, z >> syms x y z ;% hoặc sym('x' ) hoặc sym('y') . . . >> f= x^2 + y^2 +z^2; Ví dụ Tạo số symbolic a= 5 >> a= sym('5') a = 5 Thông th−ờng hiệu quả của việc sử dụng lệnh sym lμ để chuyển đổi một ma trận từ số sang dạng phom symbolic .Lệnh A = hilb(3) Tạo ma trận Hilbert A = 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 áp dụng sym cho A A = sym(A) Bạn có thể đạt đ−ợc matrận symbolic Hilbert có kích th−ớc 3-by-3 A = [ 1, 1/2, 1/3] [ 1/2, 1/3, 1/4] [ 1/3, 1/4, 1/5] Ta thấy rằng khi áp dụng lệnh symbolic cho số hoặc ma trận thì kết quả thu lại sẽ chính xác hơn 2.2.3 Phép Tính với các biến vμ số symbolic Các phép tính cơ bản về ma trận đều đ−ợc dùng đối với các số vμ biến symbolic. Ví dụ về phép cộng hai Ma trận symbolic(hoặc với một ma trận không phải lμ symbolic) >> syms a b c; >> a=[a b c ; b c a]; >> d=[1 2 3 ;4 5 6]; Trang 3
  29. >> a+d ans = [ a+1, b+2, c+3] [ b+4, c+5, a+6] >> A=sym([1 2 3 ; 4 5 6]); >> B=sym([2 3 4 ;5 6 7]); >> A+B ans = [ 3, 5, 7] [ 9, 11, 13] T−ơng tự cho phép nhân vμ phép chia ( * / \ ./ .\) 2.3 Tạo hμm symbolic Thông th−ờng có hai cách tạo hμm Symbolic • Tạo hμm bằng biểu thức symbolic f= f(x,y,z ) trong đó x, y z đ−ợc khai báo lμ các biến symbolic • Tạo trong M-file • Tạo trực tiếp các hμm . 2.3.1 Tạo hμm từ các biểu thức symbolic Hμm tạo ra chứa các biến phải lμ biến symbolic Ví dụ tạo hμm f= 3*x^2 + 2*x + 1 ta lμm nh− sau >> syms x % khai báo x lμ biến symbolic >> f= 3* x^2 + 2*x +1 % f lμ hμm symbolic ví dụ: syms x y z r = sqrt(x^2 + y^2 + z^2) t = atan(y/x) f = sin(x*y)/(x*y) Tạo biểu thức symbolic r vμ t vμ f . Chú ý Chỉ khi tạo một hμm symbolic thì Bạn mới đ−ợc phép sử dụng lệnh limit ,diff, int, subs, vμ các hμm toán học symbolic khác 2.3.2 Tạo Hμm Symbolic từ M-file Tạo một hμm bằng cấu trúc function , trong đó đầu vμo lμ các biến cần để thiết lập hμm , đầu ra lμ biến chứa hμm nh− vậy cách tạo hμm giống với tạo hμm thông th−ờng ,Vì thế để Trang 4
  30. Matlab hiểu rằng đây lμ hμm symbolic thì ta pahỉ l−u vμo file có đ−ờng dẫn nh− sau C:\matlabR12\toolbox\symbolic\@sym\ten_ham Ví dụ tạo hμm symbolic z= sin(x)/x function z = sinc(x) %SINC The symbolic sinc function % sin(x)/x. This function % accepts a sym as the input argument. if isequal(x,sym(0)) z = 1; else z = sin(x)/x; end Ví dụ : Muốn tạo hμm symbolic f= 3*x^2 + 2*x + 1 function f= tao_ham( x) f= 3*x^2 + 2*x + 1 %L−u vμo đ−ờng dẫn C:\matlabR12\toolbox\symbolic\@sym\tao_ham % gọi hμm trong command window >> syms x >>f= tao_ham(x) f= 3*x^2 + 2*x + 1 2.3.3 Tạo hμm trực tiếp Ta có thể tạo hμm trực tiếp nh− sau f= 3*x^2+ 2*x+1 >> f=sym('3*x^2 + 2*x +1') Tuy nhiên tạo hμm nh− trên thì f lμ hμm symbolic, nh−ng bản thân biến x lại không phải lμ biến symbolic Khi khai báo hμm kiểu nμy ,muốn sử dụng biến x ta thêm hai dấu ' x ' >> f= sym('3*x^2+ 2*x +1'); >> g=subs(f,'x','x+h') g = 3*(x+h)^2+ 2*(x+h) +1 >> df=(subs(f,'x','x+h')-f)/'h' df = (3*(x+h)^2+2*h-3*x^2)/h >> diff(f,'x') ans = 6*x+2 Ví dụ : Tính 6! Ta tạo hμm tính trực tiếp nh− sau >> f=sym('x!'); Trang 5
  31. >> subs(f,'x',6) ans = 720 Ví dụ tạo hμm 1/ x! >> f=1/sym('x!'); >> subs(f,'x',n) >> subs(f,'x','n') ans = 1/(n)! 2.4 Tạo biến thực vμ biến phức Tạo biến phức ví dụ z= x+ i* y thì ta phải khai báo x vμ y lμ các biến symbolic thực tức lμ: syms x y real z = x + i*y I. Giải thích Tạo biến symbolic x vμ y ,các biến nμy có đ−ợc sự công thêm các tính chất toán học của một biến thực .Cụ thể nó có ý nghĩa rằng biểu thức f = x^2 + y^2 f >=0. Cho nên, z lμ một biến phức conj(x)= x;conj(z)=x-i*y;expand(z*conj(z))=x^2+y^2 Để xoá x khỏi lμ một biến thực ,bạn phải dùng lệnh nh− sau syms x unreal hoặc x = sym('x','unreal') Lệnh sau clear x không lμm cho x khỏi lμ một số thực 2.5 Lệnh findsym Tìm các biến trong biểu thức symbolic hoặc matrận Syntax r = findsym(S) r = findsym(S,n) Mô tả findsym(S) Trả về tất cả các biến symbolic trong S đ−ợc cách nhau bởi dấu phẩy(trong in alphabetical order).Nếu S không chứa bất kỳ một biến nμo findsym trả về một chuỗi rỗng findsym(S,n) trả về n biến alphabetically gần x nhất Ví dụ syms a x y z t findsym(sin(pi*t)) returns pi, t. Trang 6
  32. findsym(x+i*y-j*z) returns x, y, z. findsym(a+y,1) returns y. 2.6 Tính toán Công cụ toán dọc symbolic cung cấp các hμm để thực hiện các toán tử cơ bản của phép toán Đạo hμm , giới hạn , tích phân, tổng vμ mở rông chuỗi Taylor. 2.5.1 Lệnh symsum Symbolic summation. Syntax r = symsum(s) r = symsum(s,v) r = symsum(s,a,b) r = symsum(s,v,a,b) Mô tả *symsum(s) lμ tổng của biểu thức symbolic s theo biến symbolic của nó lμ k đ−ợc xác định bởi lệnh findsym từ 0 đến k-1 *symsum(s,v) lμ tổng của biểu thức symbolic theo biến symbolic v đ−ợc xác định từ 0 đến v-1 *symsum(s,a,b) and symsum(s,v,a,b) Định nghĩa tổng của biểu thức symbolic theo biến v từ v=a đến v=b Ví dụ Các lệnh sau: syms k n x symsum(k^2) trả về kết quả 1/3*k^3-1/2*k^2+1/6*k symsum(k) trả về 1/2*k^2-1/2*k symsum(sin(k*pi)/k,0,n) trả về -1/2*sin(k*(n+1))/k+1/2*sin(k)/k/(cos(k)-1)*cos(k*(n+1))- 1/2*sin(k)/k/(cos(k)-1) symsum(k^2,0,10) trả về kết quả sau 385 Ví dụ: >> syms x k; >> symsum(x^k/sym('k!'), k, 0,inf)%inf la +vo cung ans = Trang 7
  33. exp(x) >> symsum(x^k/sym('k!'), k, 0,5) ans = 1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5 Chú ý : Các ví dụ tr−ớc sử dụng sym để tạo biểu thức symbolic .k! 2.5.2 Tính đạo hμm Bây giờ chúng ta tạo các biến vμ hμm syms a x f = sin(a*x) sau đó diff(f) Lệnh nμy sẽ tính đạo hμm của f với biến symbolic của nó (trong tr−ờng hợp nμy lμ x), nh− đ−ợc định nghĩa bởi lệnh findsym ans = cos(a*x)*a Để tính đạo hμm với biến a ta lμm nh− sau diff(f,a) Nó trả về df/da. ans = cos(a*x)*x Để tính đạo hμm bậc hao với biến x vμ a ta lμm nh− sau diff(f,2) hoặc diff(f,x,2) Trả về ans = -sin(a*x)*a^2 vμ diff(f,a,2) Nó trả về ans = -sin(a*x)*x^2 Định nghĩa a,b,x,n,t vμ theta trong Matlab workspace, sử dụng lệnh sym. Bảng sau cho thấy tác dụng của lệnh diff f diff(f) Trang 8
  34. X^n x^n*n/x Sin(a*t+b) cos(a*t+b)*a Exp(i*theta) i*exp(i*theta) Example: syms a x A = [cos(a*x),sin(a*x);-sin(a*x),cos(a*x)] Nó trả lại A = [ cos(a*x), sin(a*x)] [ -sin(a*x), cos(a*x)] Lệnh diff(A) Trả về ans = [ -sin(a*x)*a, cos(a*x)*a] [ -cos(a*x)*a, -sin(a*x)*a] 2.5.3 sym2poly Biến đổi đa thức symbolic sang vec tơ hệ số đa thức của đó Cấu trúc c = sym2poly(s) Mô tả sym2poly trả về một vector hμng, véc tơ nμy chứa hệ số của đa thức symbolic. Các hệ số nμy đ−ợc xếp theo thứ tự t−ơng ứng với số mũ của biến độc lập của đa thức Ví Dụ Các lệnh sau đây: syms x u v; sym2poly(x^3 - 2*x - 5) Trả về 1 0 -2 -5 trong khi sym2poly(u^4 - 3 + 5*u^2) Trả về 1 0 5 0 -3 vμ sym2poly(sin(pi/6)*v + exp(1)*v^2) trả về Trang 9
  35. 2.7183 0.5000 0 2.5.4 Tính giới hạn Limit Công cụ toán học symbolic cho phép bạn tính giới hạn của hμm theo cách thông th−ờng .Các lệnh sau syms h n x limit( (cos(x+h) - cos(x))/h,h,0 ) Trả về kết quả ans = -sin(x) vμ limit( (1 + x/n)^n,n,inf ) % n tiến tới vô cùng Nó trả về kết quả ans = exp(x) Thể hiện hai trong tất cả giới hạn quan trong nhất trong toán học,đạo hμm (trong tr−ờng hợp nμy lμ cos(x)) vμ hμm e mũ x giới hạntồn tại khi cho biến tiến tới hai phía (đó lμ, kết quả lμ giống nhau bất kể tiến bên phải hay bên trái ).Nếu kết quả khác nhau hai phía thì đạo hμm đó không tồn tại Cho nên đạo hμm sau kết quảlμ không xác định vμ Công cụ toán học symbolic trả về giá trị lμ NaN Lệnh limit(1/x,x,0) hoặc limit(1/x) returns ans =NaN Lệnh limit(1/x,x,0,'left') Trả về ans = -inf Trong khi lệnh. limit(1/x,x,0,'right') Trả về: ans = inf Quan sát thấy rằng tr−ờng hợp mặc định, limit(f) giống với limit(f,x,0). Trang 10
  36. Lựa chọn cho lệnh limit trong bảng trên, chúng ta giả sử rằng f lμ một hμm symbolic với đối t−ợng x II. 2.5.5 Tính Tích phân Nếu f lμ một biểu thức symbolic thì tích phân của hμm f lμ int(f) Tìm một biểu thức symbolic F thoả mãn diff(F)=f, thì F lμ giá trị trả về của int(f) T−ơng tự hμm int(f,v) int(f,v) Sử dụng đối t−ợng symbolic v nh− lμ biến của tích phân, Ví dụ Tạo các biến symbolic sau syms a b theta x y n x1 u F Int(f) x^n x^(n+1)/(n+1) y^(-1) Log(y) n^x 1/log(n)*n^x Sin(a*theta+b) -cos(a*theta+b)/a Exp(-x1^2) 1/2*pi^(1/2)*erf(x1) 1/(1+u^2) Atan(u) Bảng thể hiện kết quả tích phân của một số hμm Định nghĩa tích phân còn đ−ợc thể hiện nh− sau int(f,a,b) hoặc int(f,v,a,b) % Tính tích phân f theo biến v từ a đến b 2.6 Giải ph−ơng trình - Hệ ph−ơng trình đại số Giải ph−ơng trình-hệ ph−ơng trình dùng lệnh solve Mục đích: Giải một hoặc nhiều ph−ơng trình đại số tuyến tính symbolic Cấu trúc g = solve(eq) g = solve(eq,var) g = solve(eq1,eq2, ,eqn) g = solve(eq1,eq2, ,eqn,var1,var2, ,varn) Trang 11
  37. Mô tả Eq lμ biểu thức đơn hoặc một ph−ơng trình.Đầu vμo để giải(tìm nghiệm) có thể lμ biểu thức hoặc chuỗi symbolic.Nếu eq lμmột biểu thức symbolic (x^2-2*x+1) hoặc một chuỗi, chuỗi nμy không chứa một ph−ơng trình, nh− ('x^2-2*x+1'), thì solve(eq) lμ giải ph−ơng trình eq=0 Với biến mặc định của nó đ−ợc xác định bởi hμm findsym.solve(eq,var) t−ơng đ−ơng với việc giải ph−ơng trình eq (hoặc eq=0 trong hai tr−ờng hợp ở trên) đối với biến var(giải phuơng trình với biến lμ var) Ví dụ : >> solve(' x^2 + 2*x +1 ' , 'x' ) tức lμ giải ph−ơng trình x^2+2*x+1=0 với biến lμ x >> solve(' y*x^2 + x *y+1 ' ,'y') Hệ ph−ơng trình. Đầu vμo lμ các biểu thức symbolic hoặc các chuỗi xác định ph−ơng trình. solve(eq1,eq2, ,eqn) giải hệ các ph−ơng trình tạo bởi eq1,eq2, ,eqn trong n biến đ−ợc xác định bằng cách áp dụng lệnh findsym cho toμn hệ (in the n variables determined by applying findsym to the system) Ba loại khác nhau của đầu ra có thể. + Đối với một ph−ơng trình vμ một đầu ra, kết quả (sau khi giải ) đ−ợc trả về với nhiều kết quả cho ph−ơng trình tuyến tính (with multiple solutions for a nonlinear equation) + Đối với hệ thống ph−ơng trình có số đầu ra cân bằng, kết quả đ−ợc chứa trong alphabetically vμ đ−ợc ký hiệu nh− lμ đầu ra.(chứa trong alphabetically tức lμ chứa theo thứ tự chữ cái) + Đối với hệ thống ph−ong trình có số đầu ra lμ đơn,kết quả trả về lμ một cấu trúc Ví dụ solve('a*x^2 + b*x + c') trả về [ 1/2/a*(-b+(b^2-4*a*c)^(1/2)), 1/2/a*(-b-(b^2-4*a*c)^(1/2))] solve('a*x^2 + b*x + c','b') trả về -(a*x^2+c)/x >> n=solve('x + y = 1','x - 11*y = 5') n = x: [1x1 sym] y: [1x1 sym] >> n.y ans =. -1/3 >> n.x ans = Trang 12
  38. 4/3 >> [x, y]=solve('x + y = 1','x - 11*y = 5') kết quả: x= 4/3 y=-1/3 >>A = solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a + 6') Trả về dạng cấu trúc A = a: [1x4 sym] u: [1x4 sym] v: [1x4 sym] ở đó A.a = [ 2, 2, 3, 3] A.u = [ 1/3+1/3*i*2^(1/2), 1/3-1/3*i*2^(1/2), 1/4+1/4*i*3^(1/2), 1/4-1/4*i*3^(1/2)] A.v = [ -2/3+1/3*i*2^(1/2), -2/3-1/3*i*2^(1/2), -3/4+1/4*i*3^(1/2), -3/4-1/4*i*3^(1/2)] 2.7 Biến đổi laplace 2.7.1 Biến đổi thuận Laplace Cấu trúc laplace(F) laplace(F,t) Mô tả L = laplace(F) lμ biến đổi laplace của F với biến độc lập mặc định lμ t. kết quả mặc định trả lại lμ hμm của s. Biến đổi laplace đ−ợc áp dụng cho một hμm của biến t vμ trả lại một hμm của biến s Nếu F = F(s), laplace trả lại một hμm của t Bằng cách định nghĩa t lμ biến kiểu symbolic trong F đ−ợc xác định bởi hμm findsym. L = laplace(F,t) tạo ra L,một hμmcủa t thay mặc định lμ hμm của s. L = laplace(F,w,z) tạo ra L,một hμm của z trong đó F,một hμm của w thay thế biến mặc định lμ s vμ t t−ơng ứng 2.7.2 Biến đổi ng−ợc laplace Mục đích: Biến đổi ng−ợc laplace Trang 13
  39. Cấu trúc F = ilaplace(L) F = ilaplace(L,y) F = ilaplace(L,y,x) Mô tả F=ilaplace(L) lμ phép biến đổi ng−ợc Laplace của đối t−ợng vô h−ớng symbolic Lvới biến độc lập lμ s. trả lại mặc định lμ một hμm của t.Biến đổi ng−ợc laplace đ−ợc áp dụng cho một hμm của s vμ trả về một hμm của t .Nếu L = L(t), ilaplace trả về một hμm của x. Bằng cách định nghĩa ở đó c lμ một số thực đ−ợc chọn cho nên tất cả all singularities of L(s) are to the left of the line s = c, i. F = ilaplace(L,y) tạo ra F lμ một hμm của y thay vì mặc định t. y lμ một đối t−ợng symbolic vô h−ớng. F = ilaplace(L,y,x) F lμ một hμm của x vμ L lμ một hμm of y thay vì mặc định lμ s vμ t. 2.8 Vấn đề tích phân với hằng số thực Một trong những tinh tế liên quan tới đạo hμm các hμm symbolic lμ dấu của các biến(coi lμ hằng số) khi bạn bình ph−ơng biến đó .ở đây ta hiểu rằng khi bạn coi một biến nμo đó trong biểu thức lμ biến(ví dụ biến lấy tích phân) thì các biến còn lại đ−ợc coi lμ hằng số vμ Matlab sẽ không hiểu đ−ợc lμ nó d−ơng hay âm(coi chỉ lμ ký tự ). Ví dụ, biểu thức Lμ d−ơng,đồ thị có hình chuông cong tiến tới 0 khi x tiến tới ± inf với mọi số thực k. Một ví dụ về đ−ờng cong đ−ợc cho thấy d−ới đây với đ−ợc tạo ra, sử dụng những lệnh sau syms x k = sym(1/sqrt(2)); f = exp(-(k*x)^2); ezplot(f) The Maple ke rnel, không coi k2 hoặc x2 lμ các số d−ơng.Maple cho rằng biến symbolic x vμ k lμ không xác định. Có nghĩa rằng,chúng lμ biến vμ không có thêm đặc tính toán học nμo. Thông th−ờng tính tích phân hμm trên ta lμm nh− sau Trang 14
  40. Trong công cụ toán học symbolic , sử dụng hμm syms x k; f = exp(-(k*x)^2); int(f,x,-inf,inf) vμ kết quả lμ Definite integration: Can't determine if the integral is convergent. Need to know the sign of > k^2 Will now try indefinite integration and then take limits. Warning: Explicit integral could not be found. ans = int(exp(-k^2*x^2),x= -inf inf) Trong lời cảnh báo trên bạn chú ý thấy dòng lệnh “ Need to know the sign of > k2 “ tạm dịch lμ không hiểu dấu của k2. Mμ hợp lý toán học lμ k2 phải d−ơng do vậy bạn phải khai báo sao cho k2 >0 bằng cách > Tạo biến Real sử dụng lệnh sym Chú ý rằng Maple không thể định nghĩa dấu của biểu thức k^2. Bằng cách nμo có thể v−ợt qua trở ngại nμy? Câu trả lời lμ tạo biến k biến thực. Sử dụng lệnh sym. syms k real int(f,x,-inf,inf) trả về ans = signum(k)/k*pi^(1/2) 2.9 Vẽ Đồ thị Dùng hμm ezplot cho các biến, số symbolic Cờu trúc: ezplot( y ,[ xo xm]): Vẽ y theo biến x thuộc khoảng [ xo xm] Ví dụ: >> syms x y; >> y= x.^2; Trang 15
  41. >> ezplot(y,[1 10]), grid on Các bạn chú ý rằng lệnh ezplot trên dùng để vẽ trong không gian 2D ( không gian 2 chiều ) , còn để vẽ trong không gian 3D không có gì khó khăn ta dùng lệnh ezplot3 ,các bạn tự tham khảo thêm sách . Câu hỏi ôn tập 1. Những tiện ích khi sử dụng th− viện toán học symbolic lμ gì ?. 2. lệnh findsym có tác dụng gì ?. 3. Thứ tự −u tiên các biến khi sử dụng biến mặc định ? . 4. Có mấy cách tạo hμm symbolic? Em hãy so sánh các cách . 5. Dấu của các biến symbolic nh− thế nμo ? 6. Vẽ đồ thị hμm symbolic, bằng hμm vẽ thông th−ờng plot có đ−ợc không ? Bμi tập 1. Tạo hμm symbolic sau Y= x2 + x + y+ z + 1; Bạn hãy nêu thứ tự −u tiên các biến . 2. Tạo hμm symbolic sau dùng các cách tạo hμm khác nhau rồi tích đạo hμm , tích phân của nó Y= 1/( 5+ 4* cos(x) ) 3. Vẽ đồ thị hμm trên, theo hai cách thông th−ờng vμ sử dụng symbolic Trang 16
  42. Ch−ơng 3 Ma trận vμ mảng trong Matlab 3.1 Nhập ma trận trong Matlab 3.1.1 Các Cách nhập matrận trong Matlab Matlab cung cấp một vμi ph−ơng tiện cho ng−ời sử dụng để tạo ra một matrận, mỗi ph−ơng tiện có những −u điểm của nó vμ đ−ợc sử dụng tuỳ theo từng yêu cầu bμi toán.Nói chung Matlab cung cấp ba ph−ơng tiện. • Nhập Matrận trực tiếp từ cửa sổ command Window. • Nhập Matrận từ một file( sử dụng M-file hoặc load) • Nhập matrận từ những hμm có sẵn trong Matlab. a. Nhập Matrận trực tiếp từ cửa sổ command Window Trong môn học toán cao cấp chúng ta đã biết nhập một matrận nh− sau 1 2 3 A= 4 5 6 7 8 9 Đây lμ một ma trận có số hμng m = 3 vμ số cột n= 3 Để nhập matrận trên trong Matlab ta nhập trực tiếp nh− sau Từ dòng nhắc lệnh trong cửa sổ command Window >> ta nhập >> A=[ 1,2,3 ; 4 5 ,6;7 8 9]; hoặc >>A=[ 1 2 3 4 5 6 7 8 9]; Các hμng đ−ợc cách nhau bằng một dấu chấm phẩy (;) nh− trên,các phần tử trong một hμng đ−ợc cách nhau bằng dấu cách(thanh space) hoặc dấu phẩy(,) . Kết thúc dòng lệnh có hoặc không có dấu ; Nếu không có dấu chấm phẩy ở cuối dòng thì Matlab sẽ in ra kết quả matrận vừa nhập Nh− ví dụ trên: >> A=[ 1,2,3 ; 4 5 ,6;7 8 9] nhấn Enter sẽ cho kết quả lμ A= 1 2 3 4 5 6 Trong tr−ờng hợp số phần tử trên một hμng quá dμi ta có thể xuống dòng bằng dấu ba chấm Ví dụ >> b=[1,2,3,4, 5 6 7 8 9] % đây matrận 9 hμng vμ một cột Trang 1
  43. L−u ý rằng trong một số tr−ờng hợp matrận hoặc mảng dữ liệu dμi thì việc không thêm dấu chấm phẩy sau câu lệnh nhập, Matlab sẽ in ra số liệu dμi trong cửa sổ command Window, gây khó nhìn cho ng−ời dùng b. Nhập Matrận từ M-file Ta có thể nhập một matrận bằng cửa sổ soạn thảo M-file, mở cửa sổ nμy bằng cách vμo File- New- M-file. Một cửa sổ soạn thảo sẽ đ−ợc hiện ra cho phép bạn soạn thảo d−ới dạng text, do lμ cửa sổ soạn thảo dạng text cho nên bạn có thể soạn thảo từ file word sau đó copy vμo cửa sổ M-file.Để nhập matrận ta soạn thảo t−ơng tự nh− trong cửa sổ command window sau đó l−u vμo file nh− sau: Ví dụ: A=[1 2 3 ; 4 5 6 ; 7, 8,9];% không có dấu chấm phẩy sẽ in ra kết quả Cũng t−ơng tự nh− trên nếu số phần tử trên một hμng quá nhiều thì ta có thể xuống dòng A=[1 2 3 4 5 6 7 8 9 10]; Sau khi kết thúc soạn thảo ta l−u vμo tên_file . Để thực thi các lệnh nhập trong M-file ta dùng lệnh sau trong command window nh− sau: >> ten_file ; c. Nhập matrận từ các hμm có sẵn Matlab có một th− viện các hμm cho phép tạo ma trận.Sau đây lμ một số hμm • ones(m,n) tạo ma trận m hμng vμ n cột ,với các phần tử đều bằng 1, ones(m) tạo ma trận vuông cấp m, với các phần tử đều lμ 1. • zeros(m,n) tạo ma trận kích th−ớc m x n, với các phần tử đều bằng 0, zeros(m) tạo ma trận vuông cấp m. • eyes(m,n) tạo ma trận kích th−ớc m xn với các phần tử đều bằng 1, eyes(m) tạo ma trận vuông cấp m . ví dụ: ones(2,3) ans= 1 1 1 1 1 1 eyes(2,3) ans= 1 0 0 0 1 0 zeros(2,3) ans= 0 0 0 Trang 2
  44. 0 0 0 3.2 Ma trận số phức Số phức trong matlab đ−ợc viết nh− sau: Ví dụ số phức 3+4*i dùng i để chỉ số ảo >> a=3+ 4*i a= 3+ 4*i Nếu muốn ii để chỉ số ảo Ta định nghĩa ii= sqrt(-1) Sau đó bạn viết: >> a=3+ 4*ii a= 3+ 4*i >>A=[ 1+2*i , 3+4*i ; 5+6*i, 4+5*i ] A=[ 1+2*i 3+ 4*i 5+6*i 4+5*i ] 3.3 Tạo vec tơ Khi ta cần khảo sát đặc tính của đồ thị nμo đó trong một khoảng xác định, khoảng xác định nμy đ−ợc biểu diễn d−ới dạng vectơ Ví dụ khảo sát đặc tính đồ thị trong khoảng x=1 đên 100 >> x= 1:100; % x lấy giá trị từ 1 đên100, b−ớc tăng của x lμ 1 >>t=0: 0.1 : 10;% b−ớc nhảy lμ của t lμ 0.1 Công thức chung tạo vec tơ lμ X=Xmin : b−ớc_tăng: Xmax 3.4 Truy nhập các phần tử của ma trận Đê truy nhập các phần tử của ma trận ta lμm nh− sau: Giả sử ma trận 1 2 3 A= 4 5 6 7 8 9 Thì >> A(i,j) ; sẽ truy nhập đến phần tử hμng thứ i vμ cột thứ j Ví dụ để truy nhập đến phần tử thứ nhất ta : >> A(1,1) ans= 1 Đặc biệt để gọi toμn bộ số hμng hoặc toμn bộ số cột dùng toán tử (:) >> A(:,1) % gọi toμn bộ số hμng t−ơng ứng với cột 1 ans= Trang 3
  45. 1 4 7 >>A(1,:) % gọi toμn bộ số cột t−ơng ứng hμng 1 ans= 2 3 >> A(1:2,1) % gọi hμng 1 đến hμng 2 t−ơng ứng với cột thứ nhất ans= 1 4 >>A(1:2,:) % gọi hμng 1 đến hμng 2 t−ơng ứng với tất cả các cột ans= 1 2 3 4 5 6 3.5 Phép tính ma trận vμ mảng a. Phép tính ma trận • Phép tính cộng , phép tính trừ :Điều kiện hai ma trận A vμ B phải có cùng kích th−ớc hoặc một trong hai lμ số vô h−ớng ví dụ: >>a=[1 2 3 ;4 5 6; 7 8 9]; >>b=[2 3 4; 5 6 7; 8 9 10]; >>a+b; ans= 5 7 9 11 13 15 17 19 • Nhân hai ma trận A*B l−u ý rằng số cột của ma trận A phải bằng số cột của ma trận B, ngoại trừ một trong hai lμ số vô h−ớng • Chia trái ma trận (\) X=A\B t−ơng đ−ơng với việc giải hệ ph−ơng trình tuyến tính A*X=B, gần t−ơng đ−ơng với X=inv(A)*B • Chia phải ma trận(/) X=B/A t−ơng đ−ơng với việc giải ph−ơng trình tuyến tính X*A=B gần t−ơng đ−ơng với X= B*inv(A) b. Phép tính dẫy Trang 4
  46. Cho hai mảng sau: >>x=[1 2 3]; >>y=[2 3 4]; • Phép tính cộng , trừ giống nh− phép tính đối với ma trận >>x+y ans= 5 7 • Phép tính nhân(.*) >>x.*y ans= 2 6 12 • Phép tính chia(./ hoặc .\) >> x./y ans= 0.5 0.66 0.75 >>x .\y ans= 2 1.5 0.75 3.6 Giải hệ ph−ơng trình tuyến tính 3.6.1 Hệ ph−ơng trình tuyến tính : Xét hệ ph−ơng trình sau: a11*x1 + a12*x2+ . . . +a1n*xn=b1 a21*x2 + a22*x2+ . . . +a2n*xn=b2 . . am1*x1 + am2*x2+ . . . +amn*xn=bm Bμi toán đặt ra lμ tìm véc tor x=[x1;x2;x3 ;xn] sao cho thoả mãn bμi toán trên 3.6.2 Hệ Ph−ơng trình tuyến tính không đồng nhất Ph−ơng trình nh− sau gọi lμ ph−ơng trình tuyến tính KĐN a1*x1 + a2*x2 + . . . + an*xn = b b đứng độc lập (nó không nhân với biến nμo cả) Xét hệ thống sau: a11*x1 + a12*x2+ . . . +a1n*xn=b1 a21*x2 + a22*x2+ . . . +a2n*xn=b2 . . am1*x1 + am2*x2+ . . . +amn*xn=bm Viết theo ma trận A= [a11 a12 a1n; a21 a22 a2n, am1 am2 amn] Trang 5
  47. X=[x1 x2 xn]; B=[b1 b2 bn]; Trong đó A đ−ợc gọi lμ ma trận hệ số, X lμ vector kết quả 3.6.2.1 Giải hệ ph−ơng trình bằng hμm nghịch đảo inv Nếu m=n thì A lμ ma trận vuông, vμ nếu det(A) lμ khác 0 thì tồn tại A-1 vμ vector kết quả X đ−ợc cho bởi : A-1*A*X=X=A-1*B Ví dụ Giải hệ sau: 2*x1 - x2 = 2 x1 + x2 = 5 Matlab command >> A=[ 2 -1 ; 1 1 ]; >> B=[ 2 ; 5]; >> X= inv(A)*B >> X= 2.3333 2.667 >> X= rats(X) X= 7/3 8/3 Tuy nhiên chúng ta không thể áp dụng ph−ơng pháp trên cho 2*x1 - x2 = 2 2*x1 - x2 = 0 Ma trận hệ số A=[ 2 -1 ; 2 -1]; Vì det(A)=0 => không áp dụng đ−ợc hμm nghịch đảo cho ma trận A 3.6.3 Hệ ph−ơng trình tuyến tính đồng nhất Biểu diễn d−ới dạng ma trận nh− sau A*x=0 • Nếu det(A)#0 hệ có nghiệm duy nhất lμ X=0 Ví dụ xét hệ ph−ơng trình tuyến tính sau 2*x1 - x2=0 x1+ x2=0 ở đây det(A)= 3 cho nghiệm x1=0 , x2=0 • Đối với hệ ph−ơng trình thuần nhất có det(A)=0 thì hệ nμy có vô số nghiệm Ví dụ Xét hệ ph−ơng trình tuyến tính sau -6* x1 + 3*x2 = 0 2* x1 - x2 = 0 Trang 6
  48. Ma trận hệ số A= [ -6 3 ; 2 -1] , det(A)= 0 biểu diễn trên đồ thị thấy rằng hai đ−ờng nμy trùng nhau do vậy hệ trên có vô số nghiệm • Tr−ờng hợp số biến n det(A1)=0 ) Do đó ta xác định tiếp ma trận 2 x 2 Ví dụ nh− sau A2=[ 3 4; -2 3] vμ det(A) # 0 ta nói rằng hạng của ma trận A(ma trận hệ số) lμ bằng 2 đồng nghĩa với việc ta chỉ giải hai ph−ơng trình bất kỳ trong số tất cả các ph−ơng trình trên, vμ số biến chúng ta gán giá trị tuỳ ý lμ = n- r ( trong đó n lμ số biến còn r lμ hạng của ma trận A) Giải hai ph−ơng trình : 3*x1 + 4*x2 - 2*x3= 0 -2*x1 + 3*x2 - 4*x3= 0 Kết quả : x1= (-10/17)*x3 vμ x2=(16/17)*x3 , với x3 lấy giá trị tuỳ ý 3.6.4 Giải hệ ph−ơng trình tuyến tính bằng Matlab(Dùng toán tử \) 2*x1 - x2 = 2 x1 + x2 = 5 >> A=[ 2 -1 ; 1 1]; >> B=[2 ; 5]; >>X=A\B Ph−ơng pháp giải nμy gọi lμ ph−ơng pháp Gaussian elimination Toán tử (\) thông th−ờng cung cấp một kết quả trong Matlab , trong một số tr−ờng hợp nó lμ ph−ơng pháp giải riêng 3.7 Điều kiện có nghiệm Theo Kronecker-Capelli thì Một hệ ph−ơng trình có một lời giải khi vμ chỉ khi ma trận hệ số A vμ ma trận [A B] có cùng hạng. Giả sử hạng của hai ma trận đều lμ r thì xảy ra các tr−ờng hợp sau đây • r=n Hệ ph−ơng trình có nghiệm duy nhất, Trang 7
  49. • r > rank(A), rank([A B]) ans= 2 ans= 2 Chúng ta xem xét ví dụ sau: 2* x1 + 3* x2 + 4*x3 = 4 x1 + x2 + x3 = 5 >> A=[ 2 3 4 ; 1 1 1]; >>B=[ 4 ; 5]; >>rank(A), rank([A B]) ans= 2 ans= 2 >> X= A\B X= 8 0 3 Hạng của hai ma trận A vμ [A B] bằng nhau vμ bằng 2 cho nên hệ có một lời giải , nh−ng do rank(A) > A=[1 2 3 ; 3 2 1 ; 3 4 7; 10 9 8]; >>B= [12 ; 15; 13 ; 17 ]; >>rank(A), rank([A B]) ans= Trang 8
  50. 3 ans= 4 >> X= A\B ans= 1.0887 -0.2527 1.5349 Khi thử lại nh− sau >> A* ans ans= 5.1882 4.2957 13.0000 20.8925 Kết quả không bằng B Hệ ph−ơng trình trên vô nghiệm ,tuy nhiên Matlab vẫn cho nghiệm ,nghiệm nμy không phải nghiệm đúng mμ lμ nghiệm xấp xỉ giải theo tiêu chuẩn bình ph−ơng tối thiểu( ta không đề cập tới) 3.8 Hệ điều kiện yếu Chúng ta nói rằng một vấn đề đ−ợc coi lμ điều kiện yếu nếu một sự thay đổi nhỏ trong dữ liệu sẽ dẫn đến thay đổi lớn trong kết quả. Điều nμy lμ rất nguy hiểm đối với các kỹ s− lμm việc với các thiết bị , sai số ở các thiết bị , sai số do lμm tròn (điều nμy chắc chắn xảy ra) Nếu dữ liệu nμy lμ đầu vμo đối với vấn đề trên thì kết quả thu đ−ợc sẽ khủng khiếp Vấn đề chúng ta bμn tới lμ Điều kiện yếu của hệ ph−ơng trình tuyến tính Ma trận yếu điển hình lμ ma trận Hibert có dạng nh− sau: A=[ 1 1/2 1/3 1/n;1/2 1/3 1/(n+1) 1/3 1/4 1/5 1/(n+2) 1/n 1/(2n)] Ví dụ sau đây: Giải hệ ph−ơng trình tuyến tính có ma trận hệ số sau A=[1 1; 1 1.01] B=[2 ; 2.01]; >> X= A\B X= 1.0000 1.0000 Một sai số nhỏ đ−ợc thể hiện trong long format >> format long; X= A\B X= Trang 9
  51. 1.000000000002 0.999999999998 Nếu ta thay đổi một phần tử của A ví dụ A(1, 2)=1.005 >> A(1,2)=1.005 ; X= A\B X= -0.0000000099991 1.9999999999991 Thay đổi A(1,2) =1.005 so với giá trị cũ lμ 1 tức lμ tăng 0.5% t−ơng ứng với giá trị x(1) giảm 101%, vμ tăng x(2) tăng 100% Cách giải hệ ph−ơng trình điều kiện yếu A*X=B Nếu A lμ ma trận Hillbert sử dụng hμm tính nghịch đảo invhilb(n) trong đó n lμ kích th−ớc của ma trận đó Ví dụ >>A= [ 1/1 1/2 ; 1/2 1/3]; >> B=[1 ;1/2] >>X= invhilb(2)* b Nếu A không phải lμ ma trận hilbert thì sử dụng hμm symbolic Ví dụ A= [ 1 1.01; 0.5 1.02]; A=sym( [1 1.01 ; 0.5 1.02] ); B=[ 1.1; 1.2]; X= A\b 3 .9 Lệnh cond Tính điều kiện của ma trận Cấu trúc: >> cond(A) % A lμ ma trận kết quả trả lại dạng nh− sau: a* 10k ; 0 >A=[1/2 1/3 1/4 ; 1/3 1/4 1/5; 1/4 1/5 1/6]; >> cond(A) ans= 1.3533e+003 Ta thấy rằng k= 3 tức lμ có 3 số không đáng tin cậy Tổng kết Định nghĩa :Hạng ma trận Ar lμ một ma trận r hμng r cột đ−ợc xây dựng từ A , không nhất thiết theo thứ tự trong ma trận A vμ det(Ar)#0 .Nếu bất kỳ ma trận Ar+1 nμo đ−ợc xây dựng từ r+1 hμng vμ r+1 cột của A, det(Ar+1)=0 thì chúng ta nói rằng Matrận A có hạng bằng r Một hệ thống m ph−ơng trình tuyến tính trong n biến (ch−a biết) a11*x1 + a12*x2+ . . . +a1n*xn=b1 Trang 10
  52. a21*x1 + a22*x2+ . . . +a2n*xn=b2 . . am1*x1 + am2*x2+ . . . +amn*xn=bm Có thể viết d−ới dạng form ma trận AX=B Trong đó A lμ ma trận hệ số vμ X lμ vector kết quả Điều kiện có nghiệm Matrận [A B] đ−ợc gọi lμ ma trận mở rộng của hệ. Theo Kronecker- Capelli thì hệ ph−ơng trình tuyến tính có nghiệm khi vμ chỉ khi hạng của ma trận A bằng hạng của ma trận bổ xung • Nếu r= n thì nghiệm trên lμ duy nhất • Nếu r<n thì hệ trên không xác định vμ r biến có thể đ−ợc biểu diễn d−ới dạng hμm của n-r biến khác ,các biến khác nμy có thể cho giá trị bất kỳ( nói cách khác hệ vô số nghiệm) Nghiệm của hệ ph−ơng trình tuyến tính đ−ợc tính trong Matlab bằng toán tử ( \ ) .Nếu hệ có nghiệm duy nhất Matlab sẽ cung cấp cho nó , nếu hệ lμ không xác định(r<n) thì toán tử ( \ ) sẽ cung cấp cho chúng ta một nghiệm riêng trong đó n-r biến sẽ đ−ợc đặt =0. Một nghiệm , nghiệm nμy lμm thoả mãn tổng bình ph−ơng của các nghiệm bé nhất Dùng lệnh X= pinv(A)*B Nếu hạng của A # hạng matrận mở rộng thì toán tử ( \ ) cung cấp một kết quả nh−ng kết quả nμy không phải lμ nghiệm của hệ Hệ thuần nhất khi vector B=0. Một hệ thuần nhất có một nghiệm tầm th−ờng khi det(A) # 0.Nếu det(A)=0 hệ có nhiều hơn một nghiệm trong tr−ờng hợp nμy Matlab sẽ cảnh báo ng−ời dùng : Câu hỏi ôn tập 1. Các cách nhập một ma trận ? 2. Điều kiện có nghiệm của hệ ph−ơng trình đại số tuyến tính , cách tính 3. Lập ch−ơng trình mμ đầu vμo lμ hai ma trận A vμ b, đầu ra lμ kết quả thông bμo hệ có nghiệm hay không. 4. Hệ ph−ơng trình điều kiện yếu lμ gi?, những ảnh h−ởng của nó. Bμi tập Thực hiện các phép toán sau 1.Nhập hai ma trận a=[ 1 2 3; 4 5 6], b=[5 6 7 ;8 9 10] . -Tính Addab= a+b . -Tính Subsab= a-b; -Tính Multab= a*b Trang 11
  53. -Tính Mulba=b*a; -Tính Divab= a/b; vμ b/a 2. Cho mạch điện sau R1 R2 e1 e2 R3 Cho thông số: R1= 10(omh) , R2= 20(omh) , R3= 10(omh) e1= 20(v) , e2= 30(v) Tính dòng điện I1 vμ I2 vμ I3 bằng cách lập theo dạng hệ ph−ơng trình đại số tuyến tính ba ẩn số Bμi tập giải hệ ph−ơng trình tuyến tính sau: A*X= B Trong đó: A=[1/2 1/3 1/4 ; 1/3 1/4 1/5; 1/4 1/5 1/6]; B=[0.95 0.67 0.52] 1. Giải hệ đã cho 2. Thay đổi B(3)=0.53 rồi giải hệ ph−ơng trình, so sánh với tr−ờng hợp trên 3. Tính điều kiện của ma trận nμy vμ đ−a ra nhận xét Chú ý khi giải hệ ph−ơng trình tuyến tính với ma trận hệ số lμ ma trận Hilbert (ma trận điều kiện yếu) thì ta dùng hμm tính nghịch đảo của nó lμ hμm invhilb(n) Định nghĩa Ma trận Hilbert lμ: A=[ 1 1/2 1/3 1/n;1/2 1/3 1/(n+1); Trang 12
  54. Ch−ơng 4 Đồ hoạ Trong Matlab 4 .1 Điểm vμ đ−ờng trong đồ hoạ matlab Dùng hμm Plot để vẽ điểm -Đ−ờng thẳng trong mặt phẳng Để vẽ các đ−ờng trong mặt phẳng,các hμm số phụ thuộc vμo biến ví dụ nh− y=f(x) thì trong matlab cung cấp cho ta hμm plot(x,y) để vẽ ,trong không gian ba chiều thì dùng hμm plot3(x,y,z) . tr−ớc hết ta nói qua về cách dùng hμm plot vμ các ví dụ minh hoạ cụ thề để hiểu rõ hơn về vấn đề nμy: 4.1.1 Lệnh plot Syntax plot(Y) plot(X1,Y1, ) plot(X1,Y1,LineSpec, ) plot( ,'PropertyName',PropertyValue, ) h = plot( ) Mô tả: Hμm plot có nhiều cách dùng nh− bạn đã thấy ở trên plot(y): Hμm nμy để biểu diễn các cột của y theo các chỉ số t−ơng ứng của chúng nếu y lμ ma trận các số thực, nếu y lμ số phức thì plot(y) t−ơng ứng với plot(real(y),image(y)). Ta có thể lấy ví dụ sau: A=[1 2 3 4 5 6 7 8 9 ] plot(A) sẽ đ−ợc kết quả nh− sau(giao điểm ký hiệu lμ dấu o tròn ) Trang 1
  55. Các dấu tròn trên hình vẽ thể hiện các giao điểm giữa các phần tử của các cột vμ các chỉ số t−ơng ứng của chúng trong từng cột . Cụ thể các giao điểm (1,1) vμ (2,1);(3,1) t−ơng ứng lμ phần tử thứ nhất của các cột,do lμ phần tử thứ nhất cho nên có chỉ số lμ 1 plot(x,y ): Vẽ các đ−ờng thẳng t−ơng ứng với các cặp điểm (x,y )của véc tơ x vμ vec tơ y.Nếu chỉ một trong x hoặc y lμ ma trận thì nó sẽ vẽ theo vector cột hoặc hμng t−ơng ứng với vector còn lại phù hợp với kích th−ớc hμng hay cột của matrận đó. Cụ thể : Giả thử x: lμ vector cot x=[1 2 3]; vμ y lμ martrận y=[1 2 3;4 5 6]; rõ rμng lμ x có kích th−ớc bằng với kích th−ớc hμng của matrận do vậy mμ nó sẽ biểu diễn các hμng của y theo x .Kết quả plot(x,y) nh− sau: plot(x,y,linespec ) cũng có thể viết nh− sau plot(x,y,linespec,x1,y1,linespec1, ); Hμm nμy giống nh− hμm trên ,nh−ng các thuộc tính về đ−ờng đ−ợc thể hiện ở trong linespec .Sau đây ta có thể liệt kê các thuộc tính về đ−ờng Matlab cho phép bạn sử dụng một số ký tự sau đây để xác định thuộc tính của đ−ờng • Line style • Line width • Color • Marker type • Marker size • Marker face and edge coloring (for filled markers) Trang 2
  56. Matla b định nghĩa các chuỗi xác định cho kiểu đ−ờng, Marker types vμ colors 1. Line Style Specifiers Specifier Line Style - đ−ờng liền(default) đ−ờng nét đứt : dotted line -. dash-dot line 2. Marker Specifiers Specifier Marker Type + plus sign O Circle * Asterisk . Point X Cross S Square D Diamond ^ upward pointing triangle V downward pointing triangle > right pointing triangle Trang 3
  57. < left pointing triangle P five-pointed star (pentagram) H six-pointed star (hexagram) 3. Color Specifiers Specifier Color R Red G Green B Blue C Cyan M Magenta Y Yellow K Black W White Các lệnh plot chấp nhận một thông số Linespec ,thông số nμy định nghĩa ba phần tử ,các phần tử nμy xác định đ−ờng • Line style (kiểu đ−ờng) • Marker symbol (Kiểu đánh dấu) • Color (kiểu mầu) Chú ý rằng khi kết hợp chúng ta có thể để theo một thứ tự bất kỳ For example plot(x,y,'-.or') Trang 4
  58. Vẽ y theo x sử dụng kiểu đ−ờng lμ dash-dot đặt vòng tròn(o) tại các giao điểm (x,y) ,vμ mầu của đ−ờng vμ mầu của vòng tròn đánh dấu lμ mầu đỏ Nếu bạn xác định một điểm đánh dấu, không phải lμ kiểu đ−ờng, Matlab chỉ vẽ các điểm đánh dấu I. Ví dụ plot(x,y,'d') 4.1.2 Hμm plot(x,y, protypename,protypevalue ) Hμm nμy xác định rõ các thuộc tính của đ−ờng thẳng ví dụ nh− Chiều rộng của đ−ờng thẳng LineStyle {-} | | : | -. | none Độ rộng của đ−ờng(Linewith) mặc định lμ o.5 points( 1point=1/72 inch) Ví dụ về Linepropertype: plot(t,sin(2*t),'-mo', 'LineWidth',2, 'MarkerEdgeColor','b', 'MarkerFaceColor',’r’, 'MarkerSize',12) Giải thích nh− sau: Hμm trên vẽ đồ thị f=sin(2*t) theo biến t, đặc tính của đ−ờng lμ mầu (magne) ,giao hai điểm lμ hình tròn(s), đ−ờng lμ liên tục(solid line) Line width lμ 2(point) ( 1point=1/72 inches) default lμ 0.5 points MarkerEdgeColor lμ mầu đen( blue) Mỗu trong (mặt) của các điểm nút giao lμ mầu đỏ: Chúng ta thấy rằng đồ thị đ−ợc xây dựng từ việc nối các điểm có toạ độ (x,y) bằng các đoạn thẳng *tỷ lệ các trục sẽ đ−ợc matlab tự động tạo ra sao cho phù hợp 4.1.3 Để vẽ nhiều đồ thị trên cùng một hình vẽ thì chúng ta có hai cách +Vẽ đồ thị thứ nhất + Dùng lệnh Hold on +Vẽ tiếp đồ thị thứ hai + hold off hoặc Dùng hμm plot(x1,y1,x2,y2) Ví dụ ta vẽ hai hμm y=sin(x) vμ y1=cos(x) Ta dùng lệnh plot nh− sau: plot(x,y,x,y1); Trang 5
  59. 4.1.4 Title , xlabel, ylabel, gtext, legend, grid Title dùng để viết tiêu đề cho đồ thị Ví dụ Title( ) Xlabel( string) đặt tên nhãn cho trục x Ylabel(string) đặt tên nhãn cho trục y Gtext(string) để viết text vμo đồ thị Legend(string,-1) để ghi chú thích cho đồ thị, số -1 để ghi chú thích bên ngoμi các trục của hình vẽ Grid on hoặc Grid off để mở hoặc tắt Grid t=0:pi/6:pi; plot(t,sin(2*t),'-mo', 'LineWidth',2, 'MarkerEdgeColor','b', 'MarkerFaceColor','r', 'MarkerSize',14) legend('y=sin(2*t)','y=cos(2*t)',-1);( chú ý viết đúng thứ tự) grid on; xlabel('truc thoi gian'); ylabel('truc Sin va cos'); title('Do thi ham sin(2*t)'); hold on; j=cos(2*t); plot(t,j,'-b+'); hold off; 4.2 Hμm plot3(x,y,z) để vẽ các điểm vμ đ−ờng trong không gian Ngoμi việc thêm trục z các hμm nμy sử dụng giống nh− hμm plot(x,y) Cấu trúc plot3(X1,Y1,Z1, ) plot3(X1,Y1,Z1,LineSpec, ) plot3( ,'PropertyName',PropertyValue, ) h = plot3( ) Việc sử dụng các hμm nμy giống với hμm Plot trong 2D do vậy ta không đề cập tới nữa Chú ý tới hμm View(a,b) để quan sát góc nhìn của đồ thị trong đó a lμ góc tính theo chiều ng−ợc chiều kim đồng hồ từ phía âm của trục y còn b lμ góc nhìn tính bắng độ xuống mặt phẳng x,y Giá trị mặc định của a vμ b lμ -37.5 0 vμ 30 0 %Ví dụ Trang 6
  60. %Plot a three-dimensional helix. % Vẽ mặt phẳng x= sin(t) ,y=cos(t) , z=t t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t) grid on; axis square view(-80,30); xét hai tr−ờng hợp view(-80,30); view(-40,30); Khi cho a=0 vμ b=90 thì hình vẽ trở về hình vẽ trong mặt phẳng toạ độ hai chiều 4.3 Hμm semilogx, semilogy Semi-logarithmic plots Cấu trúc semilogx(Y) semilogx(X1,Y1, ) semilogx(X1,Y1,LineSpec, ) semilogx( ,'PropertyName',PropertyValue, ) h = semilogx( ) semilogy( ) h = semilogy( ) Mô tả Semilogx(y) vẽ giống nh− plot(y) nh−ng chỉ khác rằng tỷ lệ trên trục x lμ logarit cơ số 10, t−ơng tự nh− vậy đối với Semilogy(y) thì tỷ lệ trên trục y theo logarit cơ số 10 ứng với truc x. X=0:10:1000; subplot(2,2,2); subplot(2,2,3); subplot(2,2,4 Y=100*x; semilogy(x,y,'.'); loglog(x,y,'.'); ); Subplot(2,2,1); xlabel('tuyen xlabel('log'); plot(x,y,'.'); Semilogx(x,y,'.'); tinh'); ylabel('log'); xlabel('tuyen Xlabel('log'); ylabel('log'); title(' tinh'); Ylabel('tuyen tinh'); title(' loglog(x,y)'); ylabel('tuyen Title(' semilogx(x,y)'); grid on; tinh'); Grid on; title(' Trang 7
  61. Trong không gian 3 chiều thì ta không dùng các hμm trên để vẽ ,mμ ta sử dụng hμm plot3 vμ dùng hμm set để đặt trục toạ độ t=1:1:100; x=sin(20*pi*t); y=cos(20*pi*t); z=t; subplot(1,2,1); plot3(x,y,z); set(gca,'Zscale','log');grid on;view(125,7); 4.4 Vẽ trong hệ toạ độ cực Cấu trúc polar(theta,rho) polar(theta,rho,LineSpec) Mô tả The polar function accepts polar coordinates, plots them in a Cartesian plane, and draws the polar grid on the plane. polar(theta,rho) creates a polar coordinate plot of the angle theta versus the radius rho. theta is the angle from the x-axis to the radius vector specified in radians; rho is the length of the radius vector specified in dataspace units. polar(theta,rho,LineSpec) LineSpec specifies the line type, plot symbol, and color for the lines drawn in the polar plot. Examples Create a simple polar plot using a dashed, red line: t = 0:.01:2*pi; polar(t,sin(2*t).*cos(2*t),' r') this is a figure for plotting Polar(phi, r); Khi chuyển từ hệ toạ độ cực sang hệ toạ độ Đêcart ta lμm nh− sau [x,y]=pol2cart(phi, r) sau đó dùng lệnh Plot(x,y) t = 0:.01:2*pi; h=sin(2*t).*cos(2*t); [x,y]=pol2cart(t,h); axis(equal) plot(x,y);grid on; notice : command Axis(‘equal’) set unit which is divided in X and Y axis Đối với hệ toạ độ cầu Trong Matlab không có hμm để vẽ .tuy nhiên ta có thể chuyển đổi từ hệ toạ độ cầu thμnh hệ toạ độ ĐềCart trong không gian [x,y,z]=sph2cart(theta,phi,r) sau đó dùng hμm vẽ trong không gian lμ plot3(x,y,z) Trang 8
  62. 4.5 Đồ thị cột bar, barh Cấu trúc bar(Y) bar(x,Y) bar( ,width) bar( ,'style') bar( ,LineSpec) II. Mô tả Vẽ biểu đồ các giá trị trong véc tor hoặc trong Matrận nh− lμ thanh ngang hoặc thanh thẳng đứng bar(Y) vẽ một đồ thị cột cho mỗi phần tử trong Y. Nếu Y lμ một ma trận ,bar nhóm các thanh đ−ợc tạo ra bởi mỗi phần tử trong mỗi hμng. Tỷ lệ trục x từ 1 to length(Y) khi Y lμ một vector, vμ 1 đến size(Y,1), đó chính lμ số hμng , khi Y lμ một ma trận . bar(x,Y) vẽ một đồ thị cột cho mỗi phần tử trong Y tại các vị trí xác định trong x, ở đó x lμ vector tăng định nghĩa các khoảng cho các cột thẳng đứng. Nếu Y lμ một ma trận, bar gộp các cột t−ơng ứng trong cùng một hμng trong Y tại vị trí t−ơng ứng với một phần tử trong x. bar( ,width) hμm nμy giống các hμm trên nh−ng có thêm đặc tính đặt độ rộng của cột.Giá trị mặc định của width lμ 0.8,. Nếu width is 1, các cột trong một nhóm chạm vμo bar( ,'style') Xác định kiểu của cột 'style' lμ 'group' hoặc 'stack'. 'group' lμ chế độ mặc định • 'group' biểu diễn n nhóm của m cột thẳng đứng ,ở đó n lμ số hμng vμ m lμ số cột trong Y. • 'stack' Biểu diễn đồ thị cột cho mỗi hμng của Y. Chiều cao của cột lμ tổng các phần tử trong một hμng bar( ,LineSpec) displays all bars using the color specified by LineSpec. Ví dụ Plot a bell shaped curve: x = -2.9:0.2:2.9; bar(x,exp(-x.*x)) colormap hsv Trang 9
  63. T−ơng tự đồ thị cột trong không gian lệnh vẫn giữ nguyên nh−ng thay vì bar ta thay lệnh bar3(x,y,z) 4.6 Đồ thị bánh (Pie) Cấu trúc: pie( x ) :Hμm nμy vẽ đồ thị bánh với các 'khoanh' đ−ợc xác định bởi phần trăm các giá trị trong vector x ví dụ x=[ 1 2 3 4] phân thμnh 4 khoanh trên toμn bộ vòng tròn ,mỗi khoanh t−ơng ứng phần trăm các phần tử trong x >>x=[ 1 2 3 4]; >>pie(x) cho đồ thị nh− sau: Đỉnh cao nhất ứng với phần tử đầu tiên của véc tor ,các phần tử tiếp theo đ−ợc bố trí theo chiều ng−ợc chiều kim đồng hồ . Nếu tổng các phần tử trong vec tor x > x=[ 0.1 0.2 0.3 ] % t−ơng ứng với 10% 20% 30% >>pie(x); Trang 10
  64. Trang 11
  65. ch−ơng 4 Ma trận - các phép toán về ma trận. 4.1 Khái niệm: - Trong MATLAB dữ liệu để đ−a vμo xử lý d−ới dạng ma trận. - Ma trận A có n hμng, m cột đ−ợc gọi lμ ma trận cỡ n ì m. Đ−ợc ký hiệu An ì m - Phần tử aij của ma trận An ì m lμ phần tử nằm ở hμng thứ i, cột j . - Ma trận đơn ( số đơn lẻ ) lμ ma trận 1 hμng 1 cột. - Ma trận hμng ( 1 ì m ) số liệu đ−ợc bố trí trên một hμng. a11 a12 a13 a1m - Ma trận cột ( n ì 1) số liệu đ−ợc bố trí trên 1 cột. a11 a21 a31 . . an1 4.1.1 Các qui định để định nghĩa một ma trận: - Tên ma trận có thể gồm 31 ký tự. Bắt đầu phải bằng chữ cái sau đó có thể lμ số, chữ cái, các ký tự đặc biệt Tên đặt bên trái dấu bằng , bên phải dấu bằng lμ các phần tử của ma trận. - Bao quanh các phần tử của ma trận bằng dấu ngoặc vuông. - Các phần tử trong ma trận đ−ợc cách nhau bởi ký tự trống hoặc dấu phẩy ( , ). - Kết thúc một hμng trong ma trận bởi dấu ( ; ). 4.1.2 Các cách để nhập một ma trận: - Liệt kê trực tiếp:VD >> A =[1 2 3; 4 5 6 ; 7 8 9] >> B =[1 2 3; 4 5 6 ; 7 8 9] - Nhập thông qua lệnh. Dùng lệnh input Trang 1
  66. >> input('Nhap gia tri cho ma tran C = ') Nhap gia tri cho ma tran C = [1 3 4;4 5 7;7 5 8] ans = 1 3 4 4 5 7 7 5 8 Chú ý khi kết thúc một câu lệnh có thể dùng dấu (; ) hoặc không dùng dấu ( ;). - Nếu dùng dấu (;) câu lệnh đ−ợc thực hiện nh−ng kết quả không hiện ra mμn hình. - Nếu không dùng dấu ( ; ) câu lệnh đ−ợc thực hiện vμ kết quả đ−ợc hiện ra mμn hình. - Trong cả 2 tr−ờng hợp trên sau khi câu lệnh đ−ợc thực hiện kết quả đều đ−ợc l−u vμo trong bộ nhớ vμ có thể sử dụng cho các câu lệnh tiếp theo. Vd >>a = [1 2 3;3 2 4;4 5 1]; >> b = [1 2 3;4 5 6;7 8 9] b = 1 2 3 4 5 6 7 8 9 Cả 2 ma trận A, B đều đ−ợc l−u vμo trong bộ nhớ vμ có thể đ−ợc sử dụng cho những câu lệnh tiếp theo. >> c = a*b c = 30 36 42 39 48 57 31 41 51 4.1.3 Hiển thị lại ma trận: Trang 2
  67. - Để hiển thị lại ma trận ta gõ tên ma trận sau đó enter. VD >> c c = 30 36 42 39 48 57 31 41 51 - Để hiển thị nội dung của ma trận hoặc lời thông báo (trong dấu nháy đơn) ta dùng lệnh: disp VD >> disp (c) c = 30 36 42 39 48 57 31 41 51 >> disp('hiển thị lời thông báo nμy') hiển thị lời thông báo nμy Chú ý: - Các phần tử trong ma trận có thể lμ các số phức: VD >> a=[1+3i 2+2i;3+i 1+i] a = 1.0000 + 3.0000i 2.0000 + 2.0000i 3.0000 + 1.0000i 1.0000 + 1.0000i - Các phần tử trong ma trận có thể lμ các ký tự. Nh−ng tr−ớc tiên ta phải khai báo các phần tử bằng lệnh syms VD >> syms sinx cosx a >> b = [ sinx cosx; a cosx] b = [ sinx, cosx] [ a, cosx] >> c=[a sinx; a a] Trang 3
  68. c = [ a, sinx] [ a, a] 4.2. Xử lý trong ma trận: 4.2.1 Tạo véctơ từ ma trận: Công thức tổng quát: Biến = giới hạn đầu : b−ớc chạy : gới hạn cuối Giới hạn đầu, giới hạn cuối, b−ớc chạy: lμ các số thực B−ớc chạy có thể d−ơng hoặc âm. VD Tạo 1 vectơ t chạy từ 0 đến 0.6 với b−ớc chạy tiến lμ 0.1 >> t=0: 0.1:0.6 t = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 VD: Tạo 1 vectơ t chạy từ 0.6 đến 0 với b−ớc chạy lùi lμ 0.1 >>t=0.6:-0.1:0 t = 0.6000 0.5000 0.4000 0.3000 0.2000 0.1000 0 Chú ý : Trong tr−ờng hợp giới hạn trên, gới hạn d−ới lμ các số nguyên vμ b−ớc chạy bằng 1 thì ta không cần đ−a b−ớc chạy vμo trong biểu thức. VD >> C = 1:5 C = 1 2 3 4 5 4.2.2 Gọi các phần tử trong ma trận. MATLAB cho phép ta xử lý đến từng phần tử của ma trận. Để truy cập đến từng phần tử của ma trận ta phải gọi đ−ợc chúng thông qua chỉ số của từng phần tử. Tên của ma trận( Chỉ số hμng, chỉ số cột) VD: >> A = [1:3; 4:6; 7:9] A = 1 2 3 4 5 6 7 8 9 >> B = A(1,1) Trang 4
  69. B = 1 >> A(3,3) = A(2,2) + B A = 1 2 3 4 5 6 7 8 6 Chú ý: Trong tr−ờng hợp ta muốn gọi tất cả các hμng hoặc tất cả các cột ta có thể dùng toán tử hai chấm ( : ) VD: >> A = [1:3; 4:6; 7:9] A = 1 2 3 4 5 6 7 8 9 >> B = A(2,:) B = 4 5 6 >>C = A(:,2) C = 2 5 8 4.2.3 Gọi 1 ma trận con từ một ma trận lớn. VD >> A = [1:3; 4:6; 7:9] A = 1 2 3 4 5 6 7 8 9 >> B = A ( 2:3,1:2 ) B = Trang 5
  70. 5 7 8 >> c =[a(1,1) a(3,3); a(2,3) a(3,1)] c = 1 9 6 7 4.3 Các ma trận đặc biệt: 4.3.1 Ma trận zeros. Tất cả các phần tử trong ma trận đều bằng 0. VD >> C = zeros (2,3) C = 0 0 0 0 0 0 >> d = zeros(3) d = 0 0 0 0 0 0 0 0 0 4.3.2 Ma trận ones. Tất cả các phần tử trong ma trận đều bằng 1 VD >> C = ones (2,3) C = 1 1 1 1 1 1 >> d = ones(3) d = 1 1 1 1 1 1 1 1 1 4.3.3 Ma trận ma ph−ơng Magic: Tổng tất cả giá trị các phần tử trên hμng = Tổng tất cả giá trị các phần tử trên cột = Tổng tất cả giá trị các phần tử trên đ−ờng chéo của ma trận Vd Trang 6
  71. >> A = Magic (3) A= 8 1 6 3 5 7 4 9 2 4.3.4 Ma trận eye. Tất cả các phần tử trên đ−ờng chéo có giá trị 1, các phần tử khác có giá trị 0. VD >> B = eye (3) B = 1 0 0 0 1 0 0 0 1 4.4 Các phép toán vector: Phép toán Công thức Matlab Cộng, trừ A+B, A-B A+B, A-B Nhân mảng A.B = C A.*B Chia trái mảng B\A B.\A Chia phải mảng A/B A./B Luỹ thừa mảng AB A.^B 4.4.1 Các phần tử lμ các số thực: >>a=[1 1 2;2 1 1] a = 1 1 2 2 1 1 >> b=[1 2 2; 1 1 1] b = 1 2 2 1 1 1 Trang 7
  72. >> c=a.*b c = 1 2 4 2 1 1 >> d=a./b d = 1.0000 0.5000 1.0000 2.0000 1.0000 1.0000 >> e=a.\b e = 1.0000 2.0000 1.0000 0.5000 1.0000 1.0000 >> f=a.^b f = 1 1 4 2 1 1 4.4.2 Các phần tử lμ các số phức. >>a=[1+i 2+3i;3-4i 1+3i] a = 1.0000 + 1.0000i 2.0000 + 3.0000i 3.0000 - 4.0000i 1.0000 + 3.0000i >> b=[2+i 2+2i;1-4i 3+3i] b = 2.0000 + 1.0000i 2.0000 + 2.0000i 1.0000 - 4.0000i 3.0000 + 3.0000i >> c=a.*b c = 1.0000 + 3.0000i -2.0000 +10.0000i -13.0000 -16.0000i -6.0000 +12.0000i 4.4.3 Các phần tử lμ các tham số: >> syms a b c Trang 8
  73. >>A=[a b; b c] A = [ a, b] [ b, c] >> B=A B = [ a, b] [ b, c] >> C=A.*B C = [ a^2, b^2] [ b^2, c^2] 4.5 Các phép toán về ma trận: 4.5.1 Phép chuyển vị: Phép chuyển đổi véctơ hμng thμnh véctơ cột gọi lμ phép chuyển vị. Thực hiện phép chuyển vị bằng toán tử dấu nháy đơn ( ‘ ). VD >> A = [1:3; 4:6; 7:9] A = 1 2 3 4 5 6 7 8 9 >> B = A’ B = 1 4 7 2 5 8 3 6 9 Ma trận B đ−ợc gọi lμ ma trận chuyển vị của ma trận A 4.5.2 Phép cộng - trừ ma trận.( + , - ) Phép cộng vμ trừ ma trận đ−ợc thực hiện với các ma trận có cùng kích cỡ. Trang 9
  74. Cij = Aij + Bij Dij = Aịj - Bij >> A = [1:3; 4:6; 7:9] A = 1 2 3 4 5 6 7 8 9 >> B = A’ B = 1 4 7 2 5 8 3 6 9 >> C = A + B C = 2 6 10 6 10 14 10 14 18 4.5.3 Phép nhân, chia ma trận: C = A*B. Để thực hiện đ−ợc phép nhân trên thì số cột của ma trận A phải bằng số hμng của ma trận B. n Cij = ∑ Aik .B kj k= 1 Các phần tử trong ma trận C đ−ợc tính nh− sau: VD các phần tử trong ma trận lμ các số thực. >> A = [1 2 1; 1 0 1] A = 1 2 1 1 0 1 >> B = [1 0 2; 2 1 1; 1 1 1] Trang 10
  75. B = 1 0 2 2 1 1 1 1 1 >> C = A * B C = 6 3 5 2 1 3 VD các phần tử trong ma trận lμ các số phức. >> a=[1+2i 2+2i;1+3i 2+2i] a = 1.0000 + 2.0000i 2.0000 + 2.0000i 1.0000 + 3.0000i 2.0000 + 2.0000i >> b=[1+i 2+i;1+3i 2+i] b = 1.0000 + 1.0000i 2.0000 + 1.0000i 1.0000 + 3.0000i 2.0000 + 1.0000i >> c=a*b c = -5.0000 +11.0000i 2.0000 +11.0000i -6.0000 +12.0000i 1.0000 +13.0000i VD các phần tử trong ma trận là các tham số >> syms a b c >>d=[2*a b c; a b c; 0 0 a] d = [ 2*a, b, c] [ a, b, c] [ 0, 0, a] >> e=[a b c; 2*a 2*b^2 c ; a 0 b] e = Trang 11
  76. [ a, b, c] [ 2*a, 2*b^2, c] [ a, 0, b] >> f=d*e f = [ 2*a^2+2*b*a+c*a, 2*b*a+2*b^3, 2*c*a+2*c*b] [ a^2+2*b*a+c*a, b*a+2*b^3, c*a+2*c*b] [ a^2, 0, b*a] Phép chia ma trận thực chất lμ phép nhân với ma trận nghịch đảo. A 1 C = = A* B B Lấy ma trận nghịch đảo thực hiện bằng hμm inv. >> A = [1 2 1; 1 0 1] A = 1 2 1 1 0 1 >> B = [1 0 2; 2 1 1; 1 1 1] B = 1 0 2 2 1 1 1 1 1 >> C = inv(B) C = 0 1.0000 -1.000 -0.5000 -0.5000 1.5000 0.500 -0.5000 0.5000 >> D = A*C D= - 0.5000 -0.5000 2.5000 0.5000 0.5000 -0.5000 Trang 12
  77. Chú ý: Trong các phép tính trên nếu nếu thực hiện với một số thực thì tất cả các phần tử trong ma trận sẽ đ−ợc cộng, trừ, nhân, chia ( / ) với số thực đó tuỳ thuộc vμo phép toán t−ơng ứng. >> A = [1 2 1; 1 0 1] A = 1 2 1 1 0 1 >> B = A*2 B = 2 4 2 2 0 2 4.5.4 Phép quay ma trận: Quay ma trận B đi 1 góc 90 độ theo ng−ợc chiều kim đồng hồ. >> a=[1 2 3;4 5 6;7 8 9] a = 1 2 3 4 5 6 7 8 9 >> b=rot90(a) b = 3 6 9 2 5 8 1 4 7 4.5.5.Phép đảo ma trận: Đảo các phần tử của ma trận từ trái sang phải. >> c=fliplr(b) c = 9 6 3 8 5 2 7 4 1 Trang 13
  78. Ch−ơng 5 Cơ sở ph−ơng pháp tính 5.1 Nội suy vμ thuật toán nội suy Vì sao phải nội suy: Trong thực tế khi đo một đại l−ợng vật lý bất kỳ tại những điều kiện môi tr−ờng thay đổi(còn có nhiều đại l−ợng khác thay đổi) ta nhận đ−ợc các giá trị rời rạc ,vμ có tính thống kê,ứng với mỗi thời điểm ta nhận đ−ợc một giá trị đo nh− vậy khi ta muốn xác định giá trị đo ở một thời điểm bất kỳ thì ta phải dùng phép nội suy. Trong ch−ơng nμy ta chỉ tìm hiểu vμ tính toán cho 2 phép nội suy đó lμ : +Nội suy lagrange cho bμi toán một chiều +Nội suy lagrange cho bμi toán hai chiều 5.1.1 Nội suy lagrange cho bμi toán một chiều I. Lý thuyết Giả sử có n điểm đo rời rạc t−ơng ứng với kết quả đo nh− sau: x x0 x1 x2 . . . . . . . . . . xn f f0 f1 f2 . . . . . . . . . . fn Công thức nội suy lagrange bậc N tính giá trị đo đ−ợc tại một điểm bất kỳ lμ : Thuật toán nội suy: % thuat toan noi suy cho bai toan mot chie function T=NS1C(x,f,xa); i=length(x); j=length(f); T=0;n=i; if(i~=j) error('Ban nhap sai'); end i=1; while(i<=n) g=1;j=1; while(j<=n) if(i~=j) g=g*(xa-x(j))./(x(i)-x(j)); end j=j+1; end T=T+g*f(i); Trang 1
  79. % in ra so lieu sl=[i x(i) f(i)] i=i+1; end Nhập x , y,xa i= length(x) j=length(y) n=i; f=0 i~=j ? Gán i=1 i<=n ? Gán j=1; 1 j<=n ? i=i + 1 i~=j ? f= f + g* Thuật toán nội suy cho bμi toán g=g* (Xa-x(j))/(x(i)- j=j+ một chiều lagrange (j) 1 interp1(nội suy theo spline) One-dimensional data interpolation (table lookup) Syntax yi = interp1(x,Y,xi) yi = interp1(Y,xi) yi = interp1(x,Y,xi,method) Trang 2
  80. yi = interp1(x,Y,xi,method,'extrap') yi = interp1(x,Y,xi,method,extrapval) Mô tả yi = interp1(x,Y,xi) trả về vector yi chứa các phần tử t−ơng ứng với các phần tử của xi vμ giá trị trả về đó đ−ợc xác định bằng cách sự nội suy(interpolation) trong vectors x and Y. The vector x xác định các điểm tại đó dữ liệu Y đ−ợc cho tr−ớc (the points at which the data Y is given). Nếu Y lμ một ma trận, thì việc nội suy đ−ợc thực hiện cho mỗi cột của Y vμ Yi có kích th−ớc lμ yi is length(xi)-by-size(Y,2). (the interpolation is performed for each column of Y and yi is length(xi)-by-size(Y,2)) yi = interp1(Y,xi) giả sử rằng x = 1:N, ở đó N =length(y) lμ chiều dμi của Y nếu Y lμ vector, hoặc size(Y,1) nếu Y lμ matrận . yi = interp1(x,Y,xi,method) interpolates using alternative methods: 'nearest' Nearest neighbor interpolation 'linear' Linear interpolation (default) 'spline' Cubic spline interpolation 'pchip' Piecewise cubic Hermite interpolation 'cubic' (Same as 'pchip') 'v5cubic' Cubic interpolation used in MATLAB 5 For the 'nearest', 'linear', and 'v5cubic' methods, interp1(x,Y,xi,method) trả về NaN cho tất cả các phần tử của xi mμ nằm ngoμi khoảng xác định của x. Đối với tất cả các ph−ơng pháp, interp1 đề cập đến việc xác định dữ liệu(nội suy cho cả các điểm nằm ngoμi vùng của x) nằm ngoμi phạm vi biểu diễn yi = interp1(x,Y,xi,method,'extrap') uses the specified method to perform extrapolation for out of range values. yi = interp1(x,Y,xi,method,extrapval) returns the scalar extrapval for out of range values. NaN and 0 are often used for extrapval. Lệnh interp1 nội suy giữa các điểm. Nó tìm giá trị tại các điểm ở giữa các điểm đã xác định, của hμm một chiều(of a one-dimensional function f(x)) hμm nμy đ−ợc xác định d−ới dữ liệu cho tr−ớc ( underlies the data. ) Hμm nμy đuợc biểu diễn dựa trên quan hệ các cặp véc tor x,Y,xi,Yi Trang 3
  81. Interpolation is the same operation as table lookup. Described in table lookup terms, the table is [x,Y] and interp1 looks up the elements of xi in x, and, based upon their locations, returns values yi interpolated within the elements of Y. Examples Example 1. Generate a coarse sine curve and interpolate over a finer abscissa. x = 0:10; y = sin(x); xi = 0:.25:10; yi = interp1(x,y,xi); plot(x,y,'o',xi,yi) Example 2. Here are two vectors representing the census years from 1900 to 1990 and the corresponding United States population in millions of people. t = 1900:10:1990; p = [75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633]; The expression interp1(t,p,1975) interpolates within the census data to estimate the population in 1975. The result is ans = 214.8585 Trang 4
  82. Ví dụ : >> x=[1 2 3 4]; >> f=[0.671 0.620 0.567 0.512]; >> interp1(x,f,1.5) ans = 0.6455 5.1.2 Nội suy cho bμi toán hai chiều f(i-1,j) f(i,j- yi fe fk f(i-1,j- yi-1 Mục đích của f(i,j- bμi toán lμ: Xác xi-1 xi định giá trị f(x,y) của một vị trí bất kỳ trong một mặt phẳng xác định (biết các toạ độ vμ giá trị các điểm xung quanh x(i), x(i- 1) ) Muốn xác định giá trị tại một điểm có vị trí xi-1<x<xi vμ yi-1<y<yi ta dùng ph−ơng pháp nội suy hai chiều, thực chất của ph−ơng pháp nμy lμ thực hiện hai lần bμi toán nội suy một chiều Bμi 1: Nội suy theo ph−ơng y tìm ra fe vμ fk Bμi 2: Nội suy theo ph−ơng x từ fe đến fk để tìm g(x,y) fe= yj− y y− yj −1 yj− y y− yj −1 f( i− 1, j − 1) + f( i− 1, j ); f = f( i , j − 1) + f(,) i j yj− yj −1 yj− yj −1 f yj− yj −1 yj− yj −1 xi− x x− xi −1 g(x,y)= fe + f xi −xi −1 xi −xi −1 f Ch−ơng trình có thể đ−ợc viết nh− sau: Quy −ớc Đầu vμo lμ f=[f(1) f(2) f(3) f(4)] t−ơng ứng với [f(i-1,j-1) f(i-1,j) f(i,j-1) f(i,j)] ; x=[ x(i-1) x(i)] function g= C5(x,y,f,xa,ya) % trong do x=[x(i-1) x(i)] y=[y(i-1) y(i)] % xa ya la toạ độ của điểm cần tìm Trang 5
  83. % f=[f1 f2 f3 f4] lμ véc tor f t−ơng ứng với f(xy) i=length(x); j=length(y); fe=(1/(y(i)-y(i-1)))*((y(j)-ya)*f(1)+(ya-y(j-1))*f(2));% tính fe fk=(1/(y(i)-y(i-1)))*((y(j)-ya)*f(3)+(ya-y(j-1))*f(4));% tính fk g=(1/(x(i)-x(i-1)))*((x(i)-xa)*fe+(xa-x(i-1))*fk);% tính g Thực hiện trong command window nh− sau >> x=[1 2 ]; >> y=[3 4]; >> f=[5 6 7 8]; >> xa=1.5,ya=3.5; >> g=C5(x,y,f,xa,ya) g = 6.5000 Có nhiều cách nội suy tuy nhiên chúng ta chỉ xem xét hai ph−ơng pháp trên mμ thôi 5.2 Giải ph−ơng trình phi tuyến Dùng ph−ơng pháp chí đôi để xác định nghiệm của ph−ơng trình Nội dung toán học của ph−ơng pháp nh− sau: xét ph−ơng trình f(x)=0 Trên khoảng phân ly nghiệm [a b] , chia đôi [a b] bởi c=(a+b)/2 Nếu f(c)=0 thì c lμ nghiệm của ph−ơng trình, nếu f(c)~=0 thì so sanh dấu của f(c) với f(a) vμ f(b), f(a)*f(c)<0 khoảng phân ly nghiệm mới lμ [a c], f(c)*f(b)<0 thì khoảng phân nghiệm lμ [c b] Tiếp tục chia đôi các khoảng phân ly nghiệm cho đến khi tìm đ−ợc giá trị cn nμo đó mμ f(cn)=0 thì cn chính lμ nghiệm .Tuy nhiên việc tìm chính xác cn lμ rất khó khăn ng−ời ta chỉ tìm nghiệm gần đúng trong một sai số cho phép lμ tol Đồ thị biểu diễn ph−ơng pháp chia đôi Nếu sai số cho tr−ớc thì số b−ớc lặp đòi hỏi lμ (b-a)/2n<tol Trang 6
  84. Suy ra n>=(ln(b-a)/tol)/0.6931; Trong đó b vμ a t−ơng ứng lμ các khoảng phân ly nghiệm mới Thuật toán để giải nh− sau: % function x= C5(a,b,t) % n la so lan lap % a la can duoi b la can tren i=1; if( f(a)*f(b)>0 ) disp('nhap lai a va b '); end while(abs(a-b)>t) c=(a+b)/2; if( f(c)==0) disp('nghiem la x='); x=c; break; end if(f(c)*f(a)<0) b=c; end if(f(c)*f(b)<0) a=c; end end x=c; Ph−ơng pháp Newton Công thức tính nghiệm của ph−ơng pháp Newton lμ Xn=Xn-1 -f(Xn-1)/f(Xn-1)' f=f(x) lμ hμm cần tính nghiệm, chúng ta sẽ tính các giá trị của Xn đến khi đạt đ−ợc sai số cần thiết ( tức lμ abs(Xn- Xn-1)< tol) thì Xn chính lμ nghiệm gần đúng của ph−ơng trình trên. % %Thuật toán giải nghiệm gần đúng theo ph−ơng pháp Newton function[x]=f(t,xb) N=input('nhap buoc lap N='); tol=1.e-5; Trang 7
  85. x=xb; i=1; while(i >syms t; >> xb=4; >>[x]=f(t,xb) % 5.3 Tích phân số a.Ph−ơng pháp hình thang h I= (f+ 2 f + 2 f + + f ) 2 0 1 2 N b− a h= N f0 = f( a ), f = f ( a + ih ) Ví dụ tính tích phân: I= int(f,a,b); f=2*x2* cos(x) % function I= C5(a,b,n) % a va b la hai can % n la so buoc tinh Trang 8
  86. h=(b-a)/n; I=0; for i=0:n x=a+h*i; c=2; if((i==0)|(i==n)) c=1; end I=I+c*(2*x^2*cos(x)); end I=I*h/2; % Thuc hien trong command window >> I=C5(0,1,20) I = 0.4784 Dùng Matlab để tính tích phân hình thang: trapz(x,y) Eg1: >> x=[0:0.05 1]'; >> y=2*x.^2.*cos(x); >> trapz(x,y) ans = 0.5403 >> t=[0:15:90]'; >> x=t*pi/180; >> y=[sin(x) cos(x)]; >> trapz(x,y) ans = 0.9943 0.9943 Để sử dụng công thức trên thì x lμ véctor cột có cùng chiều dμi với vector y, hoặc y lμmột mảng mμ các phần tử có chiều dμi giống x Tính theo ph−ơng pháp thông th−ờng chuẩn: >> syms x >> int(2*x^2*cos(x),0,1) ans = -2*sin(1)+4*cos(1) Trang 9
  87. >> eval(ans) ans = 0.4783 Kết luận rằng : ph−ơng pháp hình thang giải theo trapz thì độ chính xác kém hơn: b. Ph−ơng pháp Simpson 1/3 h I= (f+ 4 f + 2 f + 4 f + 2f+ 4 f + f ) 3 0 1 2 3 N −2 N −1 N H=(b-a)/N; f0 = f( a ), f1 = f ( a + i * h ) % Chuong trinh viet theo simpson function I= C5(a,b,n) % a va b la hai can % n la so buoc tinh h=(b-a)/n; I=0; for i=0:n x=a+h*i; c=4; if((i==0)|(i==n)) c=1; end if(fix(i/2)*2==i) c=2; end I=I+c*(2*x^2*cos(x)); end I=I*h/3; Cách giải Dùng matlab( for simpson) 5.4 Dùng Laplace để giải bμi toán trong Lý thuyết Mạch Trong Lý thuyết mạch có rất nhiều các đại l−ợng đạo hμm ,các đại l−ợng đó có thể đ−ợc biến đổi qua Laplace vμ thay thế bμi toán lý thuyết mạch về bμi toán giải bằng Laplace. % Cac vi du ví dụ1 syms t s; I1= sym('I1(t)'); k=laplace(I1,t,s); % Chuyen doi I1(t) sang Laplace Trang 10
  88. syms t s; I1=sym('I1(t)'); laplace(i,t,s) dI1=sym('diff(I1(t),t)') l=laplace(dI1,t,s) % chuyen dao ham I1(t) sang Laplace Các lệnh phụ trợ cần chú ý để giải một bμi toán ký thuyết mạch 1. Lệnh collect( f , x) : lμ lệnh nhóm thừa số chung theo biến Ví dụ f= 2*x + 3*x; >>f= collect(f,x) f= 5*x 2. Lệnh thay thế subs( f,{ x,y,z},{ 1,2,3}) thay thế x , y , z bằng 1 2 3 >> syms x; >> syms R1 R2 R3; >> f= R1+R2 + R3*x; >> subs(f,{R1,R2,R3},{1,2,3}) ans = 3+3*x 3. Trong khi giải ph−ơng trình : Chúng ta thay thế phần tử laplace(I1(t),t,s) bằng LI1 nh− sau >> syms t s; >> sym(' diff( I1(t),t)'); >> l=sym(' diff( I1(t),t)'); >> l=laplace(l,t,s) l = s*laplace(I1(t),t,s)-I1(0) (chú ý khi thay I1(0) bằng giá trị nμo đó thì ta phải gán nh− sau ví dụ subs( l , { 'I1(0)' ,'laplace(I1(t),t,s)' } , {2, LI1}) kết quả sẽ đ−ợc nh− sau: l= s* LI1 -2 4. Sau khi giải ra nghiệm dòng , áp theo laplace thì ta chuyển đổi ng−ợc lại dùng hμm biến đổi ng−ợc laplace( hμm ng−ợc lμ illaplace) Ví dụ cụ thể Cho mạch điện có các ph−ơng trình nh− sau:(dI1/dt)*R1 + R2 = I1*R3 % giải hệ ph−ong trình trên banừg cách biến đổi sang laplace Trang 11
  89. %ch−ơng trình viết trong M-file vμ đ−ợc ghi trong file C5.m syms R1 R2 R3 real; I1=sym('I1(t)'); dI1=sym('diff(I1(t),t)'); eq1= dI1*R1 +R2-I1*R3; syms t s ; q1=laplace(eq1,t,s) syms I1p; q2=subs(q1,{R1,R2,R3,'I1(0)','laplace(I1(t),t,s)'},{1,2,3,2,I1p}) q2=collect(q2,I1p);% nhóm lại thừa số chung lμ I1p I1p=solve(q2,I1p)% Giải ph−ơng trình trên với biến I1p ilaplace(I1p)% biến đổi ng−ợc lại sang I1(t) Kết quả khi thực hiện ch−ơng trình trên lμ: >>C5 q1 = R1*(s*laplace(I1(t),t,s)-I1(0))+R2/s-R3*laplace(I1(t),t,s) q2 = s*I1p-2+2/s-3*I1p I1p = 2*(s-1)/s/(s-3) % kết quả I1(t) ans= 2/3+4/3*exp(3*t) % kết quả I1(t) Sau đây lμ một số bμi tập để giải. 5.5 Giải hệ ph−ơng trình đại số tuyến tính Phần nμy đã trình bμy ở ch−ơng II 'Th− viện toán học Symbolic' Muốn giải tr−ớc hết hμm phải lμ hμm symbolic của một hoặc nhiều biến nμo đó >>syms x y; >> [x,y]=solve('x+y=1','x-11*y=5',x,y) x = 4/3 y = -1/3 > syms x y; >> n=solve('x+y=1','x-11*y=5',x,y) % kết quả dạng cấu trúc n = Trang 12
  90. x: [1x1 sym] y: [1x1 sym] >> n.x % truy nhập cấu trúc biến x ans = 4/3 >> n.y % Truy nhập cấu trúc biến y ans = -1/3 5.6 Ph−ơng trình vi phân th−ờng DSOLVE Symbolic tìm nghiệm của ph−ơng trình vi phân DSOLVE('eqn1','eqn2', ) chỉ chấp nhận các biểu thức vi phân dạng symbolic ('eq1' ) vμ điều kiện đầu .Một số ph−ơng trình hoặc các điều kiện đầu có thể đ−ợc nhóm lại với nhau vμ cách nhau bằng dấu phẩy(comma), đối với một thông số đầu vμo , mặc định lμ biến 't' biến độc lập nμy có thể đ−ợc thay đổi từ 't' đến các biến symbolic khác bằng cách thêm biến đó nh− lμ thông số đầu vμo cuối cùng Ví dụ nh− sau: giả sử ta cần giải ph−ơng trình vi phân dy/dx= x*y biến lấy tích phân(phải lμ) x cho nên ta coi x lμ thông số đầu vμo cuối cùng ta viết nh− sau syms x Thông số cuối y=dsolve('Dy=x*y','Dy(0)=1','x'); ký hiệu 'D' định nghĩa ph−ơng trình vi phân t−ơng ứng với biến độc lập ví dụ thông th−ờng sử dụng dy/dt . ''D'' đ−ợc theo sau bởi một số ,thì số đó định nghĩa bậc vi phân ví dụ D2y nghĩa lμ d2y/dt2 ví dụ sau: y = dsolve('D2y+y=1','y(0) = 0') kết quả: y = 1+C1*sin(t)-cos(t) Còn D3y tức lμ d3y/dt3 chú ý rằng biến symbolic không đ−ợc chứa trong D ví dụ nh− không thể ghi nh− sau : syms y; dsolve('Dy') (sai) Điều kiện đầu xác định bởi biểu thức 'y(a)=b' hoặc 'Dy(a)=b' ở đó y lμ một trong những biếnphụ thuộc vμ a vμ b lμ số không đổi nếu số điều kiện đầu nhỏ hơn số biến phụ thuộc thì Kết quả sẽ đ−ợc cho trong mảng C1,C2 Có ba kiểu đầu ra .Đối với một ph−ơng trình vi phân thì có một đầu ra , đối với hệ có nhiều ph−ơng trình vi phân thì có số đầu ra t−ơng ứng (đầu ra có thể lμ một structer) Examples: dsolve('Dx = -a*x') returns ans = exp(-a*t)*C1 x = dsolve('Dx = -a*x','x(0) = 1','s') returns Trang 13
  91. x = exp(-a*s) y = dsolve('(Dy)^2 + y^2 = 1','y(0) = 0') returns y = [ sin(t)] [ -sin(t)] S = dsolve('Df = f + g','Dg = -f + g','f(0) = 1','g(0) = 2') returns a structure S with fields S.f = exp(t)*cos(t)+2*exp(t)*sin(t) S.g = -exp(t)*sin(t)+2*exp(t)*cos(t) Y = dsolve('Dy = y^2*(1-y)') Warning: Explicit solution could not be found; implicit solution returned. Y = t+1/y-log(y)+log(-1+y)+C1=0 dsolve('Df = f + sin(t)', 'f(pi/2) = 0') dsolve('D2y = -a^2*y', 'y(0) = 1, Dy(pi/a) = 0') S = dsolve('Dx = y', 'Dy = -x', 'x(0)=0', 'y(0)=1') S = dsolve('Du=v, Dv=w, Dw=-u','u(0)=0, v(0)=0, w(0)=1') w = dsolve('D3w = -w','w(0)=1, Dw(0)=0, D2w(0)=0') y = dsolve('D2y = sin(y)'); pretty(y) Sử dụng ode23 vμ ode45 dùng để giải ph−ơng trình vi phân th−ờng Cấu trúc [T,Y] = ODE23(ODEFUN,TSPAN,Y0) với TSPAN = [T0 TFINAL] tổ hợp hệ ph−ơng trình vi phân y' = f(t,y) từ thời gian T0 đến TFINAL với giá trị ban đầu Y0( with initial conditions Y0). Hμm ODEFUN(T,Y) chắc chắn trả về một véc tor cột t−ơng ứng với f(t,y). Mỗi hμng trong mảng kết quả Y t−ơng ứng thời điểm(t) trả về trong column vector T Để lấy kết quả tại các thời điểm T0,T1, ,TFINAL(tất cả lμ tăng đều hoặc giảm đều) sử dụng TSPAN = [T0 T1 TFINAL]. [T,Y] = ODE23(ODEFUN,TSPAN,Y0,OPTIONS) solves as above with default integration properties replaced by values in OPTIONS, an argument created with the ODESET function. See ODESET for details. Thông th−ờng sủ dụng options lμ một số vô h−ớng để nói về sai số liên quan ('RelTol') Nếu không có thông số trên thì mặc định sai số liên quan lμ =1-e3 vμ sai số tuyệt đối mặc định với tất cả các phần tử lμ 1e-6 Example [t,y]=ode23(@vdp1,[0 20],[2 0]); Trang 14
  92. plot(t,y(:,1)); solves the system y' = vdp1(t,y), using the default relative error tolerance 1e-3 and the default absolute tolerance of 1e-6 for each component, and plots the first component of the solution. % giai phuong trinh vi phan bac hai sau % L*d2q/dt2 + R * dq/dt + q/c = Eo* cos(w*t) % nguyen tac giai global R L C Eo omega L=100; R=100; C=0.25; Eo=10; omega=1; %t0=0; %ta=3; %x0=[1 1]' tol=1e-3; [t,x]=ode23(@Mach1,[0 3],[1 1],tol); kq=[t x(:,1) x(:,2)] plot(t,x(:,1)); % Ham Mach1 function f= Mach1(t,x) global R L C omega Eo f=[(Eo/L)*cos(omega*t)-x(1)/(C*L)-R*x(2)/L x(2)]'; % ket qua thuc hien trong command window kq = 0 1.0000 1.0000 0.0800 0.9216 1.0833 0.3585 0.5926 1.4308 0.5589 0.2895 1.7484 0.7093 0.0171 2.0319 0.8596 -0.3011 2.3615 1.0069 -0.6642 2.7362 1.1900 -1.1987 3.2858 1.4006 -1.9498 4.0557 1.6323 -2.9833 5.1132 1.8804 -4.3902 6.5518 Trang 15
  93. 2.1408 -6.2933 8.4990 2.4104 -8.8576 11.1269 2.6868 -12.3044 14.6669 2.9682 -16.9303 19.4292 3.0000 -17.5398 20.0576 Nguyên tắc giải bμi toán : Đ−a ph−ơng trình vi phân cấp n về n ph−ơng trình vi phân cấp một trong ví dụ trên ta đặt x1=q ,x2=diff(x1) nh− vậy ta có hai ph−ơng trình vi phân( giống nh− ph−ơng pháp đặt biến trạng thái trong lý thuyết điều khiển tự động ) Trang 16
  94. Ch−ơng 5 đồ hoạ trong matlab 5.1 Mμn hình đồ thị: Đây lμ nơi trình bμy mọi hình ảnh , độ thị . đã đ−ợc giải trình từ khung của sổ Command của Matlab để xử lý theo các lệnh , công cụ mμn hình. Có hai cách để hiện khung mμn hình đồ thị trắng: • Từ khung cửa sổ command kích File/New vμ chọn Figure từ menu xổ. • Cũng trong khung cửa sổ Command gõ lệnh figure vμ ấn enter. 5.2 các lệnh menu đồ hoạ trong matlab: Để giúp các bạn có thể nắm vững vμ sử dụng ch−ơng trình Matlab; phần nμy giới thiệu cáclệnh trên thanh menu cùng với các chức năng vμ công dụng của từng menu con nằm trong các menu chính. 5.2.1 File: Hiện menu xổ chứa các lệnh con có chức năng tạo, quản lý, điều hμnh cũng nh− thay đổi các thông tin các thông số mặc định của ch−ơng trình cho phù hợp với từng công việc. New Figure New Figure dùng để mở trang mμn hình đồ hoạ mới. Trang 1
  95. Để mở trang mμn hình mới chồng lên mμn hình đồ thị cũ trong khi đồ thị cũ vẫn còn hiện diện trên mμn hình, chọn New Figure từ menu xổ. Một cửa sổ mới sẽ xuất hiện ra nằm chồng lên mμn hình cũ Open: Mở tập tin đồ thị cũ trong khung mμn hình đồ thị để xử lý theo nhu cầu công việc. Các b−ớc thực hiện mở đồ thị đã l−u: • Kích File/ Open từ menu xổ, xuất hiện màn hình thoại Open . - Look in: Nơi chứa các tập tin đồ thị của Matlab. Nơi chứa có thể lμ ổ đĩa, th− mục hoặc ch−ơng trình khác. - File nane: Tên tập tin muốn mở trong khung mμn hình đồ thị . - Files of type: Thể loại tập tin đồ thị lμ .fig • Kích đúp vào tên tập tin muốn mở hoặc đánh tên tập tin vào khung File name hoặc kích một lần vào tên tập tin, kích Open. Tập tin đồ thị vừa chọn sẽ hiện lên màn hình. Close: Đóng khung mμn hình đồ thị để về khung cửa sổ nhập lệnh của Matlab ( Biểu t−ợng có chức năng t−ơng đ−ơng với lệnh Close trong menu File) Save: Trang 2
  96. L−u lại những thay đổi trong khung mμn hình đồ thị hiện hμnh. Tuy nhiên, có một điều khác biệt lμ lệnh nμy l−u lại ngay những thay đổi trong tập tin mới sau khi đã đ−ợc đặt tên vμ đang hiện diện trên mμn hình để tiếp tục xử lý. Nếu bạn mở tập tin cũ với lệnh Open để xử lý vμ nếu đã có những thay đổi bất kỳ trong nội dung hiện hμnh vμ sau khi kích lệnh save, mμn hình hiện khung thoại save as. Từ khung thoại nμy bạn có thể l−u lại nhữnh thay đổi theo tên tập tin cũ hoặc với một tên mới. Save As: Hiện khung thoại Save As để bạn l−u tập tin đồ thị mới vẽ theo một tập tin mới hoặc l−u lại những thay đổi trong nội dung của tập tin cũ đ−ợc mở với lệnh Open theo tên cũ hoặc với tên mới. Các b−ớc thực hiện nh− sau: • Sau khi thay đổi , kích File / Save as - Save in Nơi ch−a các tập tin muốn. L−u. Nơi chứa các tập tin đồ thị của Matlab. Nơi chứa có thể lμ ổ đĩa, th− mục hoặc ch−ơng trình khác. - File name Tên tập tin tuỳ chọn để l−u cho đồ thị vừa tạo - Save as type Thể loại tập tin muốn l−u. Mặc định lμ .fig đối với các tập tin đồ thị • Sau khi chọn nguồn chứa (nếu cần thiết), đặt tên mới cho đồ thị, kích vμo Save để l−u. Export: L−u lại tập tin đồ thị hiện hμnh thμnh một dạng tập tin khác để sau nμy có thể chuyển sang ch−ơng trình ứng dụng khác. • Tạo một đồ thị mới hoặc mở tập tin đồ thị cũ lên mμn hình. • Kích menu File vμ chọn Export. Mμn hình hiện khung thoại Export. Trang 3
  97. Save in Nơi ch−a các tập tin muốn chuyển. File name Tên tập tin muốn l−u lại để chuyển. Bạn có thể đặt tên theo tên cũ nh−ng phần mở rộng lại lμ một tên khác . Save as type Chọn loại tập tin muốn l−u lại để chuyển. • Sau khi chọn song, kích vμo Save để ghi lại tập tin theo dạng khác. Property Editor: Hiện khung thoại Graphics Property để ng−ời sử dụng thay đổi các khung thuộc tính mặc định cho phù hợp với tác vụ. Preferences: Hiện khung thoại với ba tuỳ chọn để ng−ời sử dụng có thể thay đổi tham số cho phù hợp nhiệm vụ. • General: Hiện khung thoại ngay khi kích chọn lệnh Preferences từ menu File của khung cửa sổ lệnh MATLAB. K í ch chọn các loại tham số muốn thay đổi hoặc gán thêm sau đó kích OK. • Command Windows Font: H i ệ n khung danh mục font cùng thuộc tính để ng−ời sử dụng thay đổi font mặc định thμnh font quên thuộc. Trang 4