1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình Các lệnh trong Matlab

541 27 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 541
Dung lượng 2,96 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giáo trình Các lệnh trong Matlab sau gồm 10 chương, bao gồm: chương 1 Matlab cơ bản, chương 2 ma trận, chương 3 hệ phương trình đại số tuyến tính, chương 4 nội suy và xấp xỉ hàm, chương 5 các phương trình phi tuyến, chương 6 đạo hàm và tích phân số, chương 7 các phương trình vi phân thường, chương 8 tối ưu hoá, chương 9 phương trình vi phân đạo hàm riêng, chương 10 các công cụ khác của Matlab.

Trang 1

home   Ctrl‐A    về đầu dòng 

end    Ctrl‐E    về cuối dòng 

esc    Ctrl‐U    xoá dòng 

Trang 2

2.  Nhập  xuất  dữ  liệu  từ  dòng  lệnh:  MATLAB  không  đòi  hỏi  phải  khai  báo 

biến  trước  khi  dùng.  MATLAB    phân  biệt  chữ    hoa    và  chữ  thường.  Các  số liệu đưa vào môi trường làm việc của MATLAB được lưu lại suốt phiên làm 

Trang 8

  Để xác định kích thước của một ma trận ta dùng lệnh length(trả về kích  thước lớn nhất) hay size(số hàng và cột). Ví dụ: 

Trang 9

  d. Tạo ma trận bằng hàm có sẵn: MATLAB cung cấp một số hàm để tạo các ma trận cơ bản: 

  zeros   tạo ra ma trận mà các phần tử đều là zeros 

 

z = zeros(2, 4)   

Trang 10

rand(3, 3) 

Trang 13

 

Trang 15

với  nhau  ta  dùng  đặc  tả  nói  rằng  không  có  các  đường  nối  giữa  các  điểm, 

nghĩa là ta gọi hàm plot chỉ với đặc tả màu và điểm đánh dấu. Ta xét chương  trình ct1_9.m như sau: 

Trang 19

  bar(y) 

 

  b. Mô tả dữ liệu trên trục : Ta dùng các hàm xlabel và ylabel để mô tả  các dữ liệu trên trục. Ta xét chương trình ct1_18.m: 

Trang 20

  X =   [19.3   22.1   51.6; 

    34.2   70.3   82.4; 

    61.4   82.9   90.8; 

Trang 21

       plot(fft(eye(j + 16))) 

Trang 23

  clabel   tạo các nhãn sử dụng ma trận contour và hiển thị nhãn   

contour   hiển  thị  các  đường  đẳng  mức  tạo  bởi  một  giá  trị  cho  trước 

của ma trận Z. 

Trang 24

contour3   hiển thị các mặt đẳng mức tạo bởi một giá trị cho trước của 

ma trận Z. 

  contourf   hiển thị đồ thị contour 2D và tô màu vùng giữa 2 các đường   contourc   hàm cấp thấp để tính ma trận contour  

một phần tử mô tả một contour đơn ở một mức hàm contour sẽ coi nó là số  lượng đường contour chứ không phải là mức contour. Nghĩa là, contour(z, v)  cũng như contour(z, n). Để hiển thị một đường đẳng mức ta cần cho v là một 

Trang 26

số  thì  đối  số  thứ  nhất  sẽ  mô  tả  thành  phần  x  và  đối  số  thứ  ha  mô  tả  thành phần y. Nếu ta chỉ dùng một đối số thì MATLAB xử lí nó như một số phức, phần thực là thành phần x và phần ảo là thành phần y. 

cùng độ dài ta viết chương trình ct1_30.m: 

theta = 90: –10: 0; 

Trang 28

d.  Hàm  quiver3 :  Hàm  quiver3  hiển  thị  các  vec  tơ  có  các  thành  phần 

(u,v,w) tại điểm (x, y, z). Ví dụ ta biểu  diễn quỹ đạo của một vật được ném đi theo t. Phương trình của chuyển động là: 

2

attv)

Trang 30

