Các hàm phân tích dữ liệu cplxpairx Xắp xếp cặp phức liên hợp crossx,y Tích chéo vector cumprodx Tích tích luỹ theo cột cumprodx,n Tích tích luỹ theo chiều n cumsumx Tổng tích luỹ theo c
Trang 1Cá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
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
Trang 2thứ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
x4-12x3+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) = x3+2x2+3x+4 và b(x) = x3
+4x2+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) = x6 +6x5 +20x4 +50x3+75x2+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
Trang 3MATLAB 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)=2x3+6x2+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)=x6+6x5+20x4+52x3+81x2+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
Trang 4Kế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à lưu 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’)
Trang 5Hì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)
Trang 6nd =
-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 -