Symbolic toolbox

26 488 1
Tài liệu đã được kiểm tra trùng lặp
Symbolic toolbox

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Nguyenvanbientbd47@gmail.com 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') Nguyenvanbientbd47@gmail.com 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); Nguyenvanbientbd47@gmail.com 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. Nguyenvanbientbd47@gmail.com 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() Nguyenvanbientbd47@gmail.com 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) Nguyenvanbientbd47@gmail.com 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() Nguyenvanbientbd47@gmail.com 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) Nguyenvanbientbd47@gmail.com 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 Nguyenvanbientbd47@gmail.com 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] Nguyenvanbientbd47@gmail.com 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]) [...]... subs(S): Thay thế tất cả các biến symbolic trong biểu thức bằng các giá trị có đợc từ việc gọi hàm hoặc từ Workspace của Matlab + subs(S, new): Thay thế biến symbolic tự do trong S bằng new + subs(S, old, new): Thay thế old bằng new trong biểu thức S Old là một biến symbolic, một sâu đại diện cho một tên biến, hoặc một biểu thức sâu ký tự New có thể là một biến, một biểu thức symbolic, biến số hoặc biểu... chuyển đa thức symbolic thành véc tơ các hệ số của đa thức Lệnh sym2poly (P) trả về một véc tơ hàng chứa các hệ số của đa thức symbolic P Ví dụ: >>sym2poly(x^3 - 2*x - 5) và kết quả trả về [1 0 -2 -5] 5.5.5- Tìm hàm ngợc Để tìm hàm ngợc của một hàm symbolic f nào đó ta sử dụng lệnh finverse(f) + g = finverse(f) trả về hàm ngợc của f, f là một symbol vô hớng biểu diễn một hàm một biến symbolic x Thì... Phơng trình vi phân Hàm dsolve tính toán lời giải symbolic cho các phơng trình vi phân thờng Các phơng trình đợc xác định bởi biểu thức symbolic chứa chữ D để biểu diễn ký hiệu vi phân d/dt Các ký hiệu D2, D3,, Dn tơng ứng với đạo hàm bậc 2, 3,, n Vì vây, D2y tơng đơng với d2y/dt2 Trong lời giải dsolve thì biến độc lập mặc định là t Lu ý rằng tên của biến symbolic không đợc chứa ký tự D Điều kiện đầu có... trình đại số Giả sử S là một biểu thức symbolic Lệnh solve(S) sẽ có gắng tìm các giá trị của biến symbolic trong S (đợc xác định bởi findsym(S)) làm cho S bằng không Lệnh solve( ) có các cú pháp nh sau: + solve(PT1, PT2, , PTn) + solve(PT1, PT2, , PTn, v1, v2,, vn) + solve(PT1, PT2, , PTn, v1, v2,, vn) trong đó PT là phơng trình, v1, v2,,vn là các biến hay ẩn Các biến symbolic không đợc liệt kê trong danh... tích đa thức ra dạng thừa số horner: horner(f) Biểu diễn đa thức symbolic f dới dạng horner (lồng vào nhau) Ví dụ: >>syms x y >>horner(x^3-6*x^2+11*x-6) ans = -6+(11+(-6+x)*x)*x >>horner([x^2+x;y^3-2*y]) 79 Nguyenvanbientbd47@gmail.com Giáo trình Matlab và ứng dụng ans = [ (1+x)*x] [(-2+y^2)*y] * Tách tử số và mẫu số của một biểu thức symbolic [n,d] = numden(A): biến đổi mỗi phần tử của A thành dạng... f do hàm findsym quyết định Nếu f = f(z), thì ztrans(f) trả về một hàm của w: F = F(w) + F = ztrans(f,w) trả về F là một hàm của biến symbolic w thay vì biến độc lập mặc định z: ztrans(f,w) F(w) = symsum(f(n)/w^n, n, 0, inf) + F = ztrans(f,k,w): f là hàm của biến symbolic k thay vì biến độc lập mặc định: ztrans(f,k,w) F(w) = symsum(f(k)/w^k, k, 0, inf) Ví dụ: >>syms k n w z >>ztrans(2^n) kết... (4-x)/5; >>[n,d] = numden(A) n = 4-x d= 5 >>[n,d] = numden(x/y + y/x) n = x^2+y^2 d = y*x >>A = [a, 1/b] >>[n,d] = numden(A) n = [a, 1] d = [1, b] 5.3.4- Đơn giản biểu thức Để đơn giản biểu thức trong symbolic math toolbox định nghĩa các hàm sau: + R = simplify(S) + R = simple(S) Hàm simplify là một công cụ mạnh, mục đích tổng quát, hàm này áp dụng một số đặc tính của đại số nh tổng, luỹ thừa, căn bậc hai,... hớng biểu diễn một hàm một biến symbolic x Thì g là một symbol vô hớng thoả mãn: g(f(x)) = x + g = finverse(f,v) sử dụng biến symbolic v trong đó v là một symbol nh là biến độc lập Thì g là một symbol thoả mãn: g(f(v)) = v Cú pháp này đợc sử dụng khi f chứa nhiều hơn một biến symbolic Ví dụ: Ví dụ: >>syms u v x y >>finverse(1/tan(x)) ans = atan(1/x) 93 Nguyenvanbientbd47@gmail.com Giáo trình Matlab... Nguyenvanbientbd47@gmail.com Giáo trình Matlab và ứng dụng >>finverse(exp(u-2*v),u) ans = 2*v+log(u) >>f = x^2+y; >>finverse(f,y) ans = -x^2+y >>finverse(f) Warning: finverse(x^2+y) is not unique > In C:\matlabR12 \toolbox \symbolic\ @sym\finverse.m at line 43 ans = (-y+x)^(1/2) Lệnh finverse(x^2+y) mà không xác định biến độc lập là y thì xuất hiện một cảnh báo (Warning: finverse(x^2+y) is not unique) là hàm ngợc của f... >>iztrans(exp(x/z),z,k) kết quả là x^k/k! 5.5.4- Chuyển phơng trình hệ số sang phơng trình tham số Để chuyển phơng trình hệ số sang phơng trình tham số, sử dụng lệnh poly2sym Lệnh này chuyển đa thức hệ số thành đa thức symbolic poly2sym(C) trả về một đa thức theo biến x với các hệ số là các phần tử của véctơ C poly2sym(C,'V') và poly2sym(C,sym('V') trả về một đa thức theo biến đợc xác định ở đối số thứ hai với các hệ . 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. (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

Ngày đăng: 29/09/2013, 20:20

Tài liệu cùng người dùng

Tài liệu liên quan