1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

giáo trình, bài giảng matlab cho ngành điện

87 154 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 87
Dung lượng 5,71 MB

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

Nội dung

Để xây dựng thuật toán giải bài toán mạch này, ta chuyển phương trình mạch sang số phức, khi đó hệ phương trình vi phân mô tả mạch sẽ trở thành hệ phương trình đại số và dễ dàng giải được bằng bất kỳ ngôn ngữ lập trình nào như Pascal, C... Xét mạch điện tổng quát gồm m nhánh, n nút. Ta sẽ lập được hệ gồm m phương trình vi phân như sau:

Trang 1

CHƯƠNG 1: MATLAB CƠ BẢN 1.1 CÁC TỐN TỬ CƠ BẢN CỦA MATLAB

1 Các tốn tử cơ bản:

Các toán tử số học (Arithmetic Operators):

Toán

+ Cộng ma trận hoặc đại lượng vô hướng (các ma trận

phải có cùng kích thước).

- Trừ ma trận hoặc đại lượng vô hướng (các ma trận phải có cùng kích thước).

* Nhân ma trận hoặc đại lượng vô hướng (ma trận 1

phải có số cột bằng số hàng của ma trận 2).

.* Nhân từng phần tử của 2 ma trận hoặc 2 đại lượng

vô hướng (các ma trận phải có cùng kích thước).

\ Thực hiện chia ngược ma trận hoặc các đại lượng vô hướng (A\B tương đương với inv (A)*B)

.\ Thực hiện chia ngược từng phần tử của 2 ma trận

hoặc 2 đại lượng vô hướng (các ma trận phải có cùng kích thước).

/ Thực hiện chia thuận 2 ma trận hoặc đại lượng vô hướng (A/B tương đương với A*inv(B)).

./ Thực hiện chia thuận từng phần tử của ma trận này

cho ma trận kia (các ma trận phải có cùng kích thước)

^ Lũy thừa ma trận hoặc các đại lượng vô hướng.

Trang 2

^ Lũy thừa từng phần tử ma trận hoặc đại lượng vô

hướng (các ma trận phải có cùng kích thước).

* ví dụ:

1

x 2

3

4

y 5

6

x’ 1 2 3 y’ 4 5 6

5

x + y 6

7

-3

x – y -3

-3

3

x + 2 4

5

-3

x – 2 -3

-3

x * y phép toán sai 4

x * y 10

18

x’* y 32 x’.* y phép toán sai 4 5 6

x * y’ 8 10 12 12 15 18

x * y’ phép toán sai 2

x * 2 4

6

2

x.* 2 4

6

x \ y 16/7 4

x.\ y 5/2 2

1/2 2 \ x 1

3/2 2

2./ x 1

2/3 0 0 1/6 x / y 0 0 1/3 0 0 1/2 1/4 x./ y 2/5 1/2

1/2 x / 2 1

1/2 x./ 2 1

Trang 3

3/2 3/2

x ^ y phép toán

sai

1/2 x.^ y 32 729

x ^ 2 phép toán

sai

1 x.^ 2 4 9

2 ^ x phép toán

sai

2 2.^ x 4 8

Toán tử quan hệ (Relational Operators):

Toán

< So sánh nhỏ hơn.

> So sánh lớn hơn.

>= So sánh lớn hơn hoặc bằng.

<= So sánh nhỏ hơn hoặc bằng.

= = So sánh bằng nhau cả phần thực

và phần ảo.

-= So sánh bằng nhau phần ảo.

a) Giải thích:

Các toán tử quan hệ thực hiện so sánh từng thành phần của 2

ma trận Chúng tạo ra một ma trận có cùng kích thước với 2 ma trận

so sánh với các phần tử là 1 nếu phép so sánh là đúng

và là 0 nếu phép so sánh là sai.

Phép so sánh có chế độ ưu tiên sau phép toán số học nhưng trên phép toán logic.

b) Ví dụ:

