Tải bản đầy đủ (.doc) (39 trang)

phần II Matlab symbolic

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 (288.77 KB, 39 trang )

phần II
Matlab symbolic
Chương 1 Khởi tạo đối tượng symbolic.
1.1 Mở đầu.
1.2 Khởi tạo các đối tượng symbolic.
1.3
Chương 2 Đại số và giải tích.
2.1 Giải (hệ) phương trình đại số.
2.2 Giải tích toán học.
2.3 Giải (hệ) phương trình vi phân.
2.4 Chuỗi số và tính tổng.
2.5 Đại số tuyến tính.
2.6 Phép biến đổi Laplace, Fourier, Z.
2.7 Sử dụng các hàm Maple.
Vô hướng kí hiệu (symbolic scalar)
Vector kí hiệu (symbolic vector)
Ma trận kí hiệu (symbolic m trix)
Chương 1
Khởi tạo đối tượng symbolic.
1.1 Mở đầu.
Symbolic là toolbox được thiết kế cho ứng dụng toán học xử lý các phép toán
biểu thức kí hiệu (symbol expressions) trong môi trường Matlab. Phương tiện tính
toán của Symbolic dựa trên hạt nhân (kernel) Maple
â
, phát triển đầu tiên tại trường đại
học Waterloo, Canada , và gần đây Eidgenửssiche Technische Hochschule, Zỹrich,
Switzerland. Maple được thương mại và cung cấp bởi công ty Waterloo Maple, Inc.
Symbolic có 2 toolbox. Toolbox phép toán kí hiệu cơ bản, bao gồm hơn 100
hàm Matlab dựa trên lõi Maple:
-Các phép tính vi phân, tích phân, giới hạn, tổng chuỗi và chuỗi Taylor.
-Đại số tuyến tính: Dạng đảo, định thức, trị riêng, phân tích giá trị suy biến


(singular value decomposition) và các dạng chuẩn tắc của ma trận kí hiệu.
-Các phương pháp đơn giản hoá biểu thức đại số.
-Giải hệ phương trình.
-Độ chính xác số học yêu cầu (VPA:Variable-Precision Arithmetic).
-Ước lượng phương pháp số cho biểu thức toán học với độ chính xác tuỳ ý.
-Các phép biến đổi Fourier, Laplace, biến đổi Z và các phép biến đổi ngược.
-Các hàm toán học đặc biệt.
-Các hàm đặc biệt cho toán ứng dụng cổ điển.
toolbox cơ bản cũng cho phép sử dụng các hàm trong tổ hợp (package) đại số tuyến
tính trong Maple. Thứ hai là Toolbox mở rộng cho phép sử dụng các tổ hợp
(packages) không sử dụng đồ hoạ, các đặc tính lập trình và các thủ tục (uer-
Page 1 of 39
procedures) trong Maple. Cả hai toolbox đều cho phép viết các m-files sử dụng các
hàm và không gian làm việc (workspace) của Maple.
1.2 Khởi tạo các đối tượng symbolic
Đối tượng symbolic là kiểu dữ liệu phục vụ cho các phép toán biểu thức kí
hiệu. Toolbox Symbolic định nghĩa kiểu dữ liệu này là kiểu sym, là kiểu cấu trúc dữ
liệu kiểu xâu kí tự biểu diễn các kí hiệu. Toolbox Symbolic sử dụng các đối tượng
sym để biểu diễn các biến, các biểu thức và các ma trận.
1.2.1 Tạo các biến Symbolic và biểu thức.
Câu lệnh sym, syms dùng để tạo các biến symbolic và biểu thức.
Cú pháp của sym:
s=sym(str); xây dựng đối tượng s, lớp sym, từ đối số str. Nếu đối số vào là xâu kí tự, trả lại số hoặc
biến kí hiệu. Nếu đối số vào là ma trận số hoặc vô hướng, trả lại biểu diễn kí hiệu của các giá trị
số.
x=sym('x'); tạo biến kí hiệu có tên 'x' được lưu trong x.
x=sym('x','real'); tạo biến kí hiệu có tên 'x', với x là thực, với biến này conj(x) bằng x.
k=sym('x','poisitive'); tạo biến k (thực) dương.
x=sym('x','unreal'); tạo biến x là biến hình thức thuần tuý, có thể dương, âm
pi=sym('pi') và dt=sym('1/10'); tạo các số kí hiệu để tránh sai số vốn có của các số dấu phẩy động

của các giá trị pi và 1/10. Biến pi tạo theo cách này sẽ thay thế tạm thời hàm built-in pi.
x=sym(A,flag); chuyển các ma trận số hoặc vô hướng về dạng số kí hiệu. Chuyển số phảy
động theo lựa chọn ở đối số flag, các giá trị của flag có thẻ là: 'f', 'r', 'e' hay 'd', mặc định là
'r'.
'f' tương ứng cho số phảy động. Tất cả các gía trị được biểu diễn theo dạng '1.F'*2(e) hoặc '-
1F'*2(e) với F là xâu kí tự 13 chữ số hệ thập lục và e là số nguyên. Điều này giữ cho các
giá trị dấu phảy động được chính xác, nhưng không tiện lợi cho các tính toán sau này. Ví
dụ, sym('1/10') là '1.999999999999a'*2^(-4) do 1/10 không biểu diễn chính xác theo dấu
phảy động.
'r' tương ứng với phân số. Các số phảy động nhận từ tính toán biểu thức dạng p/q, p*pi/q,
sqrt(p), 2^q và 10^q được đổi theo dạng kí hiệu các số nguyên có độ lớn vừa phải p và q.
Kết quả này ảnh hưởng đến phần bù lỗi làm tròn khi ước lượng giá trị gốc, có thể không
biểu diễn giá trị dấu phảy động được chính xác. Nếu không có dạng phân số xấp xỉ đơn
giản, biểu thức dạng p*2^q được phát sinh biểu diễn số phảy động được chính xác. Ví dụ
sym('4/3','r') là '4/3', còn sym('1+sqrt(5)','r') là 7286977268806824*2^(-51).
'e' tương ứng cho sai số ước lượng. Dạng 'r' được bù bằng số hạng chứa biến 'eps' để ước
lượng sai lệch giữa biểu thức phân số lý thuyết và giá trị dấu phẩy động thực tế. Ví dụ,
sym(3*pi/4) là 3*pi/4-103*eps/249
'd' tương ứng với thập phân. Số chữ số được lấy từ thiết lập mặc định của digits và được sử
dụng bởi vpa. Số có ít hơn 16 chữ số sẽ giảm ít độ chính xác, còn các số có hơn 16 chữ số
không được đảm bảo. Ví dụ digits(10), sym('4/3','d') là 1.333333333, còn digits(20),
sym(4/3,'d') is 1.3333333333333332593, không kết thúc với toàn số 3, nhưng là số thập phân
chính xác biểu diễn số phảy động gần nhất của 4/3.
Ví dụ:
A = hilb(3) %Sinh ma trận hilbert 3x3
A =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
Page 2 of 39

Chuyển A về đối tương sym.
A = sym(A) %Nhận được ma trận chính xác Hilbert 3x3
A =
[ 1, 1/2, 1/3]
[ 1/2, 1/3, 1/4]
[ 1/3, 1/4, 1/5]
syms -hàm xây dựng các đối tượng sym.
syms arg1 arg2 là cách viết gọn thay cho
arg1 = sym('arg1');
arg2 = sym('arg2');
syms arg1 arg2 real là cách viết gọn thay cho
arg1 = sym('arg1','real');
arg2 = sym('arg2','real');
syms arg1 arg2 positive là cách viết gọn thay cho
arg1 = sym('arg1','positive');
arg2 = sym('arg2','positive');
syms arg1 arg2 unreal là cách viết gọn thay cho
arg1 = sym('arg1','unreal');
arg2 = sym('arg2','unreal');
Yêu cầu tên các đối số phải bắt đầu bằng kí tự chữ kiểu biến.
syms x beta real tương tự
x = sym('x','real');
beta = sym('beta','real');
syms k positive tương tự
k = sym('k','positive');
Để xoá bỏ thuộc tính 'real' hay 'positive', sử dụng lệnh
syms x beta unreal
Các ví dụ:
Xét tỉ số vàng:
ằ rgold = sym('(1 + sqrt(5))/2')