text_f = uicontrol(gcf, ʹStyleʹ,  ʹTextʹ,  

      ʹStringʹ,       ʹFahrenheit: ʹ,  

      ʹPositionʹ,   [0.3 0.7 0.2 0.05],ʹHorizontalAlignmentʹ,ʹLeftʹ);  edit_f = uicontrol(gcf, ʹStyleʹ,   ʹEditʹ,  

Trang 31

b. Dùng lệnh edit và text để nhập xuất kí tự và số liệu: Trên đây ta đã dùng lệnh uicontrol để tạo và xác định vị trí hai khung hình.  Đoạn lệnh sau 

       [0.6 0.3 0.1 0.05],ʹHorizontalAlignmentʹ,ʹLeftʹ); 

 

c.  Tự  động  cập  nhật  giá  trị  lên  GUI:  Để  hoàn  thiện  ví  dụ  GUI  ta  thực hiện chương trình với nhiệm vụ tính quy đổi từ độ K sang độ C và tự động điền  kết  quả  vào  các  ô  bên  cạnh  chuỗi  Celcius.  Đoạn  mã  sau  phục  vụ  mục 

Trang 32

 Trong  giao  diện  này,  con  trượt  sẽ  làm  thay  đổi  giá  trị  nhiệt  độ  đua  vào  và nhiệt độ quy đổi tính theo độ C cũng sẽ thay đổi tương ứng. Các lệnh tạo ra 