thực hiện phép so sánh sau:

» x=5 % đầu tiên ta nhập x=5

x =

5

» x>=[1 2 3;4 5 6;7 8 9] %so sánh trực tiếp x (x là 5) với ma trận

ans = % rõ ràng các phầ tử 1,2,3,4,5 đều <= 5

Trang 4

» x==A % so sánh x và A

ans = % tất cả các phần tử đều đúng

Trang 5

4 Ký tự đặc biệt (Special Characters):

[] Khai báo vector hoặc ma trận.

() Thực hiện phép toán ưu tiên, khai báo các

biến và các chỉ số của vector

= Thực hiện phép gán.

‘ Chuyển vị ma trận tìm lượng liên hiệp của

số phức.

Điểm chấm thập phân.

, Phân biệt các phần tử của ma trận và

các đối số trong dòng lệnh.

; Ngăn cách giữa các hàng khi khai báo ma

trận.

% Thông báo dòng chú thích.

! Mở cửa sổ MS – DOS.

j : i : k Tạo ra chuỗi j, j+i, j+2I,….,k-i, k

A(: , j) Chỉ cột thứ j của ma trận A

A(i , :) Chỉ hàng thứ i của ma trận

Trang 6

A(: , :) Chỉ toàn bộ ma trận A

A(j , k) Chỉ phần tử A(j), A(j+1)…A(k)

A(: , j ,

k) Chỉ các phần tử A(:, j), A(:, j+1)…A(:, k)

A(:) Chỉ tất cả các thành phần

của ma trận A c) Ví dụ:

khi khai báo D = 1 : 10

ta được kết quả:

D = 1 2 3 4 5 6 7 8 9 10 còn khi khai báo D = 0 : 2 :10

thì ta được kết quả:

D = 0 2 4 6 8 10

2 Nhập xuất dữ liệu từ dịng lệnh:

Khi nhập ma trận từ bàn phím ta phải tuân theo các quy định sau :

• ngăn cách các phần tử của ma trận bằng dấu “,” hay dấu trống

Trang 7

4 Nhập xuất dữ liệu từ bàn phím: Lệnh input cho phép ta nhập số liệu từ

bàn phím Ví dụ:

x = input(’Nhap x: ’)

Lệnh format cho phép xác định dạng thức của dữ liệu Ví dụ:

format rat % so huu ti

format long % so sẽ có 14 chu so sau dau phay

format long e % so dang mu

format hex % so dang hex

format short e %so dang mu ngan

format short %tro ve so dang ngan (default)

Ta cũng có thể dùng disp và fprintf để hiển thị các biến Ví dụ:

disp(‘Tri so cua x = ‘), disp(x)

Ta viết chương trình ct1_2.m như sau

Trang 8

fprintf(fid, ‘%5.2f(do Fahrenheit) la %5.2f(do C).\n’, f, c);

Trang 9

Cho một hàm toán học một biến, ta có thể dùng lệnh fminbnd của MATLAB để tìm cực tiểu

địa phương của hàm trong khoảng đã cho Ví dụ:

f = inline(‘1./((x ‐ 0.3).^2+0.01) + 1./((x ‐ 0.9).^2 + 0.04) ‐ 6 ‘);

x = fminbnd(f, 0.3, 1)

Lệnh fminsearch tương tự hàm fminbnd dùng để tìm cực tiểu địa phương của hàm nhiều biến.

Ta có hàm 3 biến lưu trong file three_var.m như sau:

Trang 10

v = [‐0.6 ‐1.2 0.135];

a = fminsearch(‘three_var’, v)

6 Các phép toán trên ma trận và vec tơ:

a Khái niệm chung: Giả sử ta tạo ra các ma trận a và b bằng các lệnh:

b Chỉ số: Phần tử ở hàng i cột j của ma trận m×n có kí hiệu là A(i, j).

