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

Symbolic toolbox

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 (208.93 KB, 26 trang )


Giáo trình Matlab và ứng dụng



69

Chơng 5 Symbolic toolbox
Symbolic Math Toolbox định nghĩa một kiểu dữ liệu mới của Matlab gọi là đối
tợng Symbolic. Một đối tợng Symbolic là một cấu trúc dữ liệu lu trữ một đại
diện kiểu sâu ký tự của một biểu tợng (Symbol). Symbolic Math Toolbox sử
dụng các đối tợng Symbolic để biểu diễn các biến, biểu thức và Matlab trận
Symbolic.
5.1- Tạo đối tợng (biến, biểu thức) symbolic
Lệnh sym cho phép xây dựng các biến và biểu thức symbolic. Ví dụ:
>> x = sym(x); y = sym(y); % lệnh này tạo ra x,y là các biến symbolic.
Giả sử ta muốn sử dụng một biến symbolic để biểu diễn tỷ số: =
2
51 +
ta sử
dụng lệnh sau:
>>ro = sym((1+sqrt(5))/2);
sau lệnh ở trên ta có thể thực hiện rất nhiều phép toán đối với ro, ví dụ:
>>f = ro^2-ro-1
f = (1/2+1/2*5^(1/2))^2-3/2-1/2*5^(1/2)
Giả sử bạn muốn nghiên cứu hàm bậc hai f = ax
2
+ bx +c.
>> f=sym('a*x^2+b*x+c')
f =
a*x^2+b*x+c


Câu lệnh trên đã gán biểu thức symbolic ax
2
+ bx +c vào biến f. Tuy nhiên,
trong trờng hợp này Matlab không tạo ra các biến tơng ứng với các số hạng
của biểu thức (a, b, c, x). Để thực hiện các phép toán symbolic chẳng hạn nh
tích phân, đạo hàm, đối với f, cần tạo ra các biến một cách chính xác bằng
cách gõ:
>>a = sym('a')

Giáo trình Matlab và ứng dụng



70

>>b = sym('b')
>>c = sym('c')
>>x = sym('x')
Hoặc ta có thể khai báo một cách đơn giản:
>> syms a b c x
* Tạo các biến thực:
>> x = sym(x, real);y =sym(y,real) %x,y là biến kiểu thực symbolics
hoặc đơn giản hơn
>>syms x y real %Lệnh này tạo ra các biến x và y là biến symbolic kiểu thực.
>>syms x real y
hay x = sym(x, real);y = sym(y)
% x là biến kiểu thực, y là biến bất kỳ kiểu symbolic
Để xoá đặc tính real của các biến x, y ta dùng lệnh sau: syms x y unreal hay:
>>x = sym(x, unreal)
syms t

Q = sym(Q(t));
% t biến symbolic và Q là hàm symbolic.
* Biến symbolic mặc định
Khi vận dụng các hàm toán học, việc chọn biến độc lập thờng là rõ ràng từ ngữ
cảnh. Ví dụ, ta xem xét biểu thức toán học f = sin(a.t + b) đợc biểu diễn trong
Matlab nh sau: f =. Nếu ta cần tính đạo hàm của biểu thức này mà không xác
định biến độc lập thì theo quy ớc toán học ta nhận đợc f = a.cos(a.t + b). Giả
thiết rằng biến độc lập trong biểu thức này là t thì các biến còn lại a, b đợc xem
nh các hằng số hoặc tham số. Theo quy ớc toán học thì biến độc lập thờng là
các chữ in thờng nằm ở cuối bảng chữ cái (ví dụ: x, y, z, t, u, v,).
>>syms a b t
>>f = sin(a*t + b);

Giáo trình Matlab và ứng dụng



71