edit_f = uicontrol(gcf, ʹStyleʹ,  ʹEditʹ,  

      ʹStringʹ,   ʹ168.0ʹ.,,, 

Trang 33

    f = get(edit_f,ʹStringʹ); 

      f = str2num(f); 

     set(slider_f,ʹValueʹ,f); 

Trang 38

Cuối cùng ta xét phương án dùng listbox. Giao diện cần tạo như sau: 

Trang 39

  

Trang 40

a. Tạo GUI bằng công cụ đồ hoạ: Trên đây ta đã xem xét cách tạo GUI bằng  phương  pháp  thủ  công.  Ta  có  thể  tạo  GUI  bằng  công  cụ  đồ  hoạ.  Khi nhập  lệnh  guide  ta  gọi  trình  đồ  hoạ  (Graphics  User  Interface  Development Environment) để soạn thảo layout. Kết quả đầu tiên là ta có một layout rỗng như sau: 

cụ Alignment. Với mỗi phần tử ta cấn xác định thuộc tính cho nó bằng cách bấm đúp vào phần tử hay bấm vào công cụ soạn thảo thộc tính 

Sau khi thiết kế xong ta lưu nó lại. Lúc này MATLAB tự động tạo ra file 

*.fig dùng lưu giao diện vừa tạo và file *.m chưa các mã lệnh cần thực hiện. Việc cuối cùng là viết các mã lệnh vào file *.m. Trong quá trình thiết kế  ta có thể chạy thử xem sau mỗi bước thiết kế đã đạt yêu cầu chưa bằng cách bấm vào ô chạy thử  

Soạn menu

Trang 41

và  cũng  dùng  Font  chữ  mắc  định,  cỡ  chữ  12  và  bold.  Tiếp  theo  kéo Pushbutton vào layout và soạn thảo thuộc tính cho nó với Font chữ mặc định, 

cỡ  chứ 12, bold. Trong thuôc tính String ghi chuỗi ʺ Bam chuotʺ; ghi và Tag chuỗi ʺpushbuttonmotʺ. Như vậy là ta đã thiết kế xong. Bây giờ ta lưu lại với 

tên là ct1_52.fig và ct1_52.m. 

Nhiệm vụ tiếp theo là ghi các lệnh cần thiết vào file ct1_52.m. File này 

đã  được  MATLAB  tự  động  tạo  ra.  Ta  phải  thêm  vào  đó  các  mã  lệnh  để  khi bấm chuột thì số lần bấm được thể hiện trên ô Edit Text. Ta sẽ ghi các mã lệnh này vào phần: 

Trang 42

  handles = guihandles(fig); 

  guidata(fig, handles); 

if nargout > 0      varargout{1} = fig; 

end  elseif  

Trang 43

Edit  Text  thứ  hai  có  các  thuộc  tính  FontName:  Arial,  FontSize:  demi, FơntWeight:  demi,  String:  để  trống,  Tag:  edithai  còn  các  thuộc  tính  khác  là mặc định.  

Edit  Text  thứ  ba  có  các  thuộc  tính  FontName:  Arial,  FontSize:  demi, FơntWeight: demi, String: Celcius, Tag: editba còn các thuộc tính khác là mặc định.  

Edit  Text  thứ  tư  có  các  thuộc  tính  FontName:  Arial,  FontSize:  demi, FơntWeight:  demi,  String:  để  trống,  Tag:  editbon  còn  các  thuộc  tính  khác  là mặc định. 

Sau  khi  thiết  kế  xong,  lưu  nó  với  tên  ct3_18.fig.  MATLAB  tạo  thêm  ct1_53.m. Bây giờ ta cần viết mã cho nó. Nhiệm vụ của đoạn mã là khi ta nhập nhiệt  độ  Fahrenheit  vào  ô  Edit  text  thứ  hai  thì  trong  ô  Edit  Text  thứ  4  phải 

Trang 44

   

Edit Text thứ 2 có thuộc tính FontSize: 12, FơntWeight: bold, String: để trống.  

Edit  Text  thứ  3  có  thuộc  tính  FontSize:  12,  FơntWeight:  bold,  String: Celcius.  

Trang 45

Edit Text  thứ 4  có thuộc tính  FontSize: 12, FơntWeight: bold,  String: 

để 

trống. (Các thuộc tính mà ta không nhắc đến có nghĩa là chấp nhận giá trị mặc định).  

Trang 46

Rankine. Để có thể chọn lựa ta dùng một trong các phương án: Popupmenu, Rdiobutton, Listbox hay Checkbox. Giao diện khi dùng Popupmenu như sau:  

 

  

Popupmenu  có  thuộc  tính  FontSize:  12,  FontWeight:  bold.  Để  ghi  vào thuộc tính String ta bấm đúp chuột vào icon của nó và viết 3 dòng: Kelvine, Celcius và Rankine.  

  File  được  lưu  với  tên  ct1_55.fig.  Vấn  đề  còn  lại  là  viết  mã  trong  file  ct1_55.m. Mã cần thực hiện nhận giá trị từ Slider, xem Popupmenu nào được 

Trang 47

Kelvine, Celcius và Rankine. Giao diện như sau: 

 

Trang 53

Ta dùng m t Axes, b n Pushbutton t o nên giao di n n y Khi nh n Plot,

th c a h m y = tsin(t) c v Khi nh n Grid on, th c chia l i Khi

nh n Grod off, l i b xoá Nh n Close óng th

Layout có thu c tính Name: ct1_59, HandleVisibility: callback

Các  Pushbutton  đều  có  thuộc  tính  FontSize:  12,  FơntWeight:  bold  và  các 

String là các tên lệnh. GUI được lưu với tên file là ct1_59.fig. Tiếp theo ta soạn  thảo lệnh cho ct1_59.m: 

    disp(lasterr); 

end 

function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)  grid on 

function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)  grid off 

Trang 54

function varargout = pushbutton3_Callback(h, eventdata, handles, varargin)  close  

function varargout = pushbutton4_Callback(h, eventdata, handles, varargin) 

t = 0:0.01:20; 

y = t.*sin(t); 

plot(t,y); 

Ti p theo ta xét m t GUI có giao di n nh sau:

Nhi m v c a GUI l v th c a h m peaks theo các d ng khác nhau( mesh, surf v contour) v i các Colormap khác nhau(hsv, hot, gray, prism, cool, winter v summer) Vi c v các d ng th th c hi n nh các Pushbutton Vi c ch n Colormap th c hi n nh Listbox

Layout có thu c tính Name: ct1_60 v thu c tính HandleVisbility: on Các

Pushbutton u có thu c tính FontSize: 12 v F ntWeight: bold Ta l u GUI v i tên

