CHUONG 14 14.1 Các nghiệm của đa thức Tìm nghiệm của đa thức là tìm giá trị để đa thức bằng không, một bải toán thưởng gặp trong thực tế.. Trong MATLAB một đa thức được biểu diễn bằng m
Trang 1CHUONG 14
14.1 Các nghiệm của đa thức
Tìm nghiệm của đa thức là tìm giá trị để đa thức bằng không, một bải toán thưởng gặp
trong thực tế MATLAB có thể 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 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
x4-12x°+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ểu 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é tim duoc bang cach dung ham roots
>> r = roots(p)
r=
11.7374
2.7028
-1.2251 + 1.46721
-1.2251 - 1.4672I
Bởi vi 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
Trang 2của một đa thức thi ta dễ dàng biết được đa thức đó, Trong MATLAB lệnh øø# 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
Bởi vi 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 ham read
14.2 Nhân đa thức
Hàm cønv 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°+2x2+3x+4 va b(x) = x°+4x?+9x+16
>>a=[i 2 3 4]:b=[1 4 9 16]
>>G= conv(a,b)
C=
Kết quá là c(x) = x® +6x° +20x4 +50x°+75x74+84x+64
Khi ta nhân nhiều đa thức với nhau thì ta phải sử dụng lệnh ønw nhiều lần
14.3 Phép công đa thức
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=
150
Trang 3Kết quả là d(x)=2x3+6x?+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+r[0 00 dj
ẹ=
Kết quả là e(x)=xÊ+6x°+20x“+52x?+81x?+84 Các giá trị 0 can 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(:).; | Ymake 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 Bay giờ cĩ thể minh hoạ cho việc dùng hàm øø//aØø, hãy xét ví dụ trước day:
>> f = polyadd(c,d)
f=
Kết quả cũng giống như đa thức e ở trên Tất nhiên polyađd cũng cĩ thể dùng để thực
hiện phép trừ
Trang 4>> g = polyadd{c,-d)
g-
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 đecøøv, sử dụng các đa thức b và c ở trên ta có:
>>Íjqr] = deconv(cb)-
q=
Kết quá này chỉ ra rằng c đem chia cho b thi đượ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 vi 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 Dao ham
Bởi vì dễ dàng tính được vị phân của một đa thức nên MATLAB đưa ra hàm øojyder để
tính vị phân đa thức:
>> h = polyder(g)
hz
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
polyvalsé thuc hién cong viéc nay:
>> X = linspace({-1,3):
Sẽ chọn 100 điểm dữ liệu giữa -1 và 3
>>p=[l 4 -ƒ -16Ị,
152
Trang 5Dung da thttc p(x) = x°+4x?-7x-10
>> v = polyval(p,x):
Tính giá trị của p(x) tại các gia 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 (hình 14.1):
>> plot(x, v), title(x^3+4x^2-7x-10'), xlabel(x')
x)+4xˆ-7x-10
30+
25+
20r
x
Hinh 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Ỉ øađe có dạng như sau:
nx) _ Nx”+N;x”1+ +Nạ +
dx) D,x°+D;x”?+ +D,„
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] % anumerator
n=
1 -10 100
>> d=[1 10 100 0] % a dimominator
d=
1 10 100 0
153
Trang 6>> z=roots(n) % the zeros of n(x)/d(x)
z=
9.0000 + 8.66031I
5.0000 - 8.6603i
>> p=roots(d) % the poles of n(x)/d(x)
p=
0
-5.0000 + 8.6603:
-5.0000 - 8.6603:
Đạo hàm của phân thức này theo biên x được tính dựa trên hàm /p//đer
>> [nd,dd]Epolyder(n,d)
nd =
dd =
Columns 1 through 6
Column 7
0
ở đây nd và dd là tử thức và mẫu thức của đạo hàm Một thao tac 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.6603:
-5.0000 - 8.6603i
0
154
Trang 7k=
Trong trudng hop nay ham residue tra về các hệ số mở rộng phân thức từng phần r, các ngniệ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à:
d(x) x4+5-86603i x-5+86803i x
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
Vi vay trong trường hợp này, hàm zes/đưe 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ó