>>diff(f) %Lệnh này tính đạo hàm của biểu thức symbolic f.
trong câu lệnh diff(f), ta không xác định là đạo hàm biểu thức f theo biến nào (a,
b hay x). Làm thế nào Matlab xác định đợc ta muốn đạo hàm theo biến t mà
không phải là a hoặc b. Trong symbolic math toolbox sử dụng một biến
symbolic để xác định biến độc lập mặc định trong trờng hợp chúng ta không
xác định biến độc lập, đó là một hàm tiện ích findsym. Biến symbolic mặc định
đợc sử dụng trong các phép toán tính toán, đơn giản hoá biểu thức, giải phơng
trình và các phép biến đổi.
>>findsym(f,1)
ans =
t

ở đây, đối số thứ hai trong hàm findsym biểu thị số biến symbolic mà ta muốn
tìm trong biểu thức f. Nếu không xác định đối số thứ hai thì findsym sẽ trả về
một danh sách liệt kê tất cả các biến trong biểu thức. Ví dụ:
>> findsym(f)
ans =
a, b, t
Luật findsym: Biến độc lập trong một biểu thức symbolic là một chữ cái gần chữ
x nhất trong bảng chữ cái. Nếu có hai chữ gần chữ x thì chữ sau x trong bảng
chữ cái đợc chọn.
ví dụ: >>findsym(a+c-v*y,1)
ans=
y
5.2- Các phép tính
Symbolic Math Toolbox cung cấp các hàm để thực hiện các phép tính cơ bản
nh: tích phân, đạo hàm, tìm giới hạn, tính tổng của chuỗi, khai triển Taylor.

Giáo trình Matlab và ứng dụng



72

5.2.1- Đạo hàm
Để tính đạo hàm của một biểu thức symbolic ta sử dụng hàm diff()
+ diff(S): Đạo hàm biểu thức symbolic S với biến tự do đợc xác định bởi hàm
findsym(S).
+ diff(S,v) hay diff(S,sym(v)): Đạo hàm biểu thức symbolic S với biến lấy đạo
hàm là biến symbolic v nghĩa là thực hiện phép toán dS/dv.
+ diff(S,n) : Đạo hàm cấp n biểu thức S, n là số nguyên dơng.
Ví dụ:

>>syms x t
>> y = sin(x^2);
>>z = diff(y);
z = 2*cos(x^2)*x
>>pretty(z) %hiển thị dạng quen thuộc
2.cos
2
x.x
>>y = diff(t^6,6) % đạo hàm bậc 6 của hàm t
6
.
y = 720
>>syms u v
>>y = u^2*v - u*v^3;
>> y2u = diff(y,u,2) %dao ham cap 2 theo u
y2u = 2*v
>> y3u = diff(y,v,3) %dao ham cap 3 theo v

y3u = -6*u
5.2.2- Tích phân
Để tính tích phân của một biểu thức symbolic ta sử dụng hàm int()

Giáo trình Matlab và ứng dụng



73

+ int(S): Tích phân không xác định của biển thức symbolic S theo biến mặc định
đợc xác định bởi findsym.

+ int(S, v): Tích phân không xác định của biểu thức symbolic S với biến tích
phân v.
+ int(S,a,b): Tích phân không xác định của biểu thức symbolic S với biến tự do
và cận lấy tích phân từ [a,b].
+ int(S,v,a,b): Tích phân không xác định của biểu thức symbolic S với biến tích
phân v và cận lấy tích phân từ [a,b].
Vidụ:
>>syms x t z alpha
>>int(-2*x/(1+x^2)^2)
ans = 1/(1+x^2)
>>int(x/(1+z^2),z)
ans = x*atan(z)
>>int(x*log(1+x),0,1)
ans = 1/4
>>int(-2*x/(1+x^2)^2)
ans = 1/(1+x^2)
>> int([exp(t),exp(alpha*t)])
ans = [ exp(t), 1/alpha*exp(alpha*t)]
Vídụ: Tính tích phân I =