Trang 58

1 j 1 j

2 2U

j 1

=

=∑  

Trang 59

    ‐ 

j 3

Trang 61

từ [A] bằng cách bỏ đi cột và hàng đầu tiên. Ma trận [H] cấp (n ‐1) được xây dựng  theo  các  công  thức  (1) ÷  (3).  Do  (4)  ta  thấy  phép  biến  đổi  này  làm  cột đầu tiên của [A] trở thành: 

11

11

aka

0

H H

0  

  [ ] [ ]= ⎢⎡[ ] [ ] [ ] ⎤⎥

T 2

2

E 0P

0 H                 (7) với [E2] là ma trận đơn vị 2×2 và [H] là ma trận (n ‐ 2)×(n ‐ 2) có được bằng cách chọn [X] từ (n ‐ 2) phần tử phía dưới của cột thứ 2 của ma trận [A]. Thực hiện (n ‐ 2) phép biến đổi: 

  [ ] [ ]= ⎢⎡[ ] [ ] [ ] ⎤⎥

T i

i

E 0P

00

[Q] 

Trang 62

2    ‐ Tính [ ] [ ]′ [ ]

= A UV

Q    ‐ Tính  =[ ] [ ]T

g

2Q  

Trang 63

  ‐ Tính [W] = [V] ‐ g[U] 

  ‐ Tính [ ] [ ]= ′ −[ ][ ] [ ][ ]T − T

A A W U U W    ‐ Đặt ai ,i 1+ =ai 1,i+ = −k  

Trang 64

Để  tính  ma  trận  ba  đường  chéo  theo  phép  biến  đổi  Householder  ta  dùng 

β

U U

Trang 66

  [A] = [L] [R] 

Việc phân tích này, nếu tồn tại, là không duy nhất.  

Nếu ma trận [L] có các phần tử nằm trên đường chéo chính bằng 1, ta có phép phân tích Doolittle.  

Trang 68

1 k ki jk ji

ji

r

rla

Trang 72

sin cos  Nếu ta muốn quay vec tơ [x1 x2]T và muốn làm cho x2 bằng zero rồi quaytheo chiều kim đồng hồ một góc θ(hay ngược chiều kim đồng hồ một góc ‐θ) trong đó: 

Trang 73

  θ = 2

1

xarctg

x  thì ma trận quay để thực hiện phép quay này theo chiều kim đồng hồ một góc 

sin cos  Trong đó: 

Trang 74

a a  Như vậy ta sẽ có: 

Trang 77

[L, U] = eigjacobi(a) 

 

§11. PHÂN TÍCH LQ     Cho ma trận [A]T, ta có thể phân tích QR ma trận này thành: 

Trang 78

2  Dạng Jordan: Khi không thể tìm được n giá trị riêng phân biệt, nghĩa là ma 

trận [A] không có n vec tơ riêng độc lập tuyến tính thì ma trận [A] không thể đường chéo hoá. Tuy nhiên, nếu có phép biến đổi đồng dạng [M] biến đổi [A] thành [J]: 

i i

J

10

Trang 79

  ‐ Cuối cùng do kích thước của không gian không của [A] là n ‐ r và p của các vec tơ là trong cả không gian không lẫn không gian cột nên có n ‐ r ‐ p vec tơ [zi] ở trong không gian không mà không ở trong không gian cột. 

  Các vec tơ [xi], [yi] và [zi] tìm được là độc lập tuyến tính. Chúng tạo nên các cột của [M] và [J] = [M][A][M]‐1 là dạng Jordan.  

Trang 85

  [Anp] = [Unn][Snp][Vpp] 

Trong đó: 

Trang 87

và các cột của [T] là các vec tơ riêng của [A]. Phân tích Schur khi này được gọi 

là phân tích phổ. Nếu [A] xác định dương, phân tích Schur chính là phân tích SVD. 

Trang 89

- nếu  nhân  tất  cả  các  phần  tử  của  một  hàng  (hay  cột)  với  k  thì  định thức được nhân với k 

