1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình mathlab toàn tập - Chương 7 doc

8 249 0
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 87,17 KB

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

Nội dung

Về cơ bản, MATLAB được viết đối với những ma trận và thực hiện phép toán số học tuyến tính đơn giản mà xuất hiện trong nhiều ứng dụng.. Một vấn đề chung nhất của số học tuyến tính là việ

Trang 1

title('Acid-Water Bath Dipping Example')

Ch¹y ch−¬ng tr×nh trªn ta ®−îc kÕt qu¶ nh− sau:

lost =

1 2 3 4 5 6 7 8 9 10

n =

59 29 19 14 12 10 8 7 6 6

H×nh 6.2 Chó ý ë ®©y yªu cÇu ph−¬ng ph¸p chia chÊm v× log(1 + lost/ 100) lµ mét vector

-oOo -

ch−¬ng 7

c¸c phÐp tÝnh víi m¶ng

Trang 2

7.1 Tạo phương trình tuyến tính

Về cơ bản, MATLAB được viết đối với những ma trận và thực hiện phép toán số học tuyến tính

đơn giản mà xuất hiện trong nhiều ứng dụng Một vấn đề chung nhất của số học tuyến tính là việc giải phương trình Ví dụ tạo phương trình:

=

A.x = b

Biểu tượng phép nhân toán học (.) được định nghĩa trong phép toán trên, khác với kí hiệu ta dùng

đối với mảng trước kia Trong MATLAB phép nhân ma trận này được định nghĩa bằng dấu sao (*) Tiếp theo định nghĩa dấu bằng, ma trận tạo ra từ ma trận A và vector x bằng với vector b Giải pháp tồn tại cho sự cân bằng đề cập ở trên là những vấn đề cơ bản của số học tuyến tính Thêm nữa, khi lời giải không tồn tại, có rất nhiều cách gần đúng để tìm kiếm giải pháp, như phép loại trừ Gaussian, sự tìm thừa số LU, hoặc tính trực tiếp A-1 b Dưới đây chúng ta sẽ đề cập đến một số cách giải quyết như trên:

Trước tiên nhập vào ma trận A và b:

>> A = [1 2 3; 4 5 6; 7 8 0]

A=

1 2 3

4 5 6

7 8 0

>> b = [366; 804; 315]

b=

366

804

351

Nếu bạn có kiến thức về số học tuyến tính, nó rất dễ để bạn kiểm tra xem định thức của ma trận trên

có khác không hay không:

>> det(A)

ans=

27

Nếu nó đúng, MATLAB có thể giải phương trình theo hai cách, một cách hay được dùng hơn, một cách ít sử dụng, nhưng trực tiếp hơn, phương pháp này là chuyển thành dạng x=A-1.b

>> x = inv(A)*b

x=

25.0000

22.0000

99.0000

ở đây inv(A) là hàm của MAYLAB dùng để tính A-1; và toán tử nhân ( * ), không có dấu chấm phía trước, đây là phép nhân ma trận Phương pháp được dùng nhiều hơn là dùng toán tử chia ma trận trái:

>> x = A\b

x=

25.0000

22.0000

99.0000

Trang 3

Phương trình này sử dụng phương pháp tìm thừa số LU gần đúng và đa ra câu trả lời như là phép chia trái A cho b Toán tử chia trái ( \ ) không có dấu chấm phía trước là một phép toán của ma trận,

nó không phải là các phép toán giữa các phần tử của mảng Phương pháp thứ hai này được sử dụng nhiều hơn do nhiều nguyên nhân, một trong những nguyên đơn giản nhất là phương pháp này dùng ít phép toán hơn và tốc độ nhanh hơn Thêm vào đó, nhìn chung phương pháp này chính xác hơn cho những bài toán lớn Trong trường hợp khác, nếu MATLAB không tìm thấy phương pháp giải hoặc không tìm thấy phương pháp chinh xác, nó sẽ hiện thông báo lỗi

Nếu bạn nghiên cứu số học tuyến tính, bạn biết rằng khi số phương trình và số biến khác nhau, thì không thể có một phương pháp duy nhất để giải Trong MATLAB khi gặp những hệ phương trình

có số phương trình lớn hơn số biến nó dùng toán tử chia trái hoặc chia phải, tự động giảm thấp nhất những phần tử thừa A.x - b Cách này gọi là phương pháp vuông nhỏ nhất Ví dụ:

>> A = [1 2 3; 4 5 6; 7 8 0; 2 5 8] % Bốn phương trình, ba biến

A=

