Tải bản đầy đủ (.pdf) (6 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (80.11 KB, 6 trang )


90
Các hàm phân tích dữ liệu
cplxpair(x) Xắp xếp cặp phức liên hợp
cross(x,y) Tích chéo vector
cumprod(x) Tích tích luỹ theo cột
cumprod(x,n) Tích tích luỹ theo chiều n
cumsum(x) Tổng tích luỹ theo cột
cumsum(x,n) Tổng tích luỹ theo chiều n
cumtrapz(x,y) Tích chéo tích luỹ
cumtrapz(x,y,n) Tích chéo tích luỹ theo chiều n
del2(A) Toán tử rời rạc Laplacian 5 điểm
diff(x) Tính độ chênh lệch giữa các phần tử
diff(x,m) Tính số ra cấp m của các phần tử
diff(x,m,n) Tính số ra cấp m của các phần tử theo chiều n
dot(x,y) Tích vô hớng của hai vector
gradient(Z,dx,dy) Gradient vi phân
histogram(x) Biểu đồ hình cột
max(x), max(x,y) Phần tử lớn nhất
max(x,n) Phần tử lớn nhất theo chiều n
mean(x) Giá trị trung bình của cột
mean(x,n) Giá trị trung bình theo chiều n
median(x) Giá trị của phần tử giữa của cột
median(x,n) Giá trị của phần tử giữa theo chiều n
min(x), min(x,y) Phần tử nhỏ nhất
min(x,n) Phần tử nhỏ nhất theo chiều n
prod(x) Tích các phần tử trong cột
prod(x,n) Tích các phần tử theo chiều n
rand(x) Số ngẫu nhiên phân bố đều
randn(x) Số ngẫu nhiên phân bố bình thờng
sort(x) Xắp xếp các cột theo thứ tự tăng dần


sort(x,n) Xắp xếp theo chiều n
sortrows(A) Xắp xếp các hàng theo thứ tự tăng dần
std(x), std(0) Độ lệch chuẩn của cột chuẩn hoá theoN-1
std(x,1) Độ lệch chuẩn của cột chuẩn hoá theoN
std(x, flag, n) Độ lệch chuẩn theo chiều n
subspace(A,B) Góc giữa hai điểm
sum(x) Tổng các phần tử trong mỗi cột
sum(x,n) Tổng các phần tử theo chiều n
trapz(x,y) Tích chéo của y=f(x)
trapz(x,y,n) Tích chéo theo chiều n


oOo

chơng 14
ĐA THứC

14.1 Các nghiệm của đa thức

Tìm nghiệm của đa thức là giá trị để đa thức bằng không, là một bài toán thờng gặp trong thực
tế. MATLAB giải quyết những bài toán này và đồng thời cung cấp những công cụ để tính toán đa

91
thức. Trong MATLAB một đa thức đợc biểu diễn bằng một vector hàng các hệ số với bậc giảm dần.
Ví dụ đa thức
x
4
-12x
3
+25x+116 đợc nhập vào nh sau:


>> p = [1 -12 0 25 116]
p=
1 -12 0 25 116

Nhớ rằng mục dành cho hệ số 0 cũng phải đợc gõ vào nếu không MATLAB sẽ không hiểu đợc
hệ số của biêủ thức bậc mấy là không. Sử dụng dạng này thì nghiệm của một đa thức có thể tìm đợc
bằng cách dùng hàm
roots
:

>> r = roots(p)
r=
11.7374
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i
Bởi vì trong MATLAB cả đa thức và các nghiệm của nó đều là vector nên MATLAB ngầm quy
ớc rằng đa thức là vector hàng, còn các nghiệm là các vector cột. Nếu biết trớc nghiệm của một đa
thức thì ta dễ dàng biết đợc đa thức đó. Trong MATLAB lệnh
poly
sẽ thực hiện công việc này:

>> pp = poly(r)
pp=
1 -12 -1.7764e-14 25 116
>> pp(abs(pp)< 1e-12 = 0 % Gán những phần tử quá nhỏ bằng không
1 -12 0 25 116

Bởi vì trong tính toán thờng gặp những sai số nên đôi khi kết quả của lệnh

poly
cho ra các đa thức
có các hệ số gần bằng không và các đa thức có phần ảo rất nhỏ nh đợc chỉ ra ở trên, các giá trị bằng
không có thể đợc làm tròn bằng các công cụ về mảng. Tơng tự nh vậy, ta có thể làm tròn một số
phức để trở thành một số thực bằng hàm
real
.

14.2 Nhân đa thức

Hàm
conv
thực hiện nhân hai đa thức (thực ra là hai ma trận), xét tích của hai đa thức sau:

a(x) = x
3
+2x
2
+3x+4 và b(x) = x
3
+4x
2
+9x+16

>> a = [1 2 3 4]; b = [1 4 9 16];
>> c = conv(a,b)
c=
1 6 20 50 75 84 64

Kết quả là c(x) = x

6
+6x
5
+20x
4
+50x
3
+75x
2
+84x+64

khi ta nhân nhiều đa thức với nhau thì ta phải sử dụng lệnh
conv
nhiều lần.

14.3 Phép cộng đa thức



92
MATLAB không cung cấp các hàm trực tiếp thực hiện phép cộng hai đa thức, dùng phép cộng ma
trận chỉ có tác dụng khi hai đa thức là hai vector có cùng kích thớc. Ví dụ nh cộng hai đa thức a(x)
và b(x) ở trên:

>> d = a + b
d=
2 6 12 20
Kết quả là d(x)=2x
3
+6x

2
+12x+20. Khi hai đa thức có bậc khác nhau thì đa thức có bậc thấp hơn
phải đợc thêm vào các hệ số 0 để cho bậc của nó có cùng bậc với đa thức có bậc cao hơn. Xét phép
cộng hai đa thức c và d ở trên:

>> e = c + [0 0 0 d]
e=
1 6 20 52 81 96 84

Kết quả là e(x)=x
6
+6x
5
+20x
4
+52x
3
+81x
2
+84. Các giá trị 0 cần phải đợc thêm vào ở phía đầu
của vector chứ không phải phía đuôi, bởi vì các hệ số đó phải tơng ứng với các hệ số bậc cao của x.
Nếu bạn muốn, bạn có thể tạo một hàm M_file để thực hiện phép công đa thức tổng quát:

function p=polyadd(a,b)
%POLYADD Polynomial addition
%POLYADD(A,B) adds the polynomials A and B
if nargin<2
error(Not enough input arguments)
end
a=a(:).; %make sureinputs are row vectors

b=b(:).;
na=length(a); %find lengths of a and b
nb=length(b);
p=[zeros(1,nb-na) a]+[zeros(1,na-nb) b];
% pad with zeros as necessary

Bây giờ có thể minh hoạ cho việc dùng hàm polyadd, hãy xét ví dụ trớc đây:

>> f = polyadd(c,d)
f=
1 6 20 52 81 96 84
Kết quả cũng giống nh đa thức e ở trên. Tất nhiên polyadd cũng có thể dùng để thực hiện phép trừ.
>> g = polyadd(c,-d)
g=
1 6 20 48 69 72 44
14.4 Chia hai đa thức


Trong một số trờng hợp ta phải chia đa thức này cho một đa thức khác, trong MATLAB công
việc này đợc thực hiện bởi hàm
deconv
, sử dụng các đa thức b và c ở trên ta có:

>> [q,r] = deconv(c,b)
q=
1 2 3 4
r=
0 0 0 0 0 0 0

93


Kết quả này chỉ ra rằng c đem chia cho b thì đợc đa thức là q và đa thức d là r trong trờng hợp này
đa thức d là đa thức 0 bởi vì c là đa thức chia hết cho q (nhớ rằng trên đây ta đã nhận đợc đa thức c
bằng cách đem nhân đa thức a với đa thức b)

14.5 Đạo hàm

Bởi vì dễ dàng tính đợc vi phân của một đa thức nên MATLAB đa ra hàm
polyder
để tính vi
phân đa thức:

>> h = polyder(g)
h=
6 30 80 144 138 72

14.6 Tính giá trị của một đa thức

Rõ ràng rằng bạn có thể cộng, trừ, nhân, chia, đạo hàm một đa thức bất kỳ dựa trên các hệ số của
nó, bạn cũng có thể dễ dàng tính đợc giá trị các đa thức này. Trong MATLAB hàm
polyval
sẽ thực
hiện công việc này:

>> x = linspace(-1,3);

Sẽ chọn 100 điểm dữ liệu giữa -1 và 3

>> p = [1 4 -7 -10];


Dùng đa thức p(x) = x3+4x2-7x-10

>> v = polyval(p,x);

Tính giá trị của p(x) tại các giá trị của x và lu trữ kết quả vào trong mảng v. Sau đó kết quả sẽ đợc
vẽ ra bằng lệnh plot

>> plot(x, v), title(x^3+4x^2-7x-10), xlabel(x)

94


Hình 14.1
14.7 Phân thức hữu tỉ

Đôi khi bạn gặp những bài toán liên quan đến tỉ số của hai đa thức hay còn gọi là phân thức hữu
tỉ, ví dụ nh các hàm truyền hay các hàm xấp xỉ
pade
có dạng nh sau:

Trong MATLAB phân thức cũng đợc mô phỏng bằng hai đa thức riêng rẽ.
Ví dụ nh:

>> n=[1 -10 100] % a numerator
n =
1 -10 100
>> d=[1 10 100 0] % a dimominator
d =
1 10 100 0
>> z=roots(n) % the zeros of n(x)/d(x)

z =
5.0000 + 8.6603i
5.0000 - 8.6603i
>> p=roots(d) % the poles of n(x)/d(x)
p =
0
-5.0000 + 8.6603i
-5.0000 - 8.6603i

Đạo hàm của phân thức này theo biến x đợc tính dựa trên hàm
polyder
:
>> [nd,dd]=polyder(n,d)

95
nd =
-1 20 -100 -2000 -10000
dd =
Columns 1 through 6
1 20 300 2000 10000 0
Column 7
0
ở đây nd và dd là tử thức và mẫu thức của đạo hàm. Một thao tác thông thờng khác là tìm phần d
của phân thức.

>> [r,p,k]=residue(n,d)
r =
0.0000 + 1.1547i
0.0000 - 1.1547i
1.0000

p =
-5.0000 + 8.6603i
-5.0000 - 8.6603i
0
k =
[]
Trong trờng hợp này hàm
residue
trả về các hệ số mở rộng phân thức từng phần r, các nghiệm của
phân thức là p và phần thơng chia hết của phân thức là k. Nếu bậc của tử số nhỏ hơn bậc của mẫu số
thì phân thức chia hết sẽ bằng không. Trong ví dụ trên thì mở rộng phân thức từng phần của phân thức
đã cho là:

Nếu cho trớc các đa thức này thì phân thức ban đầu sẽ tìm đợc bằng cách sử dụng hàm
residue
:

>> [nn,dd]=residue(r,p,k)
nn =
1.0000 -10.0000 100.0000
dd =
1.0000 10.0000 100.0000 0

Vì vậy trong trờng hợp này, hàm
residue
có thể thực hiện đợc việc chuyển đổi hai chiều tuỳ
thuộc vào số lợng các tham số vào và ra truyền cho nó.

oOo











×