- định  thức  không  đổi  nếu  ta  cộng  thêm  vào  một  hàng  tổ  hợp  tuyến tính của các hàng còn lại. 

- nếu đổi chỗ hai hàng cho nhau thì định thức đổi dấu 

Trước khi đi đến định nghĩa về định thức ta tìm hiểu khái niệm về hoán 

vị và phép thế.  

Cho một dãy số, nếu ta đổi chỗ các số trong dãy cho nhau thì ta đã thực hiện  một  phép  hoán  vị.  Ví  dụ  123,  132,   là  các  hoán  vị  của  dãy  số  {1,  2,  3}. Trong  hoán  vị  α1α2…αi…αj…αn ta nói αi  làm  một nghịch  thế  với  αj  nếu i  <  j 

mà αi > αj. Ví dụ trong hoán vị 1432 số 4 làm với số  3 một nghịch thế , số 4 làm với số 2 một nghịch thế, số 3 làm với số 2 một nghịch thế. Một hoán vị gọi 

là chẵn nếu tổng số nghịch thế trong hoán vị đó là một số chẵn; một hoán vị gọi là lẻ trong trường hợp ngược lại. Như vậy  1432 là một hoán vị lẻ. 

Cho  một  dãy  số,  nếu  ta  tạo  ra  một  dãy  số  mới  bằng  cách  đổi  chỗ  các phần tử cho nhau thì ta đã thực hiện một phép thế.   

Một phép thế gọi là chẵn nếu tính chẵn lẻ của dòng trên và dòng dưới như nhau và lẻ trong trường hợp ngược lại. Phép thế trên là phép thể lẻ. 

Trang 90

Cho  ma  trận  vuông  [A]  cấp  n.  Các  phần  tử  của  hàng  thứ  i  là  ai,1, 

ai,2,…,ai,n. Các phần tử của cột thứ j là a1,j, a2,j ,…, an,j. Ta xem hàng thứ i là một vec  tơ,  kí  hiệu  là  Ai*  và  cột  thứ  j  cũng  là  một  vec  tơ,  kí  hiệu  là  A*j.  Với  mỗi phép thế: 

Trang 92

b b b b

0 b b bB

Trang 93

  det B[ ]=b b b b11 22 33 44 

nghĩa là đối với ma trận tam giác, định thức bằng tích các phần tử trên đường chéo chính.  

  Khi  phân  tích  ma  trận  [A]  theo  thuật  toán  Doolitte,  ta  dùng  chương trình ctdoodecmp.m để tính định thức của nó: 

Trang 95

Ta chú ý  đến hàng thứ  i và  aij là một phần tử  của hàng đó. Trong det[A]  ta gộp những số hạng chứa aij lại và đặt aij làm thừa số chung, hệ số của nó kí hiệu là Aij và gọi là phần bù đại số (cofactor) của phần tử aij. Cofactor Aij của 

Trang 96

  Bước đầu tiên ta xây dựng ma trận cấp (n ‐ 1)×(n ‐ 1)  từ các định thức của các ma trận con 2×2. Ví dụ với ma trận  

Trang 97

Ta xây dựng hàm dodgson() để thực hiện thuật toán trên: 

Trang 98

det A  Trong đó: 

Trang 99

  ( )−1

i ,j

a  là phần tử ở hàng i, cột j của ma trận [A]‐1 

  Ai,j là phần bù đại số của phần tử ai,j của ma trận [A] 

Ta xây dựng hàm minorinv() để thực hiện thuật toán trên: 

Trang 100

  [A][R]‐1[L]‐1 = [E]  

Kết quả là:

[R]‐1[L]‐1 = [R]‐1  

Với ma trận tam giác phải [R], các hàng khi nghịch đảo là l1, ,ln được tính theo cách sau: 

  ‐ Cho [e1], , [ei], ,[en] là các cột của ma trận đơn vị [E] cấp n 

  ‐  =[ ]n

n

n ,n

el

a    ‐  i =( [ ]i − i ,i 1 i 1+ + −L i ,n n)

Trang 101

0010