1 2 3

4 5 6

7 8 0

2 5 8

>> b = [366 804 351 514]’

b=

366

804

351

514

>> x = A\b % Phương pháp vuông nhỏ nhất

x=

247.9818

-173.1091

114.9273

>> res = A*x - b

res=

-119.4545

11.9455

0.0000

35.8364

Mặt khác khi số phương trình ít hơn số biến tương tự như trường hợp không xác định, thì số nghiệm phương trình là vô tận Đối với những nghiệm này MATLAB tính theo hai cách Dùng toán tử chia đa ra phương pháp mà có số phần tử 0 của x là cực đại Như một sự lựa chọn, tính x=pinv(A)*b

đa ra phương pháp chiều dài hoặc tiêu chuẩn của x nhỏ hơn các phương pháp khác Phương pháp này gọi là phương pháp tiêu chuẩn cực tiểu

Ví dụ:

>> A = A’ % Tạo ba phương trình, bốn biến

A=

1 4 7 2

2 5 8 5

3 6 0 8

>> b = b(1:3)

b=

366

Trang 4

804

351

>> x = A\b % phương pháp với số phần tử 0 cực đại

x=

0

-165.9000

99.0000

168.3000

>> xn = pinv(A)*b % Tìm kiếm giải pháp tiêu chuẩn nhỏ nhất

xn=

30.8182

-168.9818

99.0000

159.0545

>> norm(x) % Tiêu chuẩn O_clit với các phần tử 0

ans=

256.2200

>> norm(xn) % Giải pháp tiêu chuẩn nhỏ nhất

ans=

254.1731

7.2 Các hàm ma trận

Để giải phương trình tuyến tính, MATLAB cung cấp các hàm trợ giúp sau:

Các hàm ma trận

balance(A) Cân bằng để tăng độ chính xác

cdf2rdf(A) Chuyển từ dạng số phức chéo sang dạng số thực chéo

cholinc(A, droptol) Thừa số Cholesky không đầy đủ

condest(A) Ước lượng số điều kiện ma trận theo tiêu

expm1(A) Bổ sung M_file của expm

expm2(A) Ma trận theo luật hàm mũ, dùng thứ tự Taylor

funm(A, ‘fun’) Tính toán hàm ma trận chung

logm(A) Ma trận logarithm

lu(A) Tìm thừa số với phép khử Gaussian

luinc(A, droptol) Thừa số LU không đầy đủ

norm(A) Ma trận và vector tiêu chuẩn

norm(A, p) Tiêu chuẩn P (chỉ đối với vector)

norm(A, ‘fro’) Tiêu chuẩn F

normest(A) Tiêu chuẩn 2 ước lượng cho ma trận lớn

Trang 5

poly(A) Đa thức đặc trưng

polyvalm(A) Tính giá trị của ma trận

qrdelet(Q, R, j) Xoá cột từ thừa số QR

qrinsert(Q, R, j, x) Chèn cột trong thừa số QR

rank(A) Số của hàng hoặc cột độc lập

rcond(A) Ước lượng điều kiện thuận nghịch

sqrtm(A) Ma trận gốc bình phương

subspace(A, B) Góc giữa hai điểm

svds(A, K) Một số các giá trị đơn

trace(A) Tổng các phần tử chéo

7.3 Ma trận đặc biệt

MATLAB đa ra một số các ma trận đặc biệt, trong đó một số chúng có những ứng dụng rộng rãi trong các phép toán Nhìn chung những ma trận đó là:

>> a = [1 2 3; 4 5 6];

>> b = find(a>10)

b=

[ ]

ở đây b là ma trận rỗng MATLAB trả lại ma trận rỗng khi phép toán không có kết quả Trong ví

dụ trên không có phần tử nào của a lớn hơn 10 Ma trận rỗng không có kích cỡ, nhưng tên biến của chúng vẫn tồn tại trong không gian làm việc

>> zeros(3) % Ma trận không 3 hàng, 3 cột (3x3)

ans=

0 0 0

0 0 0

0 0 0

>> ones(2,4) % Ma trận một 2 hàng, 4 cột (2x4)

ans=

1 1 1 1

1 1 1 1

>> zeros(3) + pi

ans=

3.1416 3.1416 3.1416

3.1416 3.1416 3.1416

3.1416 3.1416 3.1416

Ví dụ trên về tạo ma trận 3x3 với các phần tử đều là

>> rand(3,1)

ans=

0.2190

0.0470

0.6789

ma trận 3x1 gồm các phần tử là số cung cấp bởi hàm random giữa 0 và 1

