You are on page 1of 22

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN VẬT LÝ KỸ THUẬT


---------------ooo--------------

CĂN BẢN KHOA HỌC


MÁY TÍNH
GV. TS. Mai Thị Lan
Bộ môn Vật lý tin học 406 C10
lan.maithi@hust.edu.vn/lanmt.iep@gmail.com

Hà nội, 1/2020
1
NỘI DUNG CHƯƠNG TRÌNH – PHẦN 1
CHƯƠNG I: NHẬP MÔN MATLAB
I.1. Giao diện phần mềm Matlab CHƯƠNG III. ĐỒ HỌA TRONG MATLAB
I.2. Tạo biến trong Matlab III.1. Đồ họa hai chiều 2D
I.3. Các toán tử đại số trong Matlab III.2. Đồ họa ba chiều 3D
I.4. Các hàm có sẵn trong Matlab CHƯƠNG IV. XỬ LÝ CÁC BIỂU THỨC TOÁN
I.5. Làm việc ở chế độ lập trình m file HỌC

I.6. Xây dựng hàm người dùng định nghĩa IV.1. Các phép biến đổi đơn giản trên biểu thức toán
I.7. Chuỗi kí tự và vecto (mảng 1 chiều) IV.2. Giải các phương trình, hpt đại số
I.8. Ma trận (mảng 2 chiều) IV.3. Các phép toán giải tích

CHƯƠNG II: CẤU TRÚC ĐIỀU KHIỂN CHƯƠNG TRÌNH IV.4. Giải phương trình vi phân thường

II.1. Toán tử quan hệ và logic IV.5. Các hàm đồ hoạ trong Matlab Symbolic
II.2. Cấu trúc điều kiện if – elseif - else IV.6. Đa thức và nội suy đa thức
II.3. Cấu trúc vòng lặp for, while
II.4. Cấu trúc switch - case - ortherwise 2
CHƯƠNG 4. XỬ LÝ CÁC BIỂU THỨC TOÁN HỌC

IV.1. Các phép biến đổi đơn giản trên biểu thức toán
IV.2. Giải các phương trình, hpt đại số
IV.3. Các phép toán giải tích
IV.4. Giải phương trình vi phân thường
IV.5. Các hàm đồ hoạ trong Matlab Symbolic
IV.6. Đa thức và nội suy đa thức

3
CHƯƠNG 4. XỬ LÝ CÁC BIỂU THỨC TOÁN HỌC

• Ngày nay có rất nhiều phần mềm phục vụ việc giải các bài toán Vật lý kỹ
thuật cho kết quả dưới dạng biểu thức toán: ví dụ Mathematica, mapple
Matcat …
• Symbolic trong Matlab là một thư viện toán học kiểu kí tự, phát triển từ
Symbolic Maple của trường đại học Waterloo, Canada. Matlab symbolic
cho phép chúng ta thu được kết quả dưới dạng chính xác (phân số) hoặc
cũng có thể cho kết quả gần đúng với độ chính xác tuỳ ý.
Khởi tạo các biến symbolic : từ khóa sym

%Khởi tạo các biến symbolic từ các chữ số hoặc xâu ký tự:
>> x=sym(1/3); class(x)
x=1/3
ans =sym
4
• Đổi 1 số về kiểu sym Đổi 1 xâu ký tự về kiểu sym Đổi 1 xâu ký tự về kiểu
sym Đổi 1 xâu ký tự về
>> syms x y kiểu sym
>> x=1/3 >> z='sin(t)/t'
>> y=sin(x)/x >> class(k)
x= y= z= ans =
sin(x)/x 'sin(t)/t'
0.3333 'sym'
>> class(z)
>> x=sym(x) ans =
>> class(y)
x= ans = 'char'

1/3 >> k=str2sym(z)


'sym' k=
sin(t)/t

Từ một biến symbolic ta có thể tạo ra các biểu thức mới bằng các phép tính: +, -, *, /, ^. Người
ta có thể bổ sung thêm các tính chất của biến symbolic là nó thuộc đại lượng thực
x=sym(’x’, ’real’). Để loại bỏ tính chất thực chúng ta có thể đặt lại
x=sym(’x’, ’unreal’).
5
Giữa kiểu symbolic và kiểu xâu có thể
chuyển đổi cho nhau
•Muốn đặt x, y, z là biến symbolic
bạn có thể làm theo một trong 2 cách >> syms x y
sau >> y=sin(x)/x
y=
x=sym(’x’)
sin(x)/x
y=sym(’y’) >> class(y)
z=sym(’z’) ans =
'sym'
syms x y z >> y=char(y)
y=
'sin(x)/x'
x=sym(‘x’,’real’) >> class(y)
ans =
syms x real 'char'
6
• Độ chính xác tuỳ ý:
• Trong matlab symbolic các số thực được tính toán với độ chính xác mặc
định 32 chữ số. Muốn có độ chính xác cao hơn dùng hàm digits(n) để
thiết lập độ chính xác của các số thực (n là số nguyên dương)
>> pi
ans =
3.1416 VPA Variable precision arithmetic.
>> vpa(pi,39) % lay chinh xac 39 so
>> vpa(pi) % hiển thị giá trị dạng số thực dễ hiểu với độ cxac mặc
định 32 chữ số ans =