0001

 Như vậy, vấn đề là ta cần tìm ma trận [A]‐1. Phương pháp loại trừ để nhận được ma trận nghịch đảo [A]‐1 được thực hiện qua n giai đoạn, mỗi một giai đoạn gồm hai bước. Đối với giai đoạn thứ k: 

   ‐ chuẩn hoá phần tử akk bằng cách nhân hàng với nghịch đảo của nó  

 ‐ làm cho bằng không các phần tử phía trên và phía dưới đường chéo cho đến cột thứ k. Khi k = n thì [A](k) sẽ trở thành ma trận đơn vị và [E] trở thành [A]‐1 

Ta xây dựng một hàm nghịch đảo invmat(): 

 

function x = invmat(a) 

% Nghich dao ma tran a 

Trang 102

ra năm 1955. Ma trận Moore – Pensore [B] thoả mãn các điều kiện: 

Trang 105

về dạng dễ giải hơn. Giả sử ta có cách nào đó để tìm ma trận [P] mà nó đường chéo hoá ma trận [A], lúc đó (3) có dạng: 

Trang 112

Ta xây dựng hàm evalbrackets() để vây các giá trị riêng nhỏ nhất của ma trận 

ba đường chéo. Nó cho dãy r1, r2, ,rm+1 trong đó mỗi đoạn [ri, ri+1] chứa một giá trị riêng. Thuật toán trước hết tìm biên toàn cục của các giá trị riêng theo định lí Gerschorin. Phương pháp chia đôi kết  hợp với  dãy đặc  tính của dãy Sturm được dùng để xác định biên trên λm, λm‐1, , λ1  

 

function r = evalbrackets(c, d, m) 

% Nhom m gia tri rieng min cua ma tran  A = [c\d\c] 

Trang 116

  [ ]X0 =c X1[ ]1 +c X2[ ]2 +L+c X    n[ ]n         (2) 

Nhân cả hai vế của (2) với chuyển vị [ ]T

1

X  ta có: 

Trang 117

function [t, s, iter] = sweeping(A) 

%function t = sweeping(A) 

%Tinh tat ca cac gia tri rieng va vec to rieng cua ma tran A doi xung 

Trang 118

  [ ] [ ][ ] [ ] [ ][ ] [ ]T = − 1 = λ

V A V V A V       (1) 

Để hiểu phương pháp Jacobi, trước hết ta định nghĩa ma trận quay pq: 

 

Trang 120

+ 2 θ

1cos 2

1 tg 2    sin2θ = tg2θcos2θ       (9) 

Để cho ma trận gần ma trận đường chéo sau mỗi lần lặp, ta coi chỉ số hàng và cột của phần tử lớn nhất nằm ngoài đường chéo là p và q và làm cho nó bằng zero.   

Ta xây dựng hàm eigjacobi() để tính các giá trị riêng λi và các vec tơ riêng của một ma trận đối xứng cấp n bằng phương pháp Jacobi.  

Trang 123

ba  đường  chéo  hay  ma  trận  Hessenberg.  Ta  xây  dựng  hàm  qreig()  để  thực 

Trang 124

Sau đó ta xây dựng ma trận: 

Trang 129

Thay thế ngược ta có được các nghiệm xn‐1, xn‐2, , x1 và α(λ).  

Theo quy tắc Cramer ta có: 

Trang 130

[ ] [ ]

1,1 2,1

n 1,n 1

n ,n 1 n

Trang 131

để tạo ra dãy các vec tơ trực giao [q1],  , [qn] gọi là các vec tơ Arnoldi. Thuật toán cụ thể gồm các bước: 

- Cho vec tơ bất kì [q1] có  [ ]q1 =  1

- Lặp từ k = 2,3,  

Trang 135

CHƯƠNG 3: HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH

n

bbbb

1 2

n

xxxx

Trang 136

  [ ] [ ] [ ]x = x + + x −      (2) 

Trong đó một ma trận là ma trận không gian hàng của ma trận [A] và được viết dưới dạng tổ hợp của: 

Ngày đăng: 11/05/2021, 04:02

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w