Sử dụng Symbolic Toolbox trong Mathlab
Trang 1Chương 2 : sử dụng symbolic math toolbox
Đ1 Khái niệm chung
Symbolic Math Toolboxes kết hợp tính toán bằng chữ vào môi trường MATLAB.Các
toolbox này bổ sung các tiện ích số và đồ thị với các kiểu tính toán toán học khác nhau
Calculus đạo hàm,tích phân,giới hạn,tổng và chuỗi Taylor
Linear Algebra nghịch đảo,định thức,giá trị riêng,phân tích và dạng chính
Variable-Precision
Arithmetic
đánh giá độ chính xác của các biểu thức đại số
Transform biến đổi laplace,fourrier và z
Đ2 Khởi động toolbox
1 Các đối tượng chữ:Trong phần này chúng ta sẽ xem xét cách tạo và dùng các đối tượng
chữ.Chúng ta cũng sẽ xem xét các biến chữ mặc định.Symbolic Math Toolbox định nghĩa một
kiểu dữ liệu MATLAB mới gọi là đối tượng chữ hay sym.Bên trong,một đối tượng chữ là một
cấu trúc số liệu mà nó lưu biểu diễn chuỗi các kí tự.Symbolic Math Toolbox dùng các đối
tượng chữ để biểu diễn các biến chữ,các biểu thức chữ,các ma trận chữ
2 Tạo các biến và các biểu thức chữ:Lệnh sym cho phép ta xây dựng các biến và các biểu
thức chữ.Ví dụ lệnh:
x = sym('x')
a = sym('alpha')
tạo ra các biến chữ là x và và a với x là x và a là alpha
Giả sử ta muốn ta muốn dùng biến chữ để biểu diễn tỉ lệ vàng
Trang 2ans =
0
Bây giờ giả sử ta muốn giải phương trình bậc 2 f =ax2 +bx+c.Phát biểu:
f = sym('a*x^2 + b*x + c')
gán biểu thức chữ ax2+bx+c cho biến f.Tuy nhiên trong trường hợp này Symbolic Math
Toolbox không tạo ra các biến tương ứng với các số hạng a,b,c và x trong biểu thức.Để thực
hiện các phép toán bằng chữ(ví dụ tích phân,đạo hàm,thay thế v.v) trên f ta phải tạo các biến một cách rõ ràng,nghĩa là cần viết:
Nói chung là ta có thể dùng sym hay syms để tạo các biến chữ nhưng nên dùng syms để tiết
kiệm thời gian
2 Biến đổi giữa số và chữ:
a Tạo các biến thực và phức:Lệnh sym cho phép ta mô tả các thuộc tính toán học của
các biến chữ bằng cách dùng tuỳ chọn real.Phát biểu:
Lệnh conj là toán tử tạo số phức liên hợp
Để xóa thuộc tính real của x ta dùng lệnh:
syms x unreal
hay:
x = sym('x','unreal')
Lệnh clear x không xoá thuộc tính số real của x
b Tạo các hàm trừu tượng:Nếu ta muốn tạo một hàm trừ tượng(nghĩa là một hàm
không xác định) f(x) cần dùng lệnh:
f = sym('f(x)')
Khi này f hoạt động như là f(x) và có thể xử lí bằng các lệnh toolbox.Ví dụ để tính vi phân bậc
1 ta viết:
Trang 3ứng dụng này của hàm sym sẽ rất hữu ích trong biến đổi Fourrier,Laplace và z
c Dùng sym để truy cập các hàm của Maple:Ta có thể truy cập hàm giai thừa k! của Maple khi dùng sym
ans =
n!
hay nếu tính 12! ta cũng có thể viết:
prod(1:12)
d Ví dụ tạo ma trận chữ: Một ma trận vòng là ma trận mà hàng sau có được bằng cách
dịch các phần tử của hàng trước đi 1 lần.Ta tạo một ma trận vòng A bằng các phần tử a,b và c:
Do A là ma trận vòng tổng mỗi hàng và cột như nhau:
sum(A(1,:))
ans =
a+b+c sum(A(1,:)) == sum(A(:,2)) % This is a logical test
ans =
1
Bây giờ ta thay A(2,3) bằng beta và b bằng alpha:
syms alpha beta
Trang 4Tỳ ví dụ này ta tháy dùng các đối tượng chữ cũng tượng tự như dùng số trong MATLAB
e Biến chữ mặc định:Khi dùng các hàm toán học,việc chọn các biến độc lập thường rất
rõ ràng.Ví dụ xem bảng sau:
tạo ra các biểu thức chữ r , t và f.Ta có thể dùng các lệnh diff,int,subs hay các lệnh Symbolic
Math Toolbox khác để xử lí các biểu thức như vậy
b Tạo các M-file:M-file cho phép ta dùng các hàm tổng quát hơn.Ví dụ ta muốn tạo ra
hàm sinc = sin(x)/x ta sẽ viết một M-file có nội dung như sau:
function z = sinc(x)
%SINC The symbolic sinc function
% sin(x)/x This function
% accepts a sym as the input argument
Trang 5g = sin(at+b)
g’ = acos(at+b)
g = sin(a*t+b) diff(g) hay diff(g,t)
h = Jv(z)
h’ = Jv(z)(v/z) - Jv+1(z)
h = besselj(nu,z) diff(h) hay diff(h,z)
Để tính đạo hàm bậc 2 của f theo x và a ta viết:
diff(f,2)
ans =
- sin(a*x)*a^2 diff(f,x,2)
Trang 6J
ϕλ
[ cos(l)*cos(f), -r*sin(l)*cos(f), -r*cos(l)*sin(f) ]
[ cos(l)*sin(f), -r*sin(l)*sin(f), r*cos(l)*cos(f)]
Chú ý là đối số thứ nhất của hàm jacobian phải là vec tơ cột và đối số thứ hai là vec tơ
hàng.Hơn nữa do định thức của ma trận Jacobian là biểu thức l−ợng giác khá phức tạp nên ta
dùng lệnh simple để thay thế và rút gọn
Bảng sau tổng hợp hàm diff và hàm jacobian
Toán tử toán học Lệnh MATLAB
f = exp(ax + b) syms a b x
f = exp(a*x + b) dx
fd
v,u(
)trJ
Trang 7h
)x()hx(lim)
x
(
f
0 h
ư+
=
′
→Symbolic Math Toolbox cho phép giới hạn của một hàm một cách trực tiếp hơn.Lệnh:
1lim
x
0
cho 3 kết quả khác nhau : không xác định , -∞ và +∞
Trong trương hợp không tồn tại gới hạn Symbolic Math Toolbox trả về kết quả NaN.Ví dụ:
limit(1/x,x,0) % Equivalently, limit(1/x)
x(lim0
)x(lima
x → limit(f,x,a) hay limit(f,a)
)x(lima
x → ư limit(f,x,a,’left’)
Trang 8x → + limit(f,x,a,’right’)
3 Tích phân:
a Các vấn đề chung:Nếu f là một biểu thức chữ thì int(f) tìm một biểu thức khác F sao cho
diff(F) = f.Như vậy int(f) cho ta tích phân bất định của f.Tương tự như đạo hàm int(f,v) lấy tích
phân theo biến độc lập v.Ta có bảng sau:
1n
xdx
x
1 n n
0
1dx)
x
2
sin(
int(sin(2*x),0,pi/2) hay int(sin(2*x),x,0,pi/2)
g = cos(at+b)
∫ = sin(at+b)
a
1dt
z(Jdz
Khi MATLAB không tìm được tích phân nó viết kại lệnh đã nhập vào
b Tích phân với hằng số thực:Một trong các vấn đề khi tính tích phân là giá trị của các
thông số.Ta xét hàm eư(kx)2.Hàm này rõ ràng là có giá trị dương với mọi k và x và có dạng hình chuông.Giá trị của hàm tiến đến 0 khi x→±∞ với mọi số thực k.Ta lấy ví dụ
2
1
k = và vẽ đồ thị của hàm bằng các lệnh:
Need to know the sign of > k^2
Will now try indefinite integration and then take limits
Warning: Explicit integral could not be found
ans =
Trang 9dùng lệnh sym.Một đặc điểm có ích của sym gọi là tuỳ chọn real cho phép ta khai báo k là biến
thực.Do vậy tích phân trên hoàn toàn tính đ−ợc trong toolbox nhờ các lệnh:
syms k real % Be sure that x has been declared a sym
g int(g,-inf,inf) hay int(g,x,-inf,inf)
4 Tính tổng:Ta có thể tính tổng biểu thức chữ khi chúng tồn tại bằng cách dùng lệnh
symcum.Ví dụ chuỗi :
⋅⋅
⋅++
3
12
Trang 10x
Xap xi Taylor
Ham Taylor
Trang 11Symbolic Math Toolbox cung cấp một bộ các lệnh dễ dùng để vẽ đồ thị các biểu chữ,bao
gồm các đường cong trong mặt phẳng(ezplot),các đường đẳng mức(ezcontour và ezcontourf) , các mặt cong(ezsurf , ezsurfc , ezmesh và ezmeshc),đồ thị trong toạ độ cực(ezpolar) và đường cong dưới dạng thông số (ezplot và ezplot3) va mặt dưới dạng thông số (ezsurf).Trong phần này chúng ta xem cách dùng hàm ezplot vẽ đồ thị hàm f(x).Đồ thị của hàm như sau:
Phạm vi mặc định khi vẽ đồ thị của hàm là [-2πữ2π ].Để chỉ cụ thể phạm vị vẽ đồ thị ta dùng lệnh:
ezplot(f,[a b])
Lúc này đồ thị của hàm được vẽ trong đoạn [a , b]
Bây giờ ta tìm đạo hàm bậc 2 của f(x):
x 1/(5+4 cos(x))
-5 -4 -3 -2 -1 0 1 2
x 32/(5+4 cos(x))3 sin(x)2+4/(5+4 cos(x))2 cos(x)
Trang 12Từ đồ thị ta thấy rằng giá trị của f”(x) nằm trong khoảng [-4 , 1].Giá trị max vàmin của f”(x) xuất hiện tại f”’(x)=0.Phát biểu:
4 3
))xcos(
45(
)xsin(
4))xcos(
45(
)xcos(
)xsin(
96))xcos(
45
(
)xsin(
384
+
ư+
++
Ta rút gọn f3 và viết lại dưới dạng dễ đọc:
))xcos(
45(
)25)xcos(
80)xcos(
80)xsin(
96)(
xsin(
4
+
ư+
Mỗi hàng là một nghiệm của f”’(x).Lệnh:
format; % Default format of 5 digits
Zero cua f3
Trang 13Điều này xảy ra do f”’(x) chứa số hạng sinx,bằng 0 tại các giá trị nguyên lần π nhưng hàm
solve(sin(x)) lại chỉ đưa ra giá trị 0 tại x = 0.Chúng ta có thể nhận được tất cả các nghiệm bằng
cách biến đổi zr = [0 zr(4) pi 2*pi -zr(4)] bằng cách nhân 2π và có zr = [zr-2*pi zr zr+2*pi] Bây giờ ta vẽ zr đã biến đổi lên đồ thị của f3:
x
Zero cua f3
Điểm 0 đầu tiên của f”’(x) tìm bởi
solve là tại x = 0.Chúng ta thay thế 0
vào biến chữ trong f2:
Trên đồ thị của f”(x) giá trị này chỉ
là cực tiểu địa phương.Ta thể hiển
Trang 14Các phân tích trên cho thấy là phạm vi giá trị của f”(x) là từ [ -4 ,1].Ta tiếp tục kiểm tra các
điểm 0 khác cho bởi solve.Trước hết ta tách nghiệm thứ 4 trong z và gán nó cho một biến riêng:
để thấy được là s là điểm max.Giá trị max này là M1 = 1.0051
Bây giờ ta tích phân f”(x) hai lần bằng lệnh:
g = int(int(f2))
và có kết quả:
g =
-8/(tan(1/2*x)^2+9)
Trang 159
8)
xcos(
45
1
+
++
Ta có thể rút gọn d bằng lệnh simple(d) hay simplify(d).Cả hai cho kết quả:
ans =
1
Điều này minh hoạ cho khái niệm là đạo hàm hàm f(x) hai lần và rồi tích phân kết quả hai lần
ta nhận đ−ợc một hàm khác với f(x) bởi một hàm tuyến tính của x
x 2/3 atan(1/3 tan(1/2 x))
Trang 16Cả 3 biểu thức này là các dạng biểu diễn toán học khác nhau của cùng một hàm toán học-đó là
đa thức bậc 3 theo x.Mỗi một dạng thích hợp với một dạng tính toán.Dạng thứ nhất f là dạng chung nhất thường được dùng biểu diễn đa thức.Nó đơn giản là một tổ hợp tuyến tính của các
số mũ của x.Dạng thứ 2,hàm g,là dạng phân tích thành thừa số.Nó biểu diễn nghiệm của đa thức.Tuy nhiên không phai đa thức nào cũng có nghiệm,nghĩa là có thể phân tích thành thừa số.Dạng thứ 2 là dạng Horner của đa thức.Nó rất tiện dùng để tính trị số của đa thức tại một giá trị nào đó của x
Symbolic Math Toolbox cung cấp một số hàm dùng để biến đổi các biểu thức đại số và lượng giác thành các biểu thức đơn giản hơn.Chúng gồm: collect,expand, horner, factor, simplify, và simple
x*(x*(x-6)+11)-6 x^3-6*x^2+11*x-6 (1+x)*t + x*t 2*x*t+t
b.expand:Phát biểu:
expand(f)
khai triển biểu thức.Sau đây là một số ví dụ:
f expand(f) a*(x+y) a*x+a*y
(x-1)*(x-2)*(x-3) x^3-6*x^2+11*x-6 x*(x*(x-6)+11)-6 x^3-6*x^2+11*x-6 exp(a+b) exp(a) + exp(b)
cos(x+y) cos(x)*cos(y)-sin(x)*sin(y)cos(3*acos(x)) 4*x^3-3*x
c.horner:Phát biểu:
horner(f)
biến đổi một đa thức thành dạng Horner hay biểu diễn lồng nhau.Ví dụ:
f horner(f) x^3-6*x^2+11*x-6 -6+(11+(-6+x)*x)*x
1.1+2.2*x+3.3*x^2 11/10+(11/5+33/10*x)*x
Trang 17x^3–6*x^2+11*x–5 x^3–6*x^2+11*x–5 x^6+1 (x^2+1)*(x^4–x^2+1)
§©y lµ mét vÝ dô kh¸c vÒ ph©n tÝch ®a thøc xn +1 thµnh thõa sè:
Trang 18e.simplify:Hµm simplify lµ mét hµm m¹nh,dïng rót gän c¸c biÓu thøc.Sau ®©y lµ mét sè
vÝ dô:
f simplify(f) x*(x*(x-6)+11)-6 x^3-6*x^2+11*x-6
f.simple: Hµm simple ®−a ra d¹ng ng¾n nhÊt cã thÓ cã cña mét biÓu thøc.Hµm nµy cã
nhiÒu d¹ng,mçi d¹ng tr¶ vÒ kÕt qu¶ kh¸c nhau.D¹ng:
Trang 192 Thay số: Có hai hàm dùng để thay trị là subexpr và subs
a subexpr:Lệnh :
syms a x
s = solve(x^3+a*x+1)
giải phương trình : x^3+a*x+1 = 0 theo x
Kết quả:
[ 1/6*(-108+12*(12*a^3+81)^(1/2))^(1/3)-2*a/(-108+12*(12*a^3+81)^(1/2))^(1/3)]
[ -1/12*(-108+12*(12*a^3+81)^(1/2))^(1/3)+a/(-
108+12*(12*a^3+81)^(1/2))^(1/3)+1/2*i*3^(1/2)*(1/6*(-108+12*(12*a^3+81)^(1/2))^(1/3)+2*a/(-108+12*(12*a^3+81)^(1/2))^(1/3))]
[ -1/12*(-108+12*(12*a^3+81)^(1/2))^(1/3)+a/(-108+12*(12*a^3+81)^(1/2))^(1/3)-
1/2*i*3^(1/2)*(1/6*(-108+12*(12*a^3+81)^(1/2))^(1/3)+2*a/(-108+12*(12*a^3+81)^(1/2))^(1/3))]
Dùng lệnh pretty để nhận được dạng dễ đọc hơn:
[ 1/3 a ]
[ 1/6 %1 - 2 - ]
[ 1/3 ]
[ %1 ]
[ ]
[ 1/3 a 1/2 / 1/3 a \ ]
[- 1/12 %1 + - + 1/2 i 3 | 1/6 %1 + 2 - | ]
[ 1/3 | 1/3 | ] [ %1 \ %1 / ]
[ ]
[ 1/3 a 1/2 / 1/3 a \ ]
[- 1/12 %1 + - - 1/2 i 3 | 1/6 %1 + 2 - | ]
[ 1/3 | 1/3 | ] [ %1 \ %1 / ]
3 1/2
%1 := -108 + 12 (12 a + 81)
Lệnh pretty thừa kế khái niệm %n(n là một số nguyên) từ Maple để định nghĩ biểu thức con gặp hiều lần trong đối tượng chữ.Hàm subexpr cho phép ta lưu các biểu thức con này cũng như các
đối tượng chữ được viết trong biểu thức con.Các biểu thức con được lưu trong một ma trận cột
gọi là sigma
Tiếp tục ví dụ của ta:
r = subexpr(s)
cho ta
sigma =
-108+12*(12*a^3+81)^(1/2)
r =
[ 1/6*sigma^(1/3)-2*a/sigma^(1/3)]
[ -1/12*sigma^(1/3)+a/sigma^(1/3)+1/2*i*3^(1/2)*(1/6*sigma^(1/3)+2*a/sigma^(1/3))]
Trang 20[ -1/12*sigma^(1/3)+a/sigma^(1/3)-1/2*i*3^(1/2)*(1/6*sigma^(1/3)+2*a/sigma^(1/3))]
ta thấy rằng subexpr tạo biến signma rg vùng làm việc của MATLAB
b.subs:Ta tìm giá trị riêng và vec tơ riêng của ma trận vòng A:
-(a-(b^2-b*a-[ 1, -(b-c-(b^2-b*a-c*b-c*a+a^2+c^2)^(1/2))/(a-c), c*b-c*a+a^2+c^2)^(1/2))/(a-c)]
Chú ý là các biểu thức có S không bị ảnh hưởng gì cả,nghĩa là biến a trong S không được thay
bằng 10.Hàm subs là hàm hữu ích để thay thế nhiều giá trị của nhiều biến trong một biểu
thức.Ta xem S.Giả sử ngoài việc thay a =10 ta cũng muốn thay giá trị b = 2 và c = 10 vào biểu
Trang 21t (1-t2) sech(t)
-0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
t
M P
Trang 22Đ5 Dại số tuyến tính
1 Các toán tử đại số cơ bản:Các toán tử đại số cơ bản trong các đối t−ợng chữ cũng là các
toán tử trong các đối t−ợng số của MATLAB.điều này đ−ợc minh hoạ trong ví dụ sau.Biến đổi Givens tạo ra một mặt phẳng quay một góc t.Các phát biểu:
syms t;
G = [cos(t) sin(t); -sin(t) cos(t)]
tạo ra ma trận biến đổi:
G = [ cos(t), sin(t) ]
Trang 23Điều này cho phép các toán tử kí hiệu sym(hilb(3)) trên H tạo ra kết quả tương ứng với ma trận
Hilbert có độ chính xác vô cùng,chứ không phải với độ chính xác của số thực dấu chấm
V = vpa(hilb(3))%vpa là kết quả tính chính xác theo Maple
Trang 24tạo ra ma trận rỗng và hoán vị của ma trận đơn vị
Ta tìm giá trị s của H(1,1) để làm cho H suy biến.Lệnh:
8/9 Vậy:
inv(H)
tạo ra thông báo lỗi:
Trang 25??? error using ==> inv
Error, (in inverse) singular matrix
v× H lµ ma trËn suy biÕn.Víi ma trËn nµy , Z = null(H) vµ C = colspace(H) lµ kh«ng tÇm
Trang 27và nếu factor(p) ta đ−ợc chính nó,nghĩa là đa thức đặc tính không thể phân tích thành các thừa
số là đa thức hữu tỉ.Với ma trận Rosser đã biến đổi:
Chú ý là các giá trị này gần với các giá trị của ma trận Rosser ban đầu.Hơn nữa,giá trị số của F
là kết quả của phép tính dấu chấm động của Maple
Ta cũng có thể tính các giá trị riêng của ma trận chữ,nh−ng nghiệm dạng gần nhau là rất
hiếm.Biến đổi Givens đ−ợc tạo ra nh− là luỹ thừa của ma trận ban đầu Các lệnh Symbolic Math
Trang 28combine để có kết quả cuối cùng
4 Dạng Jordan chính tắc:Dạng Jordan chính tắc xuất phát từ ý tưởng đường chéo hoá ma trận
bằng biến đổi đồng dạng.Với một ma trận đã cho A,tìm một ma trận không suy biến V,sao cho inv(V)*A*V hay ngắn gọn J = V\A*V là gần với với đường chéo.Đối với phần lớn các ma trận dạng Jordan chính tắc là ma trận đường chéo của các giá trị riêng và các cột của ma trận biến
đổi là các vec tơ riêng.Một vài ma trận không đối xứng không thể đường chéo hoá.Dạng Jordan
có các giá trị riêng trên đường chéo nhưng một số phần tử phía trên là 1 thay vì 0.Phát biểu:
Trang 30Do các phần tử của ma trận A là tỉ số của hai số nguyên nhỏ nhất,vpa(A) tạo ra một biểu diễn
có độ chính xác thay đổi.Do vậy:
S = svd(vpa(A))
tính toán các giá trị kì dị với độ chính xác rất cao.Với n = 16 và digits(3) ta có kết quả:
S =
[ 1.20968137605668985332455685357 ] [ 2.69162158686066606774782763594 ] [ 3.07790297231119748658424727354 ] [ 3.13504054399744654843898901261 ] [ 3.14106044663470063805218371924 ] [ 3.14155754359918083691050658260 ] [ 3.14159075458605848728982577119 ] [ 3.14159256925492306470284863102 ] [ 3.14159265052654880815569479613 ] [ 3.14159265349961053143856838564 ] [ 3.14159265358767361712392612384 ] [ 3.14159265358975439206849907220 ] [ 3.14159265358979270342635559051 ] [ 3.14159265358979323325290142781 ]