Tuy nhiên ta cũng có thể tham chiếu tới phần tử của mảng nhờ một chỉ số, ví dụ A(k) với k = i+ (j ‐ 1)m Cách này thường dùng để tham chiếu vec tơ hang hay cột Trong trường hợp ma trận đầy đủ thì nó được xem là ma trận một cột dài tạo từ các cột của ma trận ban đầu Như vậy viết A(5) có nghĩa là tham chiếu phần tử A(2, 2)

Để 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 13

Tạo vector a gồm có 4 phần tử, với các giá trị là:1, 3, 7, 4

c: tích số của a,b

Cách khai báo: sắp xếp biến theo thứ tự giảm dần của lũy thừa

Trang 14

x: biến chứa kết quả.

fuction: tên hàm số.

x1, x2: khoảng khảo sát

fun: tên hàm số.

xmin, xmax: xác định khoảng cần vẽ.

Trang 15

fun: tên hàm số.

c) Ví dụ:

Trước tiên ta khai báo hàm số f trong tập tin f.m: (xem thêm lệnh function) function y = f(x);

Trang 16

m: biến chứa kết qủa.

a: tên vector hay ma trận cần tính giá trị trung bình.

Nếu a là ma trận thì tính giá trị trung bình của mỗi cột d) Ví dụ:

Trang 17

x,y,v: tên vector.

m: là giá trị lớn nhất.

Trang 18

s: là biến chứa kết quả.

x: là tên ma trận.

Nếu x là ma trận thì s là tổng của các cột.

disp(‘Tuoi toi trong khoang 0 ‐ 30’);

gu = input(‘Xin nhap tuoi cua ban: ‘);

Trang 19

d for: vòng lặp for dùng khi biết trước số lần lặp Cú pháp như sau:

for <chỉ số> = <giá trị đầu> : <mức tăng> : <giá trị cuối>

Ta xây dựng chương trình đoán số ct1_6.m:

disp([‘Ban co quyen du doan ‘, num, ‘ lan’]);

disp(‘So can doan nam trong khoang 0 ‐ 100’);

Trang 20

gu = input(‘Nhap so ma ban doan: ‘);

e break: phát biểu break để kết thúc vịng lặp for hay while mà khơng quan tâm đến điều kiện

kết thúc vịng lặp đã thoả mãn hay chưa

1.2 ĐỒ HOẠ TRONG MATLAB

1 Các lệnh vẽ: MATLAB cung cấp một loạt hàm để vẽ biểu diễn các vec tơ số liệu cũng như

giải thích và in các đường cong này

plot đồ họa 2‐D với số liệu 2 trục vơ hướng và tuyến tính

plot3 đồ họa 3‐D với số liệu 2 trục vơ hướng và tuyến tính

polar đồ hoạ trong hệ toạ độ cực

loglog đồ hoạ với các trục logarit

semilogx đồ hoạ với trục x logarit và trục y tuyến tính

semilogy đồ hoạ với trục y logarit và trục x tuyến tính

plotyy đồ hoạ với trục y cĩ nhãn ở bên trái và bên phải

x,y: vẽ giá trị x theo giá trị y.

linetype: kiểu phần tử tạo nên nét vẽ bao gồm 3 thành phần:

- Thành phần thứ nhất là các ký tự chỉ màu sắc:

Màu

Trang 21

- Thành phần thứ hai là các ký tự chỉ nét vẽ của đồ thị:

- Thành phần thứ ba là các ký tự chỉ loại điểm đánh dấu gồm:., o,

x, +, *

d) Ví dụ:

Vẽ đồ thị hàm y = sin(x) với đồ thị màu lam, đường liền nét và

bước thay đổi là π /8

Trang 22

5 Ghi nhãn lên các trục toạ độ: MATLAB cung cấp các lệnh ghi nhãn lên đồ hoạ gồm :

title thêm nhãn vào đồ hoạ

xlabel thêm nhãn vào trục x

ylabel thêm nhãn vào trục y