rgold =
(1 + sqrt(5))/2
ằ f = rgold^2 - rgold - 1
f =
(1/2+1/2*5^(1/2))^2-3/2-1/2*5^(1/2)
ằ simple(f)
ans =
0
Xét hàm bậc 2 dạng f(x)=ax
2
+b*x+c, lệnh:
f=sym('a*x^2+b*x+c');
sẽ gán cho f biểu thức ax
2
+bx+c. Tuy nhiên, Toolbox này không tạo ra các biến tương ứng
với các số hạng trong biểu thức a, b, c và x. Để tính toán trên f (như lấy tích phân, đạo hàm,
phép thế ), cần phải khởi tạo các biến này. Tạo các biến đó như sau:
a = sym('a')
b = sym('b')
c = sym('c')
x = sym('x')
hay
syms a b c x
a. Tính toán với số thập phân có độ chính xác tuỳ ý.
Matlab cung cấp 2 hàm cho phép xác định số chữ số thập phân của biến sym.
Page 3 of 39
digits-Đặt số lượng chữ số thập phân chính xác cho tính toán phương pháp số của Maple.
digits trả về xác lập số chữ số Digits hiện dùng. Mặc định bằng Digits=32.
digits(D) đặt Digits=D cho các tính toán tiếp theo. D là số nguyên, hoặc xâu kí tự
hoặc biến sym biểu diễn số nguyên.