ans = 3.1415926535897932384626433832795028842

3.1415926535897932384626433832795 >> vpa(pi,40) % lay chinh xac 40 so

>> digits(40) % lay do chinh xac 40 chu so ans =

>> vpa(pi) 3.141592653589793238462643383279502884197

ans =
3.141592653589793238462643383279502884197

7
• Các biểu thức toán học trên các đối tượng symbolic được xây dựng từ các biến
symbolic kết hợp với các hàm và các phép toán
• Ví dụ:
% code % ket qua % ket qua
syms x y >> syms x y >> simplify(bt) % don gian bieu thuc
bt1=sin(x)^2+1 >> bt1=sin(x)^2+1 ans =
bt2=cos(x)^2 +sin(y)/y bt1 = (2*y + sin(y))/y
bt=bt1+bt2 sin(x)^2 + 1
simplify(bt) >> bt2=cos(x)^2 +sin(y)/y
bt2 =
sin(y)/y + cos(x)^2
>> bt=bt1+bt2
bt =
sin(y)/y + cos(x)^2 + sin(x)^2 + 1 8
IV.1. Các phép biến đổi đơn giản trên biểu thức toán

9
IV.1. Các phép biến đổi đơn giản trên biểu thức toán
• Từ các biểu thức symbolic chúng ta có thể thực hiện một số biến đổi đơn giản
a. Hàm subs
Hàm này dùng để thay thế một biến cũ trong biểu thức bằng biến mới hoặc biểu thức
mới: subs(<bieuthuc>,<biếncũ>, <biếnmới>)
subs(<bieuthuc>,{cácbiếncũ}, {cácbiếnmới})
>> syms a b
>> subs(a+b,a,4) % thay a = 4 trong bieu thuc a+b >> syms a x y b
ans = >> r=sqrt(x^2+y^2)
b+4 r=
>> syms a x y b (x^2 + y^2)^(1/2)
>> r=sqrt(x^2+y^2) >> f=subs(r,{x, y},{a, a}) % thay bien x, y bang bien a
r= f=
(x^2 + y^2)^(1/2) (2*a^2)^(1/2)
>> f=subs(r,{x, y},{a,b}) % thay bien x, y bang bien a, b tuong ung
f=
(a^2 + b^2)^(1/2)
10
IV.1. Các phép biến đổi đơn giản trên biểu thức toán
b. Hàm simplify
Hàm này dùng để đơn giản biểu thức: Simplify(<biểu thức>)
% ket qua
% vi du: >> syms x y
syms x y >> A=sin(x)^2+cos(x)^2+3*y^3+3*x^5
A=sin(x)^2+cos(x)^2+3*y^3+3*x^5 A=
class(A) cos(x)^2 + sin(x)^2 + 3*x^5 + 3*y^3
pretty(A) % lam dep bieu thuc >> class(A)
simplify(A) % don gian bieu thuc ans =
'sym'
>> pretty(A)
cos2(x) + sin2(x) + 3 x5 + 3 y3
>> simplify(A)
ans =
3*x^5 + 3*y^3 + 1