zlabel thêm nhãn vào trục z

legend thêm chú giải vào đồ thị

text hiển thị chuỗi văn bản ở vị trí nhất định

gtext đặt văn bản lên đồ hoạ nhờ chuột

\bf bold font

\it italics font

\sl oblique font (chữ nghiêng)

\rm normal font

Các kí tự đặc biệt xem trong String properties của Help.

Ta dùng các lệnh xlabel , ylabel , zlabel để thêm nhãn vào các trục toạ độ Ta có thể thêm văn

bản vào bất kì chỗ nào trên hình vẽ nhờ hàm text Ta có

chương trình ct1_15.m:

x = ‐pi: 1: pi;

Trang 23

y = sin(x);

plot(x, y)

xlabel(‘t = 0 to 2\pi’, ‘Fontsize’, 16)

ylabel(‘sin(t)’, ‘Fontsize’, 16)

title(‘\it{Gia tri cua sin tu zero đến 2 pi}’, ‘Fontsize’, 16)

text(3*pi/4, sin(3*pi/4),’\leftarrowsin(t ) = 0.707’, ‘FontSize’, 12)

Trang 24

CHƯƠNG 2: HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH 1.1 KHÁI NIỆM CHUNG

1.2 NGHIỆM CỦA HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH

1 Trường hợp không suy biến: Khi số phương trình m bằng số ẩn số n, ma trận [A] vuông

và ta có:

[x] = [A] -1 [b] (1)

nếu ma trận A không suy biến, nghĩa là định thức của ma trận khác không

Các lệnh MATLAB để giải hệ là (ctsys.m):

Trang 25

1.3 GIẢI HỆ PHƯƠNG TRÌNH BẰNG CÁCH PHÂN TÍCH MA TRẬN

1.Để giải hệ phương trình bằng cách phân tích ma trận theo thuật toán Doolittle ta dùng hàm

Trang 26

function x = jacobi(a, b, x0, kmax)

%Tim nghiem cua pt Ax = B bang thuat toan Jacobi.

%Cu phap: x = jacobi(a, b, x0, kmax)

% hay jacobi(a, b, x0, kmax)

if nargin < 4

tol = 1e‐6;

kmax = 100; % jacobi(a, b, x0)

elseif kmax < 1

tol = max(kmax, 1e‐16);

kmax = 100; %jacobi(a, b, x0, tol)

Trang 28

function x = gausseidel(a, b, x0, kmax)

%Tim nghiem cua he AX = B bang cach lap Gauss–Seidel.

Trang 30

CHƯƠNG 3: NỘI SUY VÀ XẤP XỈ HÀM

1 NỘI SUY LAGRANGE

Trang 31

function [l, L] = lagrange(x, y)

%Dua vao : x = [x0 x1 xn], y = [y0 y1 yn]

%ket qua: l = He so cua da thuc Lagrange bac n

Trang 32

và tìm y(2.5) ta dùng chương trình ctlagrange.m:

Trang 34

Ta xây dựng hàm newton() để nội suy:

Trang 35

Ta dùng chương trình ctnewton.m để nội suy:

Trang 36

CHƯƠNG 4: ĐẠO HÀM VÀ TÍCH PHÂN SỐ

1 TÍNH ĐẠO HÀM BẬC NHẤT BẰNG PHƯƠNG PHÁP ROMBERG

Đạo hàm theo phương pháp Romberg là một phương pháp ngoại suy để xác định đạo hàm với một độ chính xác cao Ta xét khai triển Taylor của hàm f(x) tại (x + h) và (x ‐ h):

Trang 37

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

function df = diffromberg(f, x, h, maxiter, tol)

%Tinh dao ham bang phuong phap Romberg

Trang 40

Ta xây dựng hàm diffn() để tính đạo hàm tới bậc 5:

c = difapx(i,[‐i i]); %he so cua dao ham

dix = c*feval(f,xo + [‐i:i]*h)’;