D=digits trả lại xác lập của số chữ số hiện dùng.
vpa -Độ chính xác số học yêu cầu, trả về xâu kí tự biểu diẽn số.
r=vpa(s) ước lượng giá trị số cho các phần tử của của ma trận s , sử dụng số học dấu
phẩy động chính xác yêu cầu với D chữ số chính xác, với D là số chữ số hiện hành
xác định bới digits, kết quả r là biến sym.
vpa(s,D) sử dụng D chữ số thay cho xác lập của Digits. D là sô nguyên hoặc biến
sym biểu diễn số nguyên.
double(s) -Chuyển kí hiệu dạng số (numeric symbolic) vè số thực double.
Ví dụ:
vpa(pi,780) %cho thấy
6 chữ số 9 liên tiếp từ số thập phân thứ 770 của khai triển số pi.
vpa(sqrt(2),50)
ans =
1.4142135623730950488016887242096980785696718753769
double(sym('8!')%Trả về giá trị 8!
ans =
40320

b. Biến kí hiệu thực và phức.
Câu lệnh sym cho phép thiết lập thuộc tính biến kí hiệu là giá trị thực (real)
hoặc dương (positive) hoặc tuỳ ý.
Các câu lệnh:
x=sym('x','real');
y=sym('y','real');
z=sym('z');
u=sym('u');
z=x+i*y;
p=sym('p','positive');
conj(x),conj(y),conj(z),conj(u),abs(z),
abs(u), abs(p)

ans =
x
ans =
y
ans =
x-i*y
ans =
conj(u)
abs(z)
ans =
(x^2+y^2)^(1/2)
ans =
abs(u)
ans =
p
c. Biến hàm kí hiệu trìu tượng.
Khi muốn tạo hàm trìu tượng, sử dụng câu lệnh:
f=sym('f(x)')
f sẽ đóng vai trò như hàm f(x), được sử dụng nhiều trong toolbox này. Để tính đạo
hàm cấp 1, ta sử dụng câu lệnh"
df = (subs(f,'x','x+h') - f)/'h'
hoặc
syms x h
df=(subs(f,'x','x+h') - f)/h
trả lại
Page 4 of 39
df=(f(x+h)-f(x))/h
Các hàm trìu tượng ứng dụng trong các phép tính cho biến đổi Fourier, Laplace
và biến đổi Z.
d. Sử dụng sym để truy nhập các hàm Maple.

Có thể sử dụng hàm tính giai thừa k! trong Maple như sau:
kfac=sym('k!')
để tính 7! và n! , ta có lệnh:
syms k n
subs(kfac,k,7),subs(kfac,k,n)
ans =
5040
ans =
n!
e. Tạo ma trận kí hiệu.
Ma trận vòng là ma trận có hàng tiếp theo nhận từ ma trận trước bằng phép dịch
các phần tử đi một bước. Ví dụ tạo ma trận hoán vị A có các phần tử a, b và c như
sau:
syms a b c
A=[a b c;b c a;c a b]
A =
[ a, b, c ]
[ b, c, a ]
[ c, a, b ]
Ma trận vòng có tổng các hàng và tổng các cột bằng nhau.Kiểm tra tính chất này
cho hàng và cột đầu tiên.
sum(A(1,:),sum(A(:,1))
ans =
a+b+c
ans =
a+b+c
sum(A(1,:)) == sum(A(:,2)) % Kiểm tra logic.
ans =
1
Thay thế các phần tử a, b của A bằng các biến kí hiệu alpha, beta.

syms alpha beta;
A(2,3) = beta;
A = subs(A,b,alpha)
A =
[ a, alpha, c]
[ alpha, c, beta]
[ c, a, alpha]
f. tìm kiếm các biến trong biểu thức.
Matlab cung cấp hàm findsym để tìm các biến trong biểu thức hoặc ma trận kí
hiệu.
findsym(s) -Với biến s lầ các vô hướng hoặc ma trận dạng sym, hàm findsym trả về xâu
kí tự của tất cả các biến trong s. Các biến trả về được sắp theo thứ tự bảng chữ cái và phân
cách nhau bởi dấu phảy. Nếu không có biến sym trong biểu thức nó trả về xâu kí tự trống.
Page 5 of 39
findsym(s,n) -Trả về n biến gần chữ cái 'x'.
Ví dụ:
findsym(alpha+a+b) trả về a, alpha, b
findsym(cos(alpha)*b*x1 + 14*y,2) trả về xâu x1,y
findsym(y*(4+3*i) + 6*j) trả về y

1.2.2 Các phép biểu diễn biểu thức kí hiệu.
Toolbox symbolic cung cấp một số hàm biểu diễn các biểu thức số học.
sử dụng pretty để in ra màn hình biểu thức sym.
pretty(S) -in biểu thức sym S thành khuôn dạng kiểu toán học thông thường.
pretty(S,n) -sử dụng màn hình có chiều rộng n thay cho màn hình mặc định là 79.
ví dụ:
pretty(sym('(x^2-4*y^2-x+y)*exp(-x^2-y^2)'))

2 2 2 2
(x~ - 4 y~ - x~ + y~) exp(-x~ - y~ )

Các hàm ezplot ,ezplot3 ,ezmesh, ezsurf cho phép biểu diễn các các hàm 1, 2 biến lên màn
hình đồ hoạ.
syms x y;
bt1=1.23*x^3-2*x^2+x-1.33;
bt2=x*exp(-x^2-y^2);
ezplot(bt1,[-2 2]);
ezmesh(bt2,[-2 2 -3 3]);
ezsurf((x^2-y^2)*cos(x+2*y),[-pi pi -pi/2 pi/2]);
1.2.3 Các phép biến đổi số học đơn giản.
a. Phép thay thế.
subs -Thay thế biểu thức kí hiệu bằng biểu thức kí hiệu khác.
subs(s) - Thay thế tất cả các biến trong biểu thức s bằng giá trị nhận từ các hàm
được gọi và trong workspace.
subs(s,new) -Thay thế các biến tự do trong s bằng new.
subs(s,old,new) -Thay thế biểu thức old bằng biểu thức new trong biểu thức s. old là biến kí
hiệu, xâu kí tự biểu diễn tên biến, hoặc biểu thức xâu kí tự. new là biến kí hiệu hoặc biến
giá trị hoặc biểu thức. Nếu old và new là mảng khối có cùng kích thước sẽ thay thế tương
ứng các phần tử của new cho old. Nếu s và old là các vô hướng và new là mảng hoặc
mảng khối, các vô hướng được khai triển để sinh mảng kết quả. Nếu new là mảng khối
các ma trận số, các phép thế được thực hiện cho từng phần tử (ví dụ: subs(x*y,{x,y},
{A,B}) trả lại A.*B khi A và B là các ma trận số).
Khi subs(s,old,new) không thay đổi s, thì subs(s,new,olld) được dùng. Điều này đưa ra
tính tương thích ngược với các phiên bản trước đây và nó kử trật tự thứ tự các đối số. Câu
lệnh subs(s,old,new,0) không chuyển các đối số khi s không bị thay đổi.
Ví du:
a = 980;
C1 = 3;
Câu lệnh y = dsolve('Dy = -a*y')
sẽ cho kết quả y = exp(-a*t)*C1
khi đó câu lệnh

subs(y) cho ta ans = 3*exp(-980*t)
Phép thế đơn:
syms a b t;
Page 6 of 39
subs(a+b,a,4) trả lại 4+b.
Phếp thế đa biến:
subs(cos(a)+sin(b),{a,b},{sym('alpha'),2}) trả lại cos(alpha)+sin(2)
Khai triển vô hướng đơn:
subs(exp(a*t),'a',-magic(2)) trả về
[ exp(-t), exp(-3*t)]
[ exp(-4*t), exp(-2*t)]
Khai triển nhiều biến theo trị vô hướng :
subs(x*y,{x,y},{[0 1;-1 0],[1 -1;-2 1]}) trả lại
[ 0, -1]
[ 2, 0]
subexpr -Viết lại theo nhóm số hạng chung của các biểu thức.
[y,sigma] = subexpr(X,sigma) hay [Y,sigma] = SUBEXPR(X,'sigma') viết lại biểu thức X
theo các nhóm số hạng chung.
Example:
t = solve('a*x^3+b*x^2+c*x+d = 0');
[r,s] = subexpr(t,'s'); %t=s*r;
r =
[ 1/6/a*s^(1/3)-2/3*(3*c*a-b^2)/a/s^(1/3)-1/3*b/a]
[ -1/12/a*s^(1/3)+1/3*(3*c*a-b^2)/a/s^(1/3)-
1/3*b/a+1/2*i*3^(1/2)*(1/6/a*s^(1/3)+2/3*(3*c*a-b^2)/a/s^(1/3))]
[ -1/12/a*s^(1/3)+1/3*(3*c*a-b^2)/a/s^(1/3)-1/3*b/a-
1/2*i*3^(1/2)*(1/6/a*s^(1/3)+2/3*(3*c*a-b^2)/a/s^(1/3))]
s =
36*c*b*a-108*d*a^2-8*b^3+12*3^(1/2)*(4*c^3*a-c^2*b^2-
18*c*b*a*d+27*d^2*a^2+4*d*b^3)^(1/2)*a

b. Phép đơn giản biểu thức.
simple -Tìm dạng biểu thức dơn giản nhất cho biểu thức và ma trận kí hiệu.
simple(s) -Thử các phương pháp đơn giản hoá đại số khác nhau của s và trả về (hiển thị
các kết quả rút gọn cacs phương pháp) dạng có chiều dài ngắn nhất đối với s là biến sym.
Khi s là ma trận, kết quả là dạng ngắn nhất của cả ma trận, không phải mỗi phần tử riêng
có dạng ngắn nhất.
[r,how]=simple(s)- Không hiển thị các phép biến đổi trung gian, và trả lại dạng đơn giản
ngắn nhất tìm được, r là biến sym, how là xâu kí tự phép biến đổi.
Ví dụ:
s r how
cos(x)^2+sin(x)^2 1 combine(trig)
2*cos(x)^2-sin(x)^2 3*cos(x)^2-1 simplify
cos(x)^2-sin(x)^2 cos(2*x) combine(trig)
cos(x)+(-sin(x)^2)^(1/2) cos(x)+i*sin(x) radsimp
cos(x)+i*sin(x) exp(i*x) convert(exp)
(x+1)*x*(x-1) x^3-x collect(x)
x^3+3*x^2+3*x+1 (x+1)^3 factor
cos(3*acos(x)) 4*x^3-3*x expand
syms x y positive
log(x) + log(y)
log(x*y) combine
Page 7 of 39
symplify Đơn giản hoá biểu thức.
symplify(s) Đơn giản hoá biểu thức s về dạng đơn giản nhất, không như simple đưa về
dạng ngắn nhất.
Ví dụ:
simplify(sin(x)^2 + cos(x)^2) trả lại 1 .
simplify(exp(c*log(sqrt(alpha+beta)))) là (alpha+beta)^(1/2*c)
syms x y positive
simplify(log(x) + log(y)) trả về log(x)+log(y)


c. Các hàm khai triển.
Hàm khai triển các tích thừa số về tổng luỹ thừa các thừa số chung.
expand(s) -Ghi mỗi phần tử của biểu thức s thành tổng của luỹ thừa các thừa số chung.
expand sử dụng nhiều cho các hàm đa thức, được sử dụng khai triển hàm lượng giác, hàm
mũ và hàm logarit.
Ví dụ:
v = [exp(x + y) log(x^2/y)]
expand((x+1)^3) ttrả về x^3+3*x^2+3*x+1
expand(sin(x+y)) trả lại sin(x)*cos(y)+cos(x)*sin(y)
expand(v) trả về [exp(x)*exp(y), 2*log(x)-log(y)]
Hàm khai triển biểu thức về dạng tích các thừa số nguyên tố.
factor(s) -Phân tích ma trận s thành tích các thừa số của s. Nếu s chứa toàn số nguyên,
các phần tử sẽ được tính là tích các thừa số nguyên tố. Để phân tích số nguyên tố lớn hơn
2^52, sử dụng factor(sym('n')).
Ví dụ:
factor(x^9-1) là tích
(x-1)*(x^2+x+1)*(x^6+x^3+1)
factor(sym('12345678901234567890')) là tích
(2)*(3)^2*(5)*(101)*(3803)*(3607)*(27961)*(3541)
Hàm nhóm các thừa số chung.
collect(s,v) -Nhóm các số hạng theo đa thức v của các phần tử ma trận kí hiệu s và biểu diễn
s theo các số hạng là luỹ thừa của v.
collect(s) -sử dụng biến mặc định xác định bởi hàm findsym.
Ví dụ:
collect(x^2*y + y*x - x^2 - 2*x) trả về (y-1)*x^2+(y-2)*x
f = -1/4*x*exp(-2*x)+3/16*exp(-2*x)
collect(f,exp(-2*x)) trả về (-1/4*x+3/16)*exp(-2*x)
d. Một số biến đổi đơn giản khác.
Symbolic cung cấp hàm numden cho phép ta xác định phân thức và mẫu thức kí

hiệu. Hàm numden(s) chuyển phân số trong s thành dạng các đa thức nguyên tố hệ số
hằng.
Ví dụ:
[n,d]=numden(x/y+y/x) trả về n=x^2+y^2, d=y*x
[n,d]=numden(sym('4/7') trả về n=4, y=7
Để biểu diễn đa thức về dạng Horner, sử dụng hàm horner(P) để biến đổi đa thức
P về dạng horner hoặc lồng nhau.
Page 8 of 39
Ví dụ:
p=horner(x^3-6*x^2+11*x-6) trả về p=x*(x*(x-6)+11)-6
p=horner(x^5-5*x^3) trả về p=(-5+x^2)*x^3
Chuyển đổi dạng biểu thức sym sang dạng xâu kí tự:
syms x y;
bt1=1.23*x^5-2*x^2+x-1.33;
bt2=x*exp(-x^2-y^2);
bt3=char(bt2)
trả lại bt3='x*exp(-x^2-y^2)'
Chuyển đổi dạng biểu thức sym sang xâu kí tự được vector hoá:
bt4=vectorize(bt2)
trả lại bt4='x.*exp(-x.^2-y.^2)'
Chuyển đa thức dạng kí hiệu về vector các hệ số của đa thức, và ngược lại.
a=sym2poly(bt1) %Chuyển đa thức dạng kí hiệu về vector hệ số của nó.
trả về a = [ 1.2300 0 0 -2.0000 1.0000 -1.3300]
a=[1 -2 0 0 .5];
Ps=poly2sym(a) %Chuyển các hệ số đa thức về biến kí hiệu
trả về Ps = x^4-2*x^3+1/2
Chuyển thức số dạng kí hiệu về số double
a=sym('sqrt(3)-1') trả về a = sqrt(3)-1
av=double(a) trả về av= 0.7321
as=sym(av,'d') trả về as =.732105080756887730419890658595250

Page 9 of 39
chương II
Đại số và giải tích
2.1 Giải (hệ) phương trình.
Matlab đưa ra hàm solve cho phép tìm các nghiệm của phương trình và hệ
phương trình.







=
=
=
0)Nvar, ,2var,1(varrNexp

0)Nvar, ,2var,1(var2rexp
0)Nvar, ,2var,1(var1rexp
Cú pháp :
solve(expr1,expr2, ,exprN,var1,var2, varN) or
solve(expr1,expr2, ,exprN) Tìm các nghiệm hệ phương trình kí hiệu.
Với eprk là biểu thức kí hiệu phương trình thứ k. vark là các biến kí hiệu hoặc
xâu kí tự xác định các ẩn số. solve tìm kiếm các không điểm của các biểu thức. Nếu
không chỉ định các ẩn, các ẩn được xác định bởi hàm findsym,
Nếu không xác định được các không điểm giải tíchvà số phương trình bằng số
ẩn (số biến độc lập), lời giải số (numeric solution) sẽ được thử.
Có 3 kiểu biến ra khác nhau cuả hàm solve. Đối với phương trình có 1 biến ra là
nghiệm tìm được, khi có nhiều không điểm (zeros) sẽ trả về vector kí kí hiệu. Với hệ

phương trình có số phương trình bằng số nghiệm, biến ra (nghiệm tìm được) được
sắp xếp theo thứ tự chữ cái tên biến. Đối với hệ phương trình và chỉ có 1 biến ra,
solve trả về biến cấu trúc chứa các không điểm.
Ví dụ:
Các không điểm của đa thức:
solve('x^2-x-6') cho các nghiệm
ans =
[ -2]
[ 3]
Các nghiệm của hệ phương trình:
[X,Y] = solve(x+y-1, x-y-2) cho các nghiệm
X = 3/2
Y = -1/2
Hệ có tham số:
syms x y z t;
S = solve(t*x+z*y-1, 2*t*x-3*z*y+2, t, z) trả về các nghiệm
S.t =
1/5/x
S.z =
4/5/y
Giải phương trình phi tuyến: log(x
2
-1)=a;
syms x a;f=sym('log(x^2-1)=a') ;
solve(f,x) trả về nghiệm có dạng
ans =
[ (exp(a)+1)^(1/2)]
[ -(exp(a)+1)^(1/2)]
Page 10 of 39
Giải hệ phương trình:






=+−
=−
=+
06a5a
1vu
0vau
2
22
[a,u,v]=solve('a*u^2+v^2','u-v=1','a^2-5*a+6','a,u,v') trả về hệ nghiệm kí hiệu số sau
a =
[ 2]
[ 2]
[ 3]
[ 3]
u =
[ 1/3+1/3*i*2^(1/2)]
[ 1/3-1/3*i*2^(1/2)]
[ 1/4+1/4*i*3^(1/2)]
[ 1/4-1/4*i*3^(1/2)]
v =
[ -2/3+1/3*i*2^(1/2)]
[ -2/3-1/3*i*2^(1/2)]
[ -3/4+1/4*i*3^(1/2)]
[ -3/4-1/4*i*3^(1/2)]
da=double(a);du=double(u);dv=double(v);da,du,dv %hàm numvar=double(symvar)

chuyển biến kí kiệu dạng số về số thực độ chính xác kép.
da =
2
2
3
3
du =
0.3333 + 0.4714i
0.3333 - 0.4714i
0.2500 + 0.4330i
0.2500 - 0.4330i
dv =
-0.6667 + 0.4714i
-0.6667 - 0.4714i
-0.7500 + 0.4330i
-0.7500 - 0.4330i
Giải phương trình ax
2
+bx+c=0:
syms a b c x
S = a*x^2 + b*x + c;
solve(S)
ans =
[1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[1/2/a*(-b-(b^2-4*a*c)^(1/2))]
Nếu muốn giải đối với biến nào đó, phải chỉ định biến ở đối số thứ 2, ví dụ giải
với biến b sử dụng câu lệnh :
b = solve(S,b) trả về b =-(a*x^2+c)/x
2.2 Giải tích toán học.
a. Hàm hợp và hàm ngược.

Matlab cung cấp hàm finverse và compose để tìm hàm ngược và hàm hợp của
các hàm sơ cấp.
Cú pháp:
g = finverse(f) Trả về hàm ngược của hàm f. f là hàm kí hiệu chỉ có đúng
1 biến, chẳng hạn 'x'. Khi đó g là biến kí hiệu thỏa mãn g(f(x))=x.
g = finverse(f,v) Trả về hàm ngược của hàm f, theo biến độc lập cho bởi v.
Sử dụng dangh này khi hàm f có nhiều tham số.
Ví dụ:
finverse(1/tan(x)) trả về atan(1/x).
f = x^2+y;
finverse(f,y) trả về -x^2+y.
finverse(f) trả về (-y+x)^(1/2) và lời cảnh báo hàm ngược không duy nhất.
Cú pháp:
compose(f,g) trả lại hàm f(g(y)) với f = f(x) and g = g(y). Với x, y là biến kí
hiệu của f, g được findsym xác định.
compose(f,g,z) Trả lại hàm hợp f(g(z)) với f = f(x), g = g(y), và x,y là các biến
kí hiệu của f, g được hàm findsym xác định.
Page 11 of 39
compose(f,g,x,z) Trả về hàm hợp f(g(z)) và coi x là biến độc lập của f. Do đó,
nếu f = cos(x/t), thì compose(f,g,x,z) trả về cos(g(z)/t) còn compose(f,g,t,z) trả lại
cos(x/g(z)).
compose(f,g,x,y,z) Trả về hàm hợp f(g(z)) và coi x là biến độc lập của f và y
là biến độc lập của g. Với hàm f = cos(x/t) và g = sin(y/u), compose(f,g,x,y,z) trả về hàm
cos(sin(z/u)/t), còn compose(f,g,x,u,z) trả về hàm cos(sin(y/z)/t).

Ví dụ:
syms x y z t u;
f = 1/(1 + x^2); g = sin(y); h = x^t; p = exp(-y/u);
compose(f,g) trả lại 1/(1+sin(y)^2)
compose(f,g,t) trả lại 1/(1+sin(t)^2)

compose(h,g,x,z) trả lại sin(z)^t
compose(h,g,t,z) trả lại x^sin(z)
compose(h,p,x,y,z) trả lại exp(-z/u)^t
compose(h,p,t,u,z) trả lại x^exp(-y/z)
b. Phép tính giới hạn.
Sử dụng hàm limit để tìm giới hạn của biểu thức kí hiệu.
Cú pháp:
limit(F,x,a) Lấy giới hạn biểu thức kí hiệu F khi x->a.
limit(F,a) Sử dụng findsym(F) để tìm biến độc lập và tìm giới hạn.
limit(F) Tìm giới hạn với a = 0.
limit(F,x,a,'right') hoặc limit(F,x,a,'left') Xác định hướng lấy giới hạn.
Biểu thức toán học Câu lệnh matlab
)x(flim
0x→
limit(f)
)x(flim
ax→
limit(f,x,a) hoặc limit(f,a)
)x(flim
ax


limit(f,x,a,'left')
)x(flim
ax
+

limit(f,x,a,'right')
)x(flim
x −∞→

limit(f,x,-inf,'right')
)x(flim
x +∞→
limit(f,x,inf,'left')
h
)x(f)hx(f
lim
0h
−+

limit((subs(f,x,x+h)-f)/h,h,0)
Ví dụ:
syms x a t h;
limit(sin(x)/x) trả về 1
limit((x-2)/(x^2-4),2) trả về 1/4
limit((1+2*t/x)^(3*x),x,inf) trả về exp(6*t)
limit(1/x,x,0,'right') trả về inf,
limit(1/x,x,0,'left') trả về -inf
limit((sin(x+h)-sin(x))/h,h,0) trả về cos(x)
v = [(1 + a/x)^x, exp(-x)];
limit(v,x,inf,'left') trả về [exp(a), 0]
Page 12 of 39
Ví dụ: Tìm tiệm cận xiên của hàm
1x2
1x5x
)x(f
2
+
++
=

khi x->±∞.
syms x;
f=(x^2+5*x+1)/(2*x+1);
ap=limit(f/x,x,inf,'left')
bp=limit(f-ap*x,x,inf,'left')
an=limit(f/x,x,-inf,'right')
bn=limit(f-an*x,x,-inf,'right')
x->+∞
ap =
1/2
bp =
9/4
tcx1=ap*x+bp
x->-∞
an =
n =
1/2
bn =
9/4
tcx2=an*x+bn
Ví dụ:Tìm giới hạn của biểu thức sau:
)bxsin(
1e
lim
xa
0x


syms a b x
ằ lim=limit((exp(a*sqrt(x))-1)/(sqrt(sin(b*x))),x,0)

lim =
a/b^(1/2
c. Phép tính đạo hàm.
Tính đạo hàm của biểu thức kí hiẹu sử dụng hàm diff.
Cú pháp:
diff(s) -Tính đạo hàm biểu thức kí hiệu s theo biến tự do xác định bởi
hàm findsym.
diff(s,'v') hay
diff(s,sym('v')) -Đạo hàm s theo v.
diff(s,n) -Với n là số nguyên dương, đạo hàm s n lần.
diff(s,'v',n) và diff(s,n,'v') đều được chấp nhận.
Matlab đưa ra hàm jacobian trả về ma trận jacobian của n hàm m biến, với các
phần tử là các đạo hàm riêng.
Cú pháp:
jacobian(f,v) -Tính Jacobian của vô hướng hay vector f theo các biến riêng
trong vector v. Với ma trận có các phần tử (i,j) là đạo hàm riêng df(i)/dv(j). Lưu ý, khi
f là vô hướng, Jacobian của f là gradient của f. Tương tự v có thể là vô hướng, khi đó
nó tương tự diff(f,v). Chú ý, nếu đối số đầu f nếu là vector cột, đối số thứ 2 v phải là
vector hàng,. Hơn nữa, khi định thức của Jacobian có biểu thức lượng giác phức tạp,
nên sử dụng câu lệnh simple để thay thế và rút gọn.
Ví dụ :
x = sym('x');
t = sym('t');
syms a y z u v;
diff(sin(x^2)) cho ta 2*cos(x^2)*x
diff(t^6,6) cho kết quả 720.
A = [cos(a*x),sin(a*x);sin(a*x),cos(a*x)]
sẽ cho ma trận
A =
[ cos(a*x), sin(a*x)]

Page 13 of 39
[ sin(a*x), cos(a*x)]
dy = diff(A)
trả lại
dy =
[ sin(a*x)*a, cos(a*x)*a]
[ cos(a*x)*a, sin(a*x)*a]
jacobian([x*y*z; y; x+z],[x y z]) -> [ y*z, x*z, x*y]
[ 0, 1, 0]
[ 1, 0, 1]
jacobian(u*exp(v),[u;v]) -> [ exp(v), u*exp(v)]
Xét biến đổi từ không gian Euclidean (x,y,z) sang toạ độ cầu (r,) cho bởi
công thức biến đổi x=rcoscos, y = r cossin, và z=rsin. Chý ý,tương
ứng với góc nâng (elevation or latitude ) và là góc phương vị (azimuth or longitude).
Để xác định ma trận Jacobian, J, của biến đổi này, sử dụng hàm jacobian, dạng toán
học của J là:
),,r(
)z,y,x(
J
ϕλ∂

=
Sử dụng kí hiệu l cho  và f cho , ta có:
syms r l f;
x = r*cos(l)*cos(f); y = r*cos(l)*sin(f); z =
r*sin(l);
J = jacobian([x; y; z], [r l f])
Trả về jacobian J
J =
[ 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)]
[ sin(l), r*cos(l), 0 ]
và câu lệnh
detJ = simple(det(J))
trả lại
detJ =
cos(l)*r^2
Ta có bảng tổng kết so sánh giữa diff và jacobian.
Biểu thức toán học Câu lệnh Matlab
f(x)=exp(ax+b) syms a b x;
f=exp(a*x+b)
dx
df
diff(f) hoặc diff(f,x)
da
df
diff(f,a)
2
2
da
fd
diff(f,b,2)
f
bx ∂



diff(diff(f,b),x)
r=u
2

+v
2
t=arctan(v/0u
syms r t u v;
r=u^2+v^2;
t=atan(v/u);
Page 14 of 39
Hoàng Việt
)v,u(
)t,r(
J


=
J=jacobian([r;t],[u,v])
d. Phép tính tích phân.
Tính tích ohân của biểu thức kí hiệu, sử dụng hàm int.
Cú pháp:
int(s) -Tính tích phân bất định của biểu thức s theo biến xác định bởi
findsym. s là biến sym (ma trận hoặc vô hướng). Nếu s là hằng số, tính phân
theo biến số 'x'.
int(s,v) -Tính tích phân bất định của s theo biến v, v là vô hướng hoặc
sym.
int(s,a,b) -Tính tích phân xác định của s theo biến biến đổi từ a đến b. a và b
là các số thực kép hoặc các vô hướng kí hiệu.
int(s,v,a,b) -Tính tích phân xác định của s theo biến v biến đổi từ a
đến b.
Biểu thức toán học Câu lệnh Matlab
f(x)=e
-kx


dx)x(f
syms k x a b;
f=exp(-k*x)
int(f) hoặc int(f,x)

dk)k(f
int(f,k)

b
a
dx)x(f
a, b có thể âm, dương, -inf, inf, kí hiệu.
int(f,a,b) hoặc int(f,x,a,b)
22
xk
e)x(g

=
syms k real;
g=exp(-(k*x))

+∞
∞−
dx)x(g
int(g,-inf,inf) hoặc
int(f,x,-inf,inf)
Ví dụ:
syms x x1 alpha u t;
A = [cos(x*t),sin(x*t);-sin(x*t),cos(x*t)];

int(1/(1+x^2)) cho hàm atan(x)
int(sin(alpha*u),alpha) cho hàm -cos(alpha*u)/u
int(besselj(1,x),x) cho hàm -besselj(0,x)
int(x1*log(1+x1),0,1) cho giá trị 1/4
int(4*x*t,x,2,sin(t)) cho kết quả 2*sin(t)^2*t-8*t
int([exp(t),exp(alpha*t)]) cho kết quả [exp(t), 1/alpha*exp(alpha*t)]
int(A,t) cho kết quả [sin(x*t)/x, -cos(x*t)/x]
[cos(x*t)/x, sin(x*t)/x]
Tích phân với hằng số thực- Trong biểu thức tích phân có các hệ số hằng thay đổi,
ví dụ, hàm số
2
)kx(
e)x(f

=
, cung hình chuông sẽ dần tới 0 khi x dần đến ± đối với số
k thực bất kì. Chương trình lõi (kernel) của Maple, không xác định các biểu thức x
2
và k
2
là các số dương. Trái lại Maple giả thiết các biến kí hiệu x và k là bất định,
nghĩa là chúng là các biến hình thức không có thuộc tính toán học. Do đó, khi tính
tích phân:
Page 15 of 39
ằ syms k x;
ằ f=exp(-(k*x)^2);
ằ int(f,-inf,inf)
Warning: Explicit integral could not be found.
> In C:\MATLABR11\toolbox\symbolic\@sym\int.m at line 58
ans =

int(exp(-k^2*x^2),x = -inf inf)
Làm xuất hiện lỗi không xác định biểu thức tích phân.Để giải quyết lỗi này, phải
gán thuộc tính cho biến k là thực hoặc dương:
ằ syms k real
ằ int(f,-inf,inf)
ans =
signum(k)/k*pi^(1/2)
ằ syms k positive
ằ int(f,-inf,inf)
ans =
1/k*pi^(1/2)
Để cho kết quả tốt nên xác định thuộc tính positive cho hằng số tích phân.
Tính tích phân
∫∫
−−
+=
D
yx22
22
e)y3x2(I
với D là miền chữ nhật -5<=x<=5,-3<=y<=3.
syms x y;
a=-5;b=5;
c=-3;d=3;
fxy=(2*x^2+3*y^2)*exp(-x^2-y^2);
I=int(int(fxy,y,c,d),x,a,b); %Trả về biến sym
vpa(I) trả về 7.8518394917161106179082787453659
Iv=double(I) trả về Iv=7.8518
Tính tích phân
∫ ∫

=
b
a
)x(2f
)x(1f
dx)y,x(fdxI
với D là miền giới hạn bởi các đường f1(x),f2(x)
với x đi từ a đến b.
syms x y;
fxy= ;
f1x= ;
f2x= ;
a= ;
b= ;
I=int(int(fxy,y,f1x,f2x),x,a,b);
Tính tích phân
∫ ∫ ∫
=
b
a
)x(2f
)x(1f
)y,x(2g
)y,x(1g
dz)z,y,x(fdydxI
với D là miền giới hạn bởi các mặt g1(x,y),
g2(x,y), với hình chiếu các mặt giới hạn bởi các đường đường f1(x),f2(x) với x đi từ a
đến b.
syms x y;
fxyz= ;

g1xy= ;
g2xy= ;
f1x= ;
f2x= ;
a= ;
b= ;
I=int(int(int(fxyz,z,g1xy,g2xy),y,f1x,f2x),x,a,b);
Page 16 of 39
2.3 Giải (hệ) phương trình vi phân.
Toolbox Symbolic cung cấp hàm dsolve cho phép giải (hệ) phương trình vi phân
thường (ordinary differential equations).
Cú pháp:
dsolve('eqn1','eqn2', ) -Giải các phương trình vi phân thường dạng kí hiệu có
các điều kiện đầu. Các phương trình hoặc điều kiện đầu có thể được nhóm với nhau, phân
cách nhau bởi dấu phảy "," trong cùng một đối số vào.
Mặc định, biến độc lập là 't'. Biến độc lập có thể là các biến kí hiệu khác, được đặt ở
sau cùng của đối số vào.
Kí tự 'D' kí hiệu cho đạo hàm theo biến độc lập, thường kí hiệu. Sau kí tự "D" là chữ
số cho cấp đạo hàm; ví dụ D2 là d^2/dt^2. Bất kì các kí tự theo sau toán tử đạo hàm 'D' được
coi là các biến phụ thuộc (ẩn); ví dụ, D3y kí hiệu cho đạo hàm cấp 3 của y(t). Lưu ý là tên
của các biến kí hiệu phụ thuộc phải có chứa chữ cái 'D'.
Các điều kiện đầu được chỉ định bởi các phương trình dạng 'y(a)=b' hoặc 'Dy(a) = b'
với y là biến phụ thuộc, a và b là các biến độc lập. Nếu số phương trình điều kiện đầu ít hơn
số biến phụ thuộc, lời giải sẽ có các hằng tuỳ ý, C1, C2,
Có 3 kiểu biến ra. Đối với phương trình 1 biến đầu ra là 1 biến chứa nghiệm, khi có nhiều nghiệm cho
các biến phụ thuộc biến ra là 1 vector chứa các nghiệm này, Với hệ phương trình có số phương trình bằng số
nghiệm, biến ra (nghiệm tìm được) được sắp xếp theo thứ tự bảng chữ cái. Đối với hệ phương trình và có 1
biến ra, dsolve trả về cấu trúc chứa các nghiệm.
Khi không tìm được nghiệm hiển, lời giải ẩn được tìm thử. Khi lời giải ẩn trả về, sẽ có lời cảnh báo cho
ta biết nghiệm ẩn. Khi cả nghiệm hiển và ẩn đều không tìm được sẽ có thông báo và trả về biến sym rỗng.

Trong một số hệ phương trình phi tuyến, biến ra sẽ là phương trình vi phân cấp thấp hơn hoặc là dạng tích
phân.
Chú ý: dsolve cho phép giải cả bài toán Côsi và bài toán biên.
Bảng mô tả biến ra:
Cú pháp Đối số ra
y=dsolve('Dy=C*y')
Một phương trình, một biến ra
[u,v]=dsolve('Du=v','Dv=u')
[u,v]=dsolve('Du=v,Dv=u')
[u,v]=dsolve('Du=v,Dv=u','x')
Hai phương trình , hai biến ra
biến độc lập mặc định t
biến độc lập x
S=dsolve('Df=g','Dg=h','Dh=-
f')
S.f, S.g, S.h
3 phương trình, biến cấu trúc ra có 3 thành phần
Các biến được sắp thứ tự chữ cái a z.
Ví dụ:
dsolve('Dx = -a*x') trả về exp(-a*t)*C1
x = dsolve('Dx = -a*x','x(0) = 1','s') trả về x= exp(-a*s)
y = dsolve('(Dy)^2 + y^2 = 1','y(0) = 0') trả về y =
[ sin(t)]
[ -sin(t)]
S = dsolve('Df = f + g','Dg = -f + g','f(0) = 1','g(0) = 2')
trả lại cấu trúc
S.f = exp(t)*cos(t)+2*exp(t)*sin(t)
S.g = -exp(t)*sin(t)+2*exp(t)*cos(t)
Y = dsolve('Dy = y^2*(1-y)')
Warning: Explicit solution could not be found; implicit solution returned.

Y =
t+1/y-log(y)+log(-1+y)+C1=0
dsolve('Df = f + sin(t)', 'f(pi/2) = 0')
Page 17 of 39
dsolve('D2y = -a^2*y', 'y(0) = 1, Dy(pi/a) = 0')
S = dsolve('Dx = y', 'Dy = -x', 'x(0)=0', 'y(0)=1')
S = dsolve('Du=v, Dv=w, Dw=-u','u(0)=0, v(0)=0, w(0)=1')
w = dsolve('D3w = -w','w(0)=1, Dw(0)=0, D2w(0)=0')
y = dsolve('D2y = sin(y)'); pretty(y)
Ví dụ 1:
Giải phương trình vi phân y'=1+y
2
.
dsolve('Dy=1+y^2') %Với y là biến phụ thuộc và t là biến độc lập.
ans =
tan(t-C1)
Với điều kiện đầu y(0)=1
y = dsolve('Dy=1+y^2','y(0)=1')
y =
tan(t+1/4*pi)
Cần lưu ý là y là biến sym trong workspace, có chứa biến kí hiệu t, nhưng có thể
không tồn tại biến t. Do đó câu lệnh diff(y,t) sẽ gây lỗi. Để tránh lỗi phải tạo biến
t trong workspace, thêm câu lệnh syms t.
Ví dụ 2:
Các phương trình phi tuyến có thể có nhiều lời giải, thậm chí ngay cả khi có
điều kiện đầu:
x = dsolve('(Dx)^2+x^2=1','x(0)=0')
x =
[-sin(t)]
[ sin(t)]

Ví dụ 3:
Với phương trình vi phân cấp hai với 2 điều kiện đầu:
y = dsolve('D2y=cos(2*x)-y','y(0)=1','Dy(0)=0', 'x')
%y = dsolve('D2y=cos(2*x)-y,y(0)=1,Dy(0)=0','x')
y =
-1/3*cos(2*x)+4/3*cos(x);
Với phương trình vi phân thường cấp 3 với 3 điều kiện đầu:
.)0(''u,1)0('u,1)0(u,u
dx
ud
3
3
π=−===
u = dsolve('D3u=u','u(0)=1','Du(0)=-1','D2u(0) = pi','x')
Phương trình vi phân Câu lệnh Matlab
1)0(f
e)x(f3
dx
df
x
x
=
=+

y=dsolve('x*Df+3*f=exp(-
x),f(0)=1','x')
y=-(exp(-x)*x^2+2*exp(-x)*x+2*exp(-x)-2)/x^3
.0)('y,0)0(y
,e)t(y4
dt

fd
t2
2
2
=π=
=+

y=dsolve('D2y+4y=exp(-2*x)',
'y(0)=0', 'Dy(pi)=0')
).32(K
1
)3(y,0)0(y
),x(xy
dx
yd
3
1
2
2
π
==
=
nghiệm là hàm Airy
y=dsolve(' D2y=x*y' ,'y(0)=0',
'y(3)=besselk(1/3,2*sqrt(3)/pi', 'x')
Page 18 of 39
2.4 Chuỗi số và tính tổng.
a. Tính tổng, tích của vector và ma trận.
Tính tổng, tích các phần tử của vector, sử dụng các hàm sum và prod.
Cú pháp: Tính tổng các phần tử.

sum(x) -x là vector, trả về tổng các phẩn tử của x.
sum(X),sum(X,1) -X là ma trận, trả về vector hàng với các phần tử là tổng các
phần tử của cột tương ứng trong X.
sum(X,2) -trả về vector cột với các phần tử là tổng các phần tử của
hàng tương ứng trong X.
Cú pháp: Tính tích các phần tử
prod(x) -x là vector, tích các phần tử của x.
prod(X),prod(X) -X là ma trận, trả về vector hàng với các phần tử là tích các
phần tử của cột tương ứng trong ma trận.
prod(X,2) -Trả về vector cột với các phần tử là tích các phần tử hàng
tương ứng của X.
b. Tính tổng của chuỗi số hữu hạn và vô hạn.
Để tính tổng hữu hạn và chuỗi số của dãy số kí hiệu, sử dụng hàm symsum.
Cú pháp:
symsum(s) -Là tổng bất định của s theo biến xác định bởi findsym, với
biến varsym chạy từ 0 đến varsym-1
symsum(s,v) -Là tổng bất định của s theo biến v (0,1, ,v-1).
symsum(s,k,m) và symsum(s,v,k,m) là tổng theo chỉ số chạy từ k đến m.
Bảng tóm tắt:
Biểu thức toán học Câu lệnh Matlab

−1n
0
)n(s
symsum(s)

−1n
0
)n, ,x(s
với n là chỉ số

symsum(s,n)

q
p
)n(s
symsum(s,p,q)
p có thể là âm,-inf;
q có thể là âm,dương,inf

q
p
)n, ,x(s
với n là chỉ số
symsum(s,n,p,q)
Ví dụ:
syms k n x;

3
1
2
1
11s
22
+++=
s1=symsum(1/x^2,1,inf) trả về 1/6*pi^2
xx12s
2
+++=
s2=symsum(x^k,k,0,inf) trả về -1/(x-1)
simple(symsum(k)) 1/2*k*(k-1)

simple(symsum(k,0,n-1)) 1/2*n*(n-1)
simple(symsum(k,0,n)) 1/2*n*(n+1)
simple(symsum(k^2,0,n)) 1/6*n*(n+1)*(2*n+1)
Page 19 of 39
symsum(k^2,0,10) 385
symsum(k^2,11,10) 0
symsum(1/k^2) -Psi(1,k)
symsum(1/k^2,1,Inf) 1/6*pi^2
c. Khai triển theo chuỗi Taylor.
Sử dụng hàm taylor để khai triển hàm thành chuỗi luỹ thừa.
Cú pháp:
Taylor(f) -Khai triển gần đúng đa thức Maclaurin đến luỹ thừa cấp 5 hàm f.
Có thể có cách chọn đối số cho hàm taylor theo trật tự như sau.
taylor(f,n) -Là đa thức Maclaurin đến cấp (n-1).
taylor(f,a) -Là gần đúng đa thức Taylor đến cấp 5 tại điểm a.
taylor(f,x) -Chỉ dịnh biến độc lập x, không dùng findsym(f) để xác dịnh biến.
taylor(f,n,a,x) -Khai triển gần đúng chuỗi luỹ thừa của hàm f tại điểm a, đến
cấp n-1, theo biến x.
Ví dụ:
syms x t;
taylor(exp(-x)) trả về 1-x+1/2*x^2-1/6*x^3+1/24*x^4-1/120*x^5
taylor(log(x),6,1) trả về x-1-1/2*(x-1)^2+1/3*(x-1)^3-1/4*(x-1)^4+1/5*(x-1)^5
taylor(sin(x),pi/2,6) trả về 1-1/2*(x-1/2*pi)^2+1/24*(x-1/2*pi)^4
taylor(x^t,3,t) trả về 1+log(x)*t+1/2*log(x)^2*t^2
2.5 Khảo sát đồ thị hàm số.
Toolbox Symbolic tập hợp các hàm cho phép vẽ đồ thị một cách dễ dàng: vẽ
cung phẳng (ezplot), đồng mức trên mặt phẳng (ezcontour, ezcontourf), hệ toạ độ cực
(ezpolar), các mặt (ezsurf, ezsurfc, ezmesh, và ezmeshc). Và các cung (ezplot và
ezplot3) và mặt (ezsurf) có tham số.
Ví dụ:

syms x;
f = 1/(5+4*cos(x))
ezplot(f); %Vẽ đồ thị với miền mặc định từ -2*pi đến 2*pi.
df=diff(f); %Đạo hàm cấp 1, biến độc lập xác định bởi findsym.
d2f=diff(f,2) %Đạo hàm cấp 2, biến độc lập xác định bởi findsym.
2.6 Đại số tuyến tính.
2.7 Các phép biến đổi Laplace, Fourier, Z.
Phép biến đổi tích phân và các dạng rời rạc của chúng (Integral transforms and
their discrete counterparts ) là các công cụ mạnh và có tác dụng quan trọng trong kĩ
thuật, toán ứng dụng và khoa học. Phép biến đổi Laplace ứng dụng cho các hệ liên tục
(continous systems) (hệ phương trình vi phân); còn các dạng liên tục rời rạc, phép biến
đổi Z thao tác trên các hệ rời rạc (discrete systems) (thường là hệ phương trình vi
phân). Tương tự, biến đổi Fourier tác động lên các hàm liên tục (continous functions),
biến đổi Fourier rời rạc (DFT-the discrete fourier transform), trên các mẫu dữ liệu giới
hạn. Biến đổi Fourier rời rạc hiệu quả và nổi tiếng nhất là phép biến đổi Fourier
nhanh (FFT-the fast fourier transform). Toolbox toán học Symbolic cung cấp các lệnh
Page 20 of 39
cho phép tính và phân tích các biến đổi Fourier, Laplace, Z và biến đổi ngược của
chúng.
a. Biến đổi Fourier và biến đổi Fourier ngược.
Định nghĩa phép biến đổi Fourier của hàm f(x) như sau:

+∞
∞−

= dxe)x(f)w](f[F
iwx
và phép biến đổi Fourier ngược (IFT) là:

+∞

∞−

π
= dwe)w(f
2
1
)x](f[F
iwx1
Phép biến đổi Fourier của hàm f(x) là hàm f(w). F[f] là kí hiệu biến đổi Fourier
của hàm f, hoặc gọn hơn, phép biến đổi của f theo x tại w. Phép biến đổi thực hiện
theo biến độc lập của f (khi f=f(t)), t là biến độc lập; f=f(x) cho biết x là biến độc
lập tại biến mặc định w. Qui ước F[f] là biến đổi Fourier của f tại w và F
-1
[f] là biến
đổi Fourier ngược (IFT) của f tại x.
Matlab Symbolic cung cấp 2 hàm fourier và ifourier xác định phép biến đổi
Fourier và phép biến đổi ngược.
Cú pháp của hàm fourier:
F = fourier(f) -Trả về kết quả phép biến đổi Fourier của hàm vô hướng kí
hiệu f với biến độc lập x. F là hàm của w. Nếu f=f(w), fourier trả về hàm của t: F=F(t).
Theo định nghĩa F(w)=int(f(x)*exp(-i*w*x),x,-inf,inf), với tích phân theo biến x (Thực
tế biến kí hiệu trong f được xác định bởi findsym)
F = fourier(f,v) -Trả về hàm F theo biến kí hiệu v thay cho biến mặc định w:
fourier(f,v) <=> F(v) = int(f(x)*exp(-i*v*x),x,-inf,inf).
F= fourier(f,u,v) -Coi f là hàm của u thay cho biến mặc định x. F là hàm của v.
fourier(f,u,v) <=> F(v) = int(f(u)*exp(-i*v*u),u,-inf,inf).
Ví dụ:
syms t v w x
fourier(1/t) trả về i*pi*(Heaviside(-w)-Heaviside(w))
fourier(exp(-x^2),x,t) trả về pi^(1/2)*exp(-1/4*t^2)

fourier(exp(-t)*sym('Heaviside(t)'),v) trả về 1/(1+i*v)
fourier(diff(sym('F(x)')),x,w) trả về i*w*fourier(F(x),x,w)
Cú pháp của hàm ifourier:
f = ifourier(F) -Trả về dạng biến đổi Fourier ngược của biến vô hướng kí
hiệu F theo biến độc lập w. Mặc định trả về hàm f của x. Biến đổi Fourier ngược được
áp dụng cho hàm của w và trả về hàm của x: F = F(w) => f = f(x). Nếu F = F(x), thì
ifourier trả về hàm của t: f = f(t).
Theo định nghĩa, f(x) = 1/(2*pi) * int(F(w)*exp(i*w*x),w,-inf,inf) và tích phân
được tính theo x.
f = ifourier(F,u) -Trả về hàm f của u thay cho biến mặc định x:
ifourier(F,u) <=> f(u) = 1/(2*pi) * int(F(w)*exp(i*w*u,w,-inf,inf).
ở đây u là biến vô hướng kí hiệu.
f = ifourier(F,v,u) -Coi F là hàm của v thay cho biến mặc định w:
ifourier(F,v,u) <=> f(u) = 1/(2*pi) * int(F(v)*exp(i*v*u,v,-inf,inf),
Page 21 of 39
tích phân được lấy theo v.
Ví dụ:
syms t u w x;
ifourier(w*exp(-3*w)*sym('Heaviside(w)')) trả về 1/2/pi/(3-i*t)^2
ifourier(1/(1 + w^2),u) trả về 1/2*exp(-u)*Heaviside(u)+1/2*exp(u)*Heaviside(-u)
ifourier(v/(1 + w^2),v,u) trả về i/(1+w^2)*Dirac(1,-u)
ifourier(sym('fourier(f(x),x,w)'),w,x) trả về f(x)
Một ứng dụng của biến đổi Fourier giải các phương trình vi phân thường (ODE)
và phương trình vi không phân không gian (PDE) trên đường thẳng thực. Xác định
biến dạng của dầm tĩnh dài vô hạn do biến dạng đàn hồi dưới tác động va chạm
(shock) điểm. "Hình ảnh thực" ứng với hiện tượng này là tổ hợp rãnh đường ray trên
mặt nền đường (road bed).
Sự va chạm được gây bởi búa hơi. Phương trình vi phân lý tưởng hoá hiện
tượng vật lý này là:
+∞<<∞−δ=+ x),x(

EI
1
y
EI
k
dx
yd
4
4
Trong đó: E là modul đàn hồi của dầm (rãnh đường ray). I là hằng số dầm, và k là độ
cứng lò xo (độ cứng nền đường-stiffness). Lực va chạm ở vế phải phương trình vi
phân được mô hình bằng hàm Delta Dirac (x). Hàm Delta có tính chất sau:



=δ−
x
)x(fdx)x()yx(f

Định nghĩa của hàm Delta :
)x(nlim)x(
)n2/1,n2/1(
n

∞→
χ=δ
với








>−<
<<−

n2
1
xhoÆc
n2
1
xvíi0
n2
1
x
n2
1
víi1
)x(
()
Để tính toán với hàm Delta tại điểm x=3, sử dụng các câu lệnh sau:
syms x;
del=sym('Dirac(x)');
vpa(subs(del,x,3))
trả về giá trị
Page 22 of 39
Hình
ans =
0

Từ phương trình vi phân trên, gọi Y(w)=F[y(x)](w) và ∆(w)=F[δ(x)](w). Phép biến
đổi Fourier chuyển phương trình vi phân thành hàm mũ,
)w(Yw)w(
dx
yd
F
4
4
4
=






Thật vậy, kiểm tra bằng các câu lệnh matlab ta có:
ằ syms w x;
fourier(diff(sym('y(x)'),x,4),x,w)
trả về
ans =
w^4*fourier(y(x),x,w)
Sử dụng biến đổi Fourier cho phương trình vi phân, cho ta phương trình đại số:
)w)](x(g[F
EI
k
w
1
)w(G
víi

)w(G)w()w(Y
hay
)w()w(Y
EI
k
w
4
4
=
+
=
∆=
∆=






+
Đối với hàm g(x0, g là biến đổi Fourier ngược của G.
g(x)=F
-1
[G(w)](x)
Nhận thấy rằng tỉ số
EI
K
tương đối lớn do nền đường có hằng số độ cứng k cao
và rãnh đường ray có hệ số đàn hồi E thấp hằng số dầm I nhỏ. Để đơn giản, giả thiết
1024

EI
K
=
. Từ đó, dễ dàng tính được F
-1
[G(w)](x), thực hiện lệnh Matlab như sau:
syms w;
G=1/(w^4+1024);
g=ifourier(G,w,x);
g=simple(expand(g));
pretty(g)
cho thấy
8 8
1/1024 (exp(i x) Heaviside(x) - i exp(i x) Heaviside(x)
8 8 8 8
+ exp(i x) exp(x) Heaviside(-x) + i exp(i x) exp(x) Heaviside(-x)
8
+ Heaviside(x) + i Heaviside(x) + exp(x) Heaviside(-x)
8 / 4 4
- i exp(x) Heaviside(-x)) / (exp(i x) exp(x) )
/
Để ý thấy g có chứa hàm phân bố Heaviside





=
<
>

=
0xvíigularsin
0xvíi0
0xvíi1
)x(H
singular-suy biến (như ma trận vuông suy biến, có det=0)
Page 23 of 39
Phân tích các thừa số hàm phân bố Heaviside, sử dụng câu lệnh:
H = sym('Heaviside(x)');
g = collect(g,H);
pretty(g);
nhận được
8 8
(exp(i x) - i exp(i x) + 1 + i) Heaviside(x)
1/1024 + 1/1024 (
4 4
exp(i x) exp(x)
8 8 8 8
exp(i x) exp(x) Heaviside(-x) + i exp(i x) exp(x) Heaviside(-x)
8 8 / 4
+ exp(x) Heaviside(-x) - i exp(x) Heaviside(-x)) / (exp(i x)
/
4
exp(x) )
Do Y là tích các của phép biến đổi Fourier, khi đó y là tích (convolution) các
hàm bị biến đổi. Nghĩa là, F[y]=Y(w)=∆(w)G(w)=F[δ]F[g], áp dụng tính chất của
hàm Delta:

+∞
∞−

=δ−=δ= )x(gdx)x()yx(g)x)(g.()x(y
Vẽ đồ thị hàm y(x), phải thay miền giá trị của x cho y, sử dụng câu lệnh subs.
xx=-3:0.05:3; %nên thay xx=linspace(-3,3); để tránh có xx==0
yy=doule(subs(g,x,xx)); %có lỗi tại xx=0, do Heaviside(0) suy biến.
plot(xx,yy);
title('Do vong cua dam do va cham diem');%Độ võng của dầm do va chạm điểm.
xlabel('x');
ylabel(y(x)');
Từ đồ thị cho thấy tại điểm va chạm có vị trí dâng cao; độ võng lớn nhất xuất
hiện tại điểm va chạm và giảm nhanh tại các diểm gần kề. Kết quả này đúng với kết
quả từ thực nghiệm.
Ví dụ: Giải phương trình vi phân y''=x*y, nghiệm là hàm Airy.
Page 24 of 39
-3 -2 -1 0 1 2 3
-5
0
5
10
15
20
x 10
-4
Do vong cua dam do va cham diem
x
y(x)
Hình
ằ y=sym('y(x)'); w=sym('w');x=sym('x');
ằ eq=diff(y,x,2)-x*y; %Lập phương trình
ằ Fe1=fourier(eq,x,w) %Biến đổi Fourier
Fe1 =

-w^2*fourier(y(x),x,w)-i*diff(fourier(y(x),x,w),w)
ằ Fe1=subs(Fe1,'fourier(y(x),x,w)','Y')
Fe1 = %Đưa về Y(w)
-w^2*Y-i*diff(Y,w)
ằ Fe1=subs(Fe1,'diff(Y,w)','DY')
Fe1 = %Chuyển về phương trình đại số (vi phân)
-w^2*Y-i*DY
ằ Y=dsolve(char(Fe1),'w') %Giải phương trình đại số (vi phân)
Y =
C1*exp(1/3*i*w^3)
ằ y=ifourier(Y,w,x)
y =%Nghiệm cần tìm
-1/3*C1*(-1)^(2/3)*3^(1/3)*(x*(-1)^(2/3)*3^(1/3))^(1/2)*besselk(1/3,2/9*3^(1/2)*(x*(-
1)^(2/3)*3^(1/3))^(3/2))/pi
ằ y=subs(y,'C1',1)
y =
-1/3*(-1)^(2/3)*3^(1/3)*(x*(-1)^(2/3)*3^(1/3))^(1/2)*besselk(1/3,2/9*3^(1/2)*(x*(-
1)^(2/3)*3^(1/3))^(3/2))/pi
hoặc sử dụng :
ằ y=dsolve('D2y=x*y','x')
y =
C1*AiryBi(x)+C2*AiryAi(x)
%
π
==
3
1
2C,01C
ằ y=subs(y,{'C1','C2'},{0,1/sqrt(3)/pi})
y =

6621238954613787/36028797018963968*AiryAi(x)
b. Phép biến đổi Laplace.
Phép biến đổi Laplace của hàm f(t) được định nghĩa như sau:



=
0
ts
dte)t(f)s](f[L
và phép biến đổi Laplace ngược (ILT) của hàm f(s) là:

∞+
∞−

π
=
jc
jc
st1
dse)s(f
j2
1
)t](f[L
với c là số thực được chọn sao cho tất cả các giá trị suy biến (singularities) của
f(s) nằm bên trái của đường s=c. Kí hiệu L[f] là phép biến đổi Laplace của hàm f tại s.
Tương tự L
-1
[f] là phép biến đổi Laplace ngược của hàm f tại t. Phép biến đổi Laplace
có nhiều ứng dụng, trong đó có việc giải phương trình vi phân thường (ODE) và bài

toán giá trị đầu (initial value).
Xét mạch (RLC) điện trở - cuộn cảm - tụ điện dưới đây:
Page 25 of 39

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

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