dxe
sx
2
)(
>>Syms x s real
>>f = exp(-(s*x)^2);

>>I = int(f,x,-inf,inf)% inf - Infinity là vô cùng lớn
I =
Signum(s)/s*pi^(1/2)

Giáo trình Matlab và ứng dụng



74

Hàm signum chính là hàm sign (hàm dấu), nghĩa là sign(s) cho ta:
sign(s) = 1 khi s>0; sign(s) = 0 khi s =0; sign(s) = -1 khi s<0;

5.2.3- Tìm giới hạn
Để tìm giới hạn của biểu thức symbolic F ta dùng lệnh limit()
+ limit(F, x, a) : Tìm giới hạn của biểu thức F khi x a.
+ limit(F, a) : Tìm giới hạn của biểu thức F với biến độc lập.
+ limit(F) : Tìm giới hạn của biểu thức F khi a = 0.
+ limit(F, x, a, right) hoặc Lim it(F, x, a, left) : Tìm giới hạn phải hoặc bên
trái
Ví dụ:
>>syms x a t h
>>limit(sin(x)/x)
ans = 1
>>limit(1/x,x,0,right)
ans = inf
>>limit(1/x,x,0,left)
ans = -inf
>>limit((sin(x+h)-sin(x))/h,h,0)
ans = cos(x)

>>v = [(1+a/x)^x,exp(-x)];
>>limit(v,x,inf,left)
ans = [exp(a),0]
5.2.4- Tính tổng của dãy số symbolic
Để tìm tổng của biểu thức symbolic S ta dùng lệnh symsum()

Giáo trình Matlab và ứng dụng



75

+ symsum(S): Tổng của biểu thức symbolic theo biến symbolic k , k đợc xác
định bằng lệnh findsym từ 0

k -1.
+ symsum(S,v): Tổng của biểu thức symbolic S theo biến symbolic v,v đợc
xác định từ 0

k - 1.
+ symsum(S,a,b), symsum(S,v,a,b): Tổng của biểu thức symbolic S theo
symbolic v, v đợc xác định từ v = s đến v = b.
Ví dụ:
>>syms k n x
>>symsum(k^2)
ans = 1/3*k^3-1/2*k^2+1/6*k
>>symsum(k)
ans = 1/2*k^2-1/2*k
>>symsum(sin(k*pi)/k,0,n)
ans = -1/2*sin(k*(n+1))/k+1/2*sin(k)/k/(cos(k)-1)*cos(k*(n+1))-

1/2*sin(k)/k/(cos(k)-1)
>>symsum(k^2,0,10)
ans = 385
>>symsum(x^k/sym(k!), k, 0,inf)
ans = exp(x)
Vi dụ: Cho tổng của 2 dãy
S1 = 1 +
++
22
3
1
2
1
.
S2 = 1 + x + x
2
+..
>>syms x k
>>s1 = symsum(1/k^2,1,inf) %inf là vô cùng.
s1 = 1/6*pi^2
>>s2 = symsum(x^k,k,0,inf)

Giáo trình Matlab và ứng dụng



76

s2 = -1/(x-1)
5.2.5- Khai triển taylor

+ taylor(f): Là phép xấp xỉ đa thức bậc 5 gần đúng với f. Về mặt kỹ thuật, chuỗi
Taylor (xấp xỉ xung quanh điểm x
0
0) chính là trờng hợp tổng quát của chuỗi
Maclaurin (xấp xỉ xung quanh điểm x
0
= 0)
+ taylor(f
,n,v): Cho ta xấp xỉ đa thức theo Maclaurin bậc (n-1) của biểu thức,
hàm khai triển symbolic f và v là biến độc lập trong biểu thức. v có thể là một
xâu (string) hay là biến symbolic.
+ taylor(f,n,v
,a): Khai triển Taylor của biểu thức hay hàm symbolic f quanh
điểm a. Đối số có thể là giá trị số, một hàm symbolic hay một xâuNếu
không cho giá trị n thì mặc định trong Matlab n = 6.
Vi dụ: Khai triển Taylor của hàm f = e
xsin(x)
quanh điểm x
0
= 2 (Nếu x
0
= 0 ta có
khai triển Maclaurin).
>>syms x
>> f = exp(x*sin(x));
>>t = taylor(f,4,2)% khai triển 4 số hạng đầu tiên khác o và xung quanh
điểm x
0
= 2
Kết quả:

exp(2*sin(2))+exp(2*sin(2))*(2*cos(2)+sin(2))*(x-2)+exp(2*sin(2))*(-
sin(2)+cos(2)+2*cos(2)^2+2*cos(2)*sin(2)+1/2*sin(2)^2)*(x-
2)^2+exp(2*sin(2))*(-1/3*cos(2)-1/2*sin(2)-cos(2)*sin(2)+2*cos(2)^2-
sin(2)^2+4/3*cos(2)^3+2*cos(2)^2*sin(2)+cos(2)*sin(2)^2+1/6*sin(2)^3)*(x-
2)^3
Bây giờ ta có thể vẽ hàm đã cho và hàm đã khai triển bằng chuỗi Taylor quanh
điểm x0 = 2 và cho nhận xét.
>>syms x

Giáo trình Matlab và ứng dụng



77

>> f = exp(x*sin(x));
>>t = taylor(f,10,2);
>>xd= 1:0.05:3;
>>yd = subs(f,x,xd);% thay thế biễn x bằng xd
>>ezplot(t,[1,3])% vẽ hàm symbolic
>> hold on
>>plot(xd,yd,'r-')
5.3- Đơn giản hoá biểu thức và thay thế
5.3.1- Gom số hạng, biến
Để gom các hệ số có cùng luỹ thừa của biến độc lập ta sử dụng lệnh collect().
+ collect(S): S là đa thức, gom các hệ số có cùng luỹ thừa của biến mặc định
đợc xác định bởi findsym(S).
+ collect(S,v): S là đa thức, gom các số hạng chứa biến v
Ví dụ:
>>syms x y;

>>R1 = collect((exp(x)+x)*(x+2))
>>R2 = collect((x+y)*(x^2+y^2+1), y)
>>R3 = collect([(x+1)*(y+1),x+y])
Kết quả:
R1 = x^2+(exp(x)+2)*x+2*exp(x)
R2 = y^3+x*y^2+(x^2+1)*y+x*(x^2+1)
R3 = [(y+1)*x+y+1, x+y]

Giáo trình Matlab và ứng dụng



78

5.3.2- Khai triển biểu thức
Câu lệnh expand(S) khai triển biểu thức symbolic S thành nhân tử (dạng tổng
của các tích). Lệnh expand thờng đợc dùng để khai triển đa thức nhng cũng
đợc dùng để khai triển các hàm lợng giác, các hàm mũ và hàm logarit.
expand(S): Khai triển biểu thức symbolic S, viết mỗi phần tử của S thành tích
các thừa số của nó.
Ví dụ:
>>syms x y a b c t
>>expand((x-2)*(x-4))
ans = x^2-6*x+8
>>expand(cos(x+y))
ans = cos(x)*cos(y)-sin(x)*sin(y)
>>expand(exp((a+b)^2))
ans = exp(a^2)*exp(a*b)^2*exp(b^2)
>>expand(log(a*b/sqrt(c)))
ans = log(a)+log(b)-1/2*log(c)

>>expand([sin(2*t), cos(2*t)])
ans = [2*sin(t)*cos(t), 2*cos(t)^2-1]
5.3.3- Phân tích biểu thức thành thừa số
* Factor(S): Phân tích biểu thức symbolic S thành thừa số nguyên tố. Lệnh này
trả về một véc tơ các thừa số nguyên tố của S. Nếu S không thể phân tích thành
các số hữ tỷ thì kết quả sẽ là chính nó.
Ví dụ:
>>syms x y a b
>>factor(x^3-y^3)
ans = (x-y)*(x^2+x*y+y^2)
>>factor([a^2-b^2, a^3+b^3])

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×