T(i+1) = dix/tmp; %dao ham

c = difapx(i,[‐i i]); %he so cua dao ham

dix = c*feval(f,xo + [‐i:i]*h)’; %/h^i; %dao ham

T(i+1) = dix/tmp; %he so cua chuoi Taylor

Trang 41

3 TÍNH ĐẠO HÀM BẰNG PHƯƠNG PHÁP NỘI SUY

Giả sử ta có hàm cho dưới dạng bảng:

Để tìm đạo hàm của hàm tại một điểm nào đó ta sẽ nội suy hàm rồi sau đó

tính đạo hàm của hàm tại điểm đã cho Ta xây dựng hàm diffinterp() để thực

hiện công việc trên

function df = diffinterp(x, y, n, x0)

%Tinh dao ham cap 1 hai 2 bang phuogphap noi suy

px = lagrange(x, y); % Tim da thuc noi suy Lagrange (x, y)

fprintf(‘Dao ham cap %d la: %f\n’,n, df);

Để tính đạo hàm ta dùng chương trình ctdiffinterp.m:

Trang 43

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

function J = trapezoid(f, a, b, maxiter, tol)

% Quy tac hinh thang lap.

h = (b ‐ a)/n ; % khoang chia moi

x = a + h/2.0; % toa do diem moi thu nhat

Trang 44

Để tính tích phân ta dùng chương trình cttrapezoid.m

J = trapezoid(f, a, b, maxiter, tol)

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

function s = simpson(f, a, b, n)

%n so khoang chia

%neu f chua trong mot file dung ki hieu @ de goi

Trang 46

CHƯƠNG 5: CÁC PHƯƠNG TRÌNH VI PHÂN THƯỜNG

1 BÀI TOÁN CAUCHY

Trang 47

2 PHƯƠNG PHÁP EULER

function [X, Y] = euler(fxy, xo, xf, yo, n)

% %Giai phuong trinh y’(x) = f(x,y(x)) hay y’ = f(x)

if n < 2

Trang 48

dy(1) = y(2) * y(3);

dy(2) = ‐y(1) * y(3);

dy(3) = ‐0.51 * y(1) * y(2);

Để giải phương trình cho bởi hàm f1(x, y) ta dùng chương trình cteuler.m:

Trang 49

3 PHƯƠNG PHÁP HEUN

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

function [X, Y] = heun(fxy, xo, xf, yo, n)

%Giai phuong trinh y’(x) = f(x,y(x)) hay y’ = f(x)

%dung thuat toan Heun voi n buoc tinh

Trang 51

4 PHƯƠNG PHÁP RUNGE ‐ KUTTA

Trang 52

Ta xây dựng hàm rungekutta() để thực hiện công thức Runge ‐ Kutta bậc 4:

function [x, y] = rungekutta(f, a, b, y0, n)

%Phuong phap Runge‐Kutta de giai phuong trinh y’(x) = f(x,y(x)) hay y’ =

Trang 54

5 PHƯƠNG PHÁP RUNGE ‐ KUTTA THÍCH NGHI

Trang 55

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

function [xsol, ysol] = adaptrk(f, xo, x1, y, n)

% Tich phan Runge‐Kutta bac 5 dung giap phuong trinh y’ = f(x, y) hay y’ =

%f(x).

% xo, x1 ‐ doan tim nghiem.

% y gia tri dau, n dung tim h ban dau

h = (x1 ‐ xo)/n;

if size(y, 1) > 1 ;

Trang 56

y = y’; % y phai la vec to hang

Trang 57

% tinh su thay doi cua y theo (3) & (4)

% neu sai so dat den gia tri cho phep, chap nhan ket qua

% kiem tr dieu kien ket thuc

Trang 58

%y = @f4;

[u, v] = adaptrk(y, a, b, ya, n)

plot(u, v)

6 PHƯƠNG PHÁP CHUỖI TAYLOR

function [xout, yout] = taylor(deriv, x, y, x1, h)

% Tich phan chuoi Taylor bac 4.

% x, y = cac gia tri dau; i la vec to hang.

% x1 = gia tri cuoi cua x

Trang 60

CHƯƠNG 6: PHƯƠNG TRÌNH VI PHÂN ĐẠO HÀM RIÊNG

1 KHÁI NIỆM CHUNG

Phương trình vi phân đạo hàm riêng(PDE) là một lớp các phương trình vi phân có số biến độc lập lớn hơn 1 Trong chương này ta sẽ khảo sát các phương trình vi phân đạo hàm riêng cấp 2 với hai biến độc lập x và y, có dạng tổng quát:

2 PHƯƠNG TRÌNH ELLIPTIC

Trang 62

function [u, x, y] = poisson(f, g, bx0, bxf, by0, byf, D, Mx, My, tol, maxiter)

% giai a(u_xx + u_yy + g(x,y)u = f(x,y)

% tren mien D = [x0, xf, y0, yf] = {(x,y) |x0 <= x <= xf, y0 <= y <= yf}

% voi dieu kien bien:

% u(x0,y) = bx0(y), u(xf,y) = bxf(y)

% u(x,y0) = by0(x), u(x,yf) = byf(x)

% Mx ‐ so doan con tren truc x

% My ‐ so doan con tren truc y

% tol : sai so cho phep

% maxiter: so lan lap

Trang 63

byf = inline(‘exp(4)*cos(x) ‐ exp(x)*cos(4)’,’x’); %(vd.3b)

D = [x0 xf y0 yf];

Trang 64

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

function [u, x, t] = fwdeuler(a, xf, T, it0, bx0, bxf, M, N)

Trang 65

%giai au_xx = u_t voi 0 <= x <= xf, 0 <= t <= T

% dieu kien dau: u(x,0) = it0(x)

ieu kien bien: u(0,t) = bx0(t), u(xf,t) = bxf(t)

% M ‐ so doan con theo x

Trang 66

CHƯƠNG 7: NỘI SUY VÀ XẤP XỈ HÀM

1 Biến đổi Fourrier: Tín hiệu thực tế thường bao gồm các thành phần có tần số khác nhau

Chuỗi Fourier và phép bíến đổi Fourier là công cụ toán học dùng để phân tích đặc tính tần số của tín hiệu Có 4 định nghĩa tương tự nhau về chuỗi và phép biến đổi Fourier, gồm: chuỗi Fourier liên tục theo t(CFS), phép biến đổi Fourier liên tục theo t(CFT), chuỗi Fourier gián đoạn theo t(DFS) và phép biến đổi Fourier gián đoạn theo t(DFT) Trong các công cụ này, DFT dễ dàng lập trình trên máy tính nên trong phần này ta sẽ chú ý đến nó

Ta xem xét hiệu qủa này bằng cách thực hiện đoạn lệnh trong

Trang 67

tic %ngung dong ho

time_fft = toc %dua ra thoi gian thuc hien

clf, plot(k,abs(X1),’r’) %pho bien do

Chạy đoạn lệnh và so sánh thời gian thực hiện 1024 điểm tính DFT/iDFT vàFFT/iFFT

clear, clf

w1 = 1.5*pi;

Trang 69

Ta có nhiều phổ DFT cho cùng một tín hiệu tương tự, tuỳ thuộc vào

kích thước DFT, chu kì lấy mẫu, khoảng lấy mẫu và đệm zero So sánh phốkhi giảm chu kì lấy mẫu T từ 0.1s đến 0.05s

Ta xây dựng hàm nội suy interpdfs():

function [xi,Xi] = interpdfs(T, x, Ws, ti)

%T : chu li lay mau

%x : thu tu roi rac hoa

%Ws: tan so dung chuan (1.0 = pi[rad])

%ti: khoang thoi gian noi suy

Ngày đăng: 24/02/2019, 20:56

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w