11
IV.1. Các phép biến đổi đơn giản trên biểu thức toán
c. Hàm expand, collect
Hàm này dùng để triển khai biểu thức: expand(<biểu thức>); (collect<biểu thức>)
% ket qua
>> syms x y
% vi du:
>> B=(x+y)^4
syms x y
B=
B=(x+y)^4
(x + y)^4
C=expand(B)
>> C=expand(B)
collect(B)
C=
D=simplify(C)
x^4 + 4*x^3*y + 6*x^2*y^2 + 4*x*y^3 + y^4
>> collect(B)
ans =
x^4 + 4*x^3*y + 6*x^2*y^2 + 4*x*y^3 + y^4
>> D=simplify(C)
D=
(x + y)^4
12
IV.2. Giải các phương trình, hpt đại số
• Để giải các phương trình phi tuyến cho nghiệm dạng symbolic chúng ta có thể
dùng hàm solve: nghiệm=solve(<Phương trình>)
danh sách nghiệm=solve(<pt1>, (<pt2>, (<pt3>)
Ví dụ 1: giải phươngtrình ln(x2-1)=a
⟺ 𝑥 −1 = 𝑒 ⇒ 𝑥 =𝑒 +1
>> syms x y

⇒ 𝑥 = ± (𝑒 + 1) % ket qua >> [x,y] = solve(x^2 + x*y + y == 3,x^2 - 4*x + 3 == 0)


>> syms x a x=
% ket qua Ví dụ 2: giải hệ phương trình
>> eq=log(x^2-1)-a 1
>> syms x a 𝑥 + 𝑥𝑦 + 𝑦 = 3
eq = 3 𝑥 − 4𝑥 + 3 = 0
>> x=solve(log(x^2-1)==a)
log(x^2 - 1) - a y=
x=
>> x=solve(eq)
(exp(a) + 1)^(1/2) 1
x=
-(exp(a) + 1)^(1/2) -3/2
(exp(a) + 1)^(1/2)
-(exp(a) + 1)^(1/2)
13
IV.2. Giải các phương trình, hpt đại số
• Để giải các phương trình phi tuyến cho nghiệm dạng symbolic chúng ta có thể
dùng hàm solve: nghiệm=solve(<Phương trình>)
danh sách nghiệm=solve(<pt1>, (<pt2>, (<pt3>)
Ví dụ 4: giải hệ phương trình
Ví dụ 3: giải phương trình p.sinx=r 𝑥−𝑦 = 1
𝑥 −𝑦−1=0
>> clear all >> syms x y
>> syms p x r
>> syms x y >> [x,y] = solve(x-y-1,x^2-1-y) (**)
solve(p*sin(x) == r)
>> [x,y] = solve(x-y-1==0,x^2-1-y==0) (*) x=
ans =
x= 1
asin(r/p)
1 0
pi - asin(r/p
0 y=
y= 0
0 -1
-1 Viết (**) được hiểu là như (*), mặc định phương trình =0
14
IV.2. Giải các phương trình, hpt đại số
• Để giải các phương trình phi tuyến cho nghiệm dạng symbolic chúng ta có thể
dùng hàm solve: nghiệm=solve(<Phương trình>)
danh sách nghiệm=solve(<pt1>, (<pt2>, (<pt3>)
Ví dụ 5: giải hệ phương trình
au2+v2=0 u = %nghiem u
u-v=1 1/3 - (2^(1/2)*1i)/3
a2-5a+6=0 (2^(1/2)*1i)/3 + 1/3
>> syms a u v
1/4 - (3^(1/2)*1i)/4
[a,u,v] = solve(a*u^2 + v^2,u - v == 1,a^2 - 5*a + 6)
(3^(1/2)*1i)/4 + 1/4
a = % nghiem a
v = %nghiem v
2
- (2^(1/2)*1i)/3 - 2/3
2
(2^(1/2)*1i)/3 - 2/3
3
- (3^(1/2)*1i)/4 - 3/4
3
(3^(1/2)*1i)/4 - 3/4
(3^(1/2)*1i)/4 - 3/4 15
IV.3. Các phép toán giải tích
a. Hàm diff: tính đạo hàm của y
dy=diff(y) % đạo hàm bậc 1 Ví dụ 2: tính đạo hàm cấp 1 của z theo biến x và biến y:

dy=diff(y,2) % đạo hàm bậc 2 𝑧 = 𝑠𝑖𝑛𝑥 + 𝑐𝑜𝑠𝑦 + 𝑡𝑎𝑛𝑥


dy=diff(y,,n) % đạo hàm bậc n
Ví dụ 1: tính đạo hàm cấp 1, 2 của y = x2 >> syms x y z

>> syms x y >> z=sin(x)^2+cos(y)^3+tan(x)

>> y=x^2 z=

y= cos(y)^3 + sin(x)^2 + tan(x)

x^2 >> dz=diff(z,x) % dao ham cua z theo bien x

>> diff(y) % dao ham cap 1 dz =

ans = 2*cos(x)*sin(x) + tan(x)^2 + 1

2*x >> dz=diff(z,y) %dao ham cua z Theo bien y

>> diff(y,2) %dao ham cap 2 dz =

ans = -3*cos(y)^2*sin(y)

2 16
IV.3. Các phép toán giải tích
b. Hàm int: tính tích phân của I
>> syms x
int(I) %tính tích phân bất định >> I=cos(x)
>> sym x
int(I, a, b) % tính tích phân xác định I=
>> y=x^-2
• Trường hợp a hoặc b bằng vô cùng thì thay bằng inf cos(x)
y=
>> int(I)
int (s,’x’,a, inf) 1/x^2
ans =
>> int(y)
• Để tính tích phân nhiều lớp chúng ta phải thực hiện sin(x)
ans =
hàm int nhiều lần >> int(I,0,pi)
-1/x
ans =
>> int(y,1,inf)
0
Ví dụ 1: tính nguyên hàm của I = cosx và tính tích phân của I với ans =
cận từ 0 đến pi, từ 0 đến pi/2 >> int(I,0,pi/2)
1
ans =
1
17
• Khi tính tích phân xác định cho kết quả là dạng số nhưng nếu biểu thức tính
tích phân không có nguyên hàm thì mabLab sẽ trả lại giá trị cũ hoặc đưa ra
kết quả không phải dạng số. Khi đó để xác định giá trị của nó ta dùng hàm
vpa
>> syms x
>> I=2/sqrt(pi)*exp(-x^2)

I=

(5081767996463981*exp(-x^2))/4503599627370496

>> z=int(I,0,x)

z=

(5081767996463981*pi^(1/2)*erf(x))/9007199254740992
>> vpa(z)

ans =

0.99999999999999998640930277661906*erf(x) % erf(x) hàm sai số của x


18
IV.3. Các phép toán giải tích
c. Hàm limit: tính giới hạn của biểu thức s
limit(s,x,a) tính lim của s khi x tiến a
Ví dụ 1: tính giới hạn của hàm Ví dụ 2: tính giới hạn của hàm Ví dụ 3: tính giới hạn của hàm
𝑠𝑖𝑛𝑥 2𝑡
𝑠 = lim 𝑠 = lim 1 + 𝑥−2
→ 𝑥 → 𝑥 𝑠 = lim
→ 𝑥 −4
>> syms x
>> s=sin(x)/x >> syms x t >> limit((x-2)/(x^2-4),2)
>> limit((1+2*t/x)^(3*x),x,inf)
s= ans =
ans =
sin(x)/x 1/4
exp(6*t)
>> limit(s,x,0)

ans =

1
19
IV.3. Các phép toán giải tích
c. Hàm taylor: khai triển chuỗi taylor f
taylor (f) % khai triển chuỗi taylor cho ta xấp xỉ bởi một đa thức bậc 5 tại một điểm cho trước x=0.
taylor (f,x) %khai triển chuỗi taylor cho ta xấp xỉ bởi một đa thức bậc 5 tại một điểm cho trước x=0
taylor (f,x,a) % khai triển chuỗi taylor cho ta xấp xỉ bởi một đa thức bậc 5 tại một điểm cho trước x=a

>> syms x
>> s=exp(x)
s=
exp(x)

>> taylor(s)
Ví dụ 1: khai triển Taylor cho hàm ex tại điểm x =0 ans =
x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1

>> taylor(s,x)
ans =
x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1
20
taylor (f,x,a) % khai triển chuỗi taylor cho ta xấp xỉ bởi một đa thức bậc 5 tại một điểm cho trước x=a
% khai triển taylor tại x=0
>> syms x
>> s=exp(x)
s=
exp(x)

>> taylor(s,x,0) % x=0


ans =
Ví dụ 2: khai triển Taylor cho hàm ex tại điểm x =0 và x=2 x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1

% khai triển taylor tại x=2


>> taylor(s,x,2)

ans =

exp(2) + exp(2)*(x - 2) + (exp(2)*(x - 2)^2)/2 + (exp(2)*(x - 2)^3)/6 + (exp(2)*(x - 2)^4)/24 + (exp(2)*(x - 2)^5)/120
21
taylor (f,x,a, 'Order',n) % khai triển chuỗi taylor cho ta xấp xỉ bởi một đa thức bậc n-1 tại một điểm cho trước x=a
Ví dụ 3: khai triển Taylor bậc 10 đối với hàm ex tại điểm x =0 và x=2
>> syms x
>> s=exp(x)
s=
exp(x)
>> taylor(s,x,'Order',11) % khai trien TayLor bac 10 tại x=0
ans =
x^10/3628800 + x^9/362880 + x^8/40320 + x^7/5040 + x^6/720 + x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1

>> taylor(s,x,2,'Order',11) % khai trien Taylor bac 10 tai x =2;


ans =

exp(2) + exp(2)*(x - 2) + (exp(2)*(x - 2)^2)/2 + (exp(2)*(x - 2)^3)/6 + (exp(2)*(x - 2)^4)/24 + (exp(2)*(x - 2)^5)/120 +
(exp(2)*(x - 2)^6)/720 + (exp(2)*(x - 2)^7)/5040 + (exp(2)*(x - 2)^8)/40320 + (exp(2)*(x - 2)^9)/362880 + (exp(2)*(x -
2)^10)/3628800
22

You might also like