>> randn(2)

Trang 6

ans=

1.1650 0.0751

0.6268 0.3516

ma trận 2x2 của các số cung cấp bởi hàm random với giá trị trung bình là 0 Thuật toán cho hàm rand

và randn có thể tìm thấy trong S.K>Park and K.W.Miller,”Random Number Generator: Good Ones Are Hard to Find,” Comm ACM, 32, 10, Oct 1988-1201

>> eye(3)

ans=

1 0 0

0 1 0

0 0 1

Ma trận đồng nhất 3x3

>> eye(3,2)

ans=

1 0

0 1

0 0

Ma trận đồng nhất 3x2

Ngoài ra để chỉ kích cỡ của một ma trận, bạn có thể dùng hàm size để tạo một ma trận có kích cỡ giống như ma trận khác:

>> A = [1 2 3; 4 5 6];

>> ones(size(A))

ans=

1 1 1

1 1 1

ma trận một có cùng kích cỡ với ma trận A

Các ma trận trên và các ma trận đặc biệt khác được giới thiệu trong bảng sau:

Các ma trận đặc biệt

[ ] Ma trận rỗng

compan Tạo ma trận rỗng

eye Ma trận đồng nhất

gallery Ma trận kiểm tra nhỏ vài phần tử

hadamard Ma trận Hadamard

hankel Ma trận Hankel

hilb Ma trận Hilbert

invhilb Chuyển thành ma trận Hilbert

magic Ma trận vuông, giá trị các phần tử bằng từ 1 đến giá trị số phần tử

ones Ma trận 1

pascal Ma trận tam giác Pascal

rand Ma trận với các phần tử ngẫu nhiên từ 0 đến 1

randn Ma trận ngẫu nhiên thông thường với giá trị trung bình bằng 0

rosser Ma trận kiểm tra đối xứng trục chính

toeplitz Ma trận Toeplitz

vander Ma trận Vandermond

wilkinson Ma trận kiểm tra Wilkinson

Trang 7

zeros Ma trận không

Ví dụ

Vấn đề: Ta có mạch điện như trong hình 7.1 được mô tả bằng phương trình điện áp nút khi nguồn

đa vào là sóng hình sin

Hình 7.1

E = 10o; R1 = 2; L = 10j; C = ; R2 = 10

ở đây vi là điện áp giữa nút thứ i và đất Hỏi điện áp tại mỗi nút là bao nhiêu?

Giải pháp: Đây là vấn đề về phân tích pha Phương pháp giải bài này là giải phơưng trình trên, và chuyển các kết quả về dạng thời gian Trong MATLAB giải pháp sẽ là:

function circuit

% circuit.m script file to solve circuit proplem

A(1,1)=1/2; % poke in nonzero values as needed

A(1,2)=-1/2;

A(2,1)=-1/2;

A(2,2)=1/2 + 0.2j + 1/10j;

A(2,3)= -1/10j;

A(3,2)=-1/10j;

A(3,3)=1/10 + 1/10j;

y=[-1 0 0]'; % right hand side vector

v=A\y % complex solution

vmag=abs(v) % solution magnitudes

vphase=angle(v)*180/pi % solution phase in degrees

theta=linspace(0,2*pi); % plot results in time

v1=vmag(1)*cos(theta-vphase(1));

v2=vmag(2)*cos(theta-vphase(2));

v3=vmag(3)*cos(theta-vphase(3));

thd=theta*180/pi;

plot(thd,v1,thd,v2,thd,v3)

Sau khi chạy chương trình trên, kết quả sẽ là:

v =

-4.0000 + 6.0000i

-2.0000 + 6.0000i

2.0000 + 4.0000i

vmag =

7.2111

Trang 8

6.3246

4.4721

vphase =

123.6901

108.4349

63.4349

Hình 7.2

-oOo -

chương 8

các phép tính LOGIC Và QUAN Hệ Thêm vào những toán tử ‘truyền thống’, MATLAB cung cấp toán tử logic và quan hệ Bạn có thể

quen thuộc với những phép toán này, nếu bạn đã làm quen với các ngôn ngữ lập trình khác Mục đích

của những toán tử và hàm này là để trả lời câu hỏi True_False (đúng_sai)

Đối với các số thì trong toán tử logic và quan hệ quy định các số khác không là True còn số không

là False Kết quả của phép toán logic và quan hệ đa ra là 1 cho True, 0 cho False

Ngày đăng: 24/07/2014, 23:20

TỪ KHÓA LIÊN QUAN

w