You are on page 1of 29

ĐẠI HỌC QUỐC GIA

ĐẠI HỌC BÁCH KHOA TP HỒ CHÍ MINH




BÀI TẬP LỚN MÔN PHƯƠNG PHÁP TÍNH


CHỦ ĐỀ 2_LỚP L05_NHÓM 2

Giảng viên lý thuyết: Đoàn Thị Thanh Xuân


Giảng viên bài tập: Nguyễn Đình Dương

Sinh viên thực hiện Mã số sinh viên Nhiệm vụ


Lương Tất Lộc 2013685 Vấn đề 1 phần a-b
Hồ Ngọc Trúc Quỳnh 2011958 Phần lý thuyết, tổng hợp
Nguyễn Hoàng Thông 2010662 Vấn đề 2
Hà Minh Trí 2014843 Vấn đề 3
Phan Huỳnh Tường Vy 2012460 Vấn đề 1 phần c-d

Thành phố Hồ Chí Minh – 2021


MỤC LỤC
Phần 1: Lý thuyết: ............................................................................................... 3
1.1 Ý tưởng ..................................................................................................... 3
1.2 Thuật toán ................................................................................................. 3
Phần 2: Bài tập: ................................................................................................... 4
2.1 Vấn đề 1 ...................................................................................................... 4
2.2 Vấn đề 2 ...................................................................................................... 9
2.2.1 Cơ sở lý thuyết ..................................................................................... 9
2.2.2 Giải quyết bài toán ............................................................................. 10
2.2.3 Đánh giá sai số ................................................................................... 15
2.2.4 Nhận xét ............................................................................................. 16
2.2 Vấn đề 3 .................................................................................................... 16
2.3.1 Giải quyết bài toán ............................................................................. 16
2.3.2 Phần code ........................................................................................... 17
2.3.3 Các ví dụ............................................................................................. 20
Phần 3: Tài liệu tham khảo .............................................................................. 29
Phần 1: Lý thuyết:
1.1 Ý tưởng
Phương pháp Gauss trong hệ phương trình tuyến tính là đưa hệ phương trình
AX=B về dạng hình thang, nghiệm tìm được từ quá trình thế ngược.
Phương pháp cầu phương Gauss trong tính gần đúng tích phân là là xấp xỉ tích
phân bởi một tổng hữu hạn, là tìm các trọng số ci và các điểm xi tương ứng trong
đoạn  a, b gọi là các điểm Gauss sao cho đúng với mọi đa thức có bậc nhỏ hơn
2n
b n
I=  f ( x)dx   c f (x )
i 1
i i
a

Tuy nhiên chúng ta có thể giảm số ẩn và số phương trình bằng cách xác định
trước các điểm nút x1, x2 ,..., xn và xét tích phân trong đoạn  1,1 nhờ vào đa thức
Legendre. Đa thức Legendre Pn ( x) xác định theo công thức truy hồi sau

2n  1 n
Pn1 ( x)  xPn ( x)  Pn 1 ( x), n  1
{ n 1 n 1
P0 ( x)  1, P1 ( x)  x
b

Trong trường hợp cần tính tích phân  f ( x)dx chúng ta đưa về tích phân trên đoạn
a

ba ba (b  a)t  (b  a) b  a


b 1

 1,1 bằng đổi biến x  t để có  f ( x)dx   f ( ) dt


2 2 a 1
2 2

22 n 1 (n !) 4
Công thức sai số: I  I *  M 2 n với M 2 n  max f (2 n ) ( x)
(2n)! (2n  1) x 1,1
3

1.2 Thuật toán


function [p,r] = legendre(n)
if n < 1, error(’Bậc đa thức không phù hợp’); end;
p1 = [1]; p2 = [1 0]; pp = p2;
if n==1, p=p2; r=[0]; return;
for i = 2:n
m = length(p1) + 2;
for j = m:-1:3,
p1(j) = p1(j-2);
end;
p1(1) = 0; p1(2) = 0;
p = (2*i-1)/i*conv(pp,p2)-(i-1)/i*p1;
p1 = p2; p2=p;
end;
r = roots(p);
for i = 1:n
for j = i+1:n
if r(j) < r(i)
rr = r(i); r(i) = r(j); r(j) = rr;
end;
end;
end;
return;

Phần 2: Bài tập:


2.1 Vấn đề 1
a)
Thể tích của trụ nước được tính bằng công thức :
V = Sđáy L (*)

Xét θ ∈ [0; 𝜋]; ℎ ∈ [0; 𝑟]


S0 : diện tích quạt tròn
S1 : diện tích tam giác AOB
Sđáy : diện tích đáy trụ nước

AB = 2√𝑟 2 − (𝑟 − ℎ)2 = 2√2𝑟ℎ − ℎ2


S0 = S1 + Sđáy (**)
𝑟−ℎ
θ = 2arccos( )
𝑟
1 𝑟−ℎ
S0 = θ 𝑟2 = arccos( ) 𝑟2
2 𝑟
𝟏
S1 = (𝒓 − 𝒉)AB = (𝒓 − 𝒉) √𝟐𝒓𝒉 − 𝒉𝟐 (***)
𝟐

Từ (*),(**) và (***) ta có công thức tính thể tích trụ nước:


𝒓−𝒉
V = [ 𝒓2arccos( ) - (𝒓 − 𝒉) √𝟐𝒓𝒉 − 𝒉𝟐 ] L
𝒓

ℎ ∈ [0; 𝑟]

b) V = 8 (m3), L = 5 (m), 𝒓 = 2 (m)


Thể tích bể nước hình trụ: V0 = L𝜋 𝑟2 ≈ 62.83185307
1
V < V0 → ℎ ∈ [0; 𝑟]
2

Áp dụng công thức tính thể tích:


𝒓−𝒉
V = [ 𝒓2arccos( ) - (𝒓 − 𝒉) √𝟐𝒓𝒉 − 𝒉𝟐 ] L
𝒓

- Phương pháp chia đôi:


8 2−ℎ
f(h)= – 4arccos( ) + (2-h) √4ℎ − ℎ2
5 2

f(0.75) ≈ -0.0310973 < 0


f(0.70) ≈ 0.1229814 > 0
→ (0.7;0.75) là khoảng phân li nghiệm của f(h)
Để sai số bé hơn 10−5
|0.75−0.7|
≤ 10−5
2𝑛+1

→ n ≥ 12
n h a b f(h)
0 0.725 0.7 0.75 +
1 0.7375 0.725 0.75 +
2 0.74375 0.7375 0.75 -
3 0.740625 0.7375 0.74375 -
4 0.7390625 0.7375 0.740625 +
5 0.73984375 0.7390625 0.740625 +
6 0.740234375 0.73984375 0.740625 -
7 0.7400390625 0.73984375 0.740234375 -
8 0.7399414063 0.73984375 0.7400390625 +
9 0.7399902344 0.7399414063 0.7400390625 +
10 0.7400146484 0.7399902344 0.7400390625 +
11 0.7400268555 0.7400146484 0.7400390625 -
12 0.7400207520 0.7400146484 0.7400268555 -

h = 0.7400207520 ≈ 0.7400

- Phương pháp cát tuyến:


ℎ𝑛−1 − ℎ𝑛−2
ℎ𝑛 = ℎ𝑛−1 – f(ℎ𝑛−1 )
f (ℎ𝑛−1 )− f (ℎ𝑛−2 )

Chiều cao cột nước |ℎ𝑛 − ℎ𝑛−1 |


ℎ0 0.7
ℎ1 0.75 0.05
ℎ2 0.7399086295 0.0100913705
ℎ3 0.740014942 1.063125x10-4
ℎ4 0.7400152181 2.761x10-7

h = 0.7400152181 ≈ 0.7400
c) Cơ sở lý thuyết
Điểm cố định là một điểm thỏa mãn phương trình 𝑥 = 𝑔(𝑥), có vô số cách chọn
hàm 𝑔(𝑥).
Lặp điểm cố định: từ phương trình cho trước 𝑓(𝑥) = 0 ta có thể biến đổi về
dạng 𝑥 = 𝑔(𝑥) rồi sử dụng bước lặp với một số thuộc điều kiện biến chạy.
𝑥𝑖+1 = 𝑔(𝑥𝑖 ), 𝑖 = 0, 1, 2, …,
Điều kiện: 𝑀𝑎𝑥|𝑔′ (𝑥)| = 𝑞 < 1, ∀𝑥 ∈ [𝑎, 𝑏]
Hệ số co q
q càng nhỏ thì tốc độ hội tụ càng cao
nếu 𝑞 ≥ 1 thì hàm không hội tụ nên 𝑔(𝑥) đã chọn vô nghĩa
Sai số:
𝑞 𝑛 |𝑥1 −𝑥0 |
|𝑥𝑛 − 𝑥 ∗ | ≤ (đánh giá tiên nghiệm)
1−𝑞

𝑞|𝑥𝑛 −𝑥𝑛−1 |
|𝑥𝑛 − 𝑥 ∗ | ≤ (đánh giá hậu nghiệm)
1−𝑞

GIẢI
𝑟−ℎ
𝑉 = [𝑟 2 cos −1 ( ) − (𝑟 − ℎ)√2𝑟ℎ − ℎ2 ] 𝐿, ∀ℎ ∈ [0; 𝑟]
𝑟

Áp dụng các số liệu sẵn có


𝑉 = 8(𝑚3 ), 𝐿 = 5(𝑚), 𝑟 = 2(𝑚), ta được
2−ℎ
8 = [4 cos −1 ( ) − (2 − ℎ)√4ℎ − ℎ2 ] 5, ∀ℎ ∈ [0; 2]
2

Ta dễ dàng suy ra
2−ℎ 2−ℎ
cos (0,4 + √4ℎ − ℎ2 ) = , ∀ℎ ∈ [0; 2]
4 2

hay
2−ℎ
ℎ = 2 − 2 cos (0,4 + √4ℎ − ℎ2 ) = 𝑔(ℎ), ∀ℎ ∈ [0; 2]
4

lấy đạo hàm bậc 1 của 𝑔(ℎ)

′ (ℎ)
−√4ℎ − ℎ2 (2 − ℎ)2 2−ℎ
𝑔 = 2.( + ) 𝑠𝑖𝑛 (0,4 + √4ℎ − ℎ2 ) , ∀ℎ
4 4√4ℎ − ℎ2 4
∈ (0; 2]
ta có thể viết lại
′ (ℎ)
ℎ2 − 4ℎ + 2 2−ℎ
𝑔 =( ) 𝑠𝑖𝑛 (0,4 + √4ℎ − ℎ2 ) , ∀ℎ ∈ (0; 2]
√4ℎ − ℎ 2 4
lấy đạo hàm của 𝑔′ (ℎ)

′′ (ℎ)
(2ℎ − 4)√4ℎ − ℎ2
𝑔 = {[
4ℎ − ℎ2
(ℎ2 + 4ℎ + 4)(2 − ℎ) 2−ℎ
− ] sin (0,4 + √4ℎ − ℎ2 )
(4ℎ − ℎ2 )√4ℎ − ℎ2 4
2
ℎ2 − 4ℎ + 2 2−ℎ
+( ) cos (0,4 + √4ℎ − ℎ2 )}
√4ℎ − ℎ 2 4

do 𝑔′′ (ℎ) > 0, ∀ℎ ∈ (0; 2] nên 𝑔′ (ℎ) đồng biến trên (0; 2], vậy 𝑞 =
𝑀𝑎𝑥|𝑔′ (ℎ)| = |𝑔′ (2)|
Theo yêu cầu đề là tìm h sao cho sai số tiên nghiệm nhỏ hơn 10−5

∗|
𝑞 𝑛 |ℎ − ℎ0 |
|ℎ𝑛 − ℎ ≤
1−𝑞
ℎ0 = 1
tại { ℎ = 𝑔(ℎ)
𝑞 = 𝑀𝑎𝑥|𝑔′ (ℎ)| = |𝑔′ (2)|
sử dụng máy tính bỏ túi suy ra 𝑛 > 11,6032. Lập bảng

n xn
0 1
1 0.654700933
2 0.7532341098
3 0.7371914289
4 0.7405930229
5 0.7398958751
6 0.7400398208
7 0.7400101442
8 0.7400162644
9 0.7400150023
10 0.7400152626
11 0.7400152089
12 0.7400152199

Vậy ℎ12 = 0,740015 (làm tròn theo quy tắc quá bán) thì thỏa đề tại ℎ0 = 1
d. Phương Pháp Newton-Raphson
𝑓(ℎ𝑛 )
ℎ𝑛+1 = ℎ𝑛 −
𝑓 ′ (ℎ𝑛 )
𝑓 ′′ (1.5) = −2.582
𝑓(1.5) = −13.521092
⇔ 𝑓(1.5) ∗ 𝑓 ′′ (1.5) > 0
Vậy ta chọn điểm ℎ0 = 1.5 là điểm Fourier
n ℎ𝑛+1 ∆ℎ𝑛+1
0 0.801774 0.073650
1 0.740931 0.001075
2 0.740015 0.257*10-6
Vậy nghiệm gần đúng là ℎ2 = 0.740015
2.2 Vấn đề 2
2.2.1 Cơ sở lý thuyết
Phương pháp nhân tử LU
- Định lí: Nếu A là ma trận không suy biến, thì bao giờ cũng tồn tại một ma trận
P không suy biến sao cho ma trận P = A phân tích được thành tích của ma trận
tam giác dưới L và ma trận tam giác trên U, nghĩa là PA = LU.
- Có rất nhiều phương pháp phân tích A = LU, tuy nhiên ta thường xét trường
hợp ma trận L có đường chéo chính bằng 1 và gọi là phương pháp Doolittle. Khi
đó L và U có dạng:
1 0 … 0 𝑢1,1 𝑢1,2 𝑢1,3 … 𝑢1,𝑛
𝑙2,1 1 0 0 0 𝑢2,2 𝑢2,3 … 𝑢2,𝑛
𝐿 = 𝑙3,1 𝑙3,2 1 0 𝑣à 𝑈 = 0 0 ⋱ ⋱ ⋮
⋮ ⋮ ⋱ ⋮ ⋮ ⋮ 𝑢𝑛−1,𝑛
[𝑙𝑛,1 𝑙𝑛,2 … 𝑙𝑛,𝑛−1 1] [ 0 0 𝑢𝑛,𝑛 ]

Các phần tử của hai ma trận L và U được xác định theo công thức:
𝑢1𝑗 = 𝑎1𝑗 , (1 ≤ 𝑗 ≤ 𝑛), (ℎà𝑛𝑔 1 𝑐ủ𝑎 𝑈)
𝑎𝑖1
𝑙𝑖1 = , (2 ≤ 𝑖 ≤ 𝑛), (𝑐ộ𝑡 1 𝑐ủ𝑎 𝐿)
𝑢11
𝑖−1

𝑢𝑖𝑗 = 𝑎𝑖𝑗 − ∑ 𝑙𝑖𝑘 𝑢𝑘𝑗 , (1 < 𝑖 ≤ 𝑗) , (ℎà𝑛𝑔 𝑖 𝑐ủ𝑎 𝑈)


𝑘=1
𝑗−1
1
𝑙𝑖𝑗 = (𝑎 − ∑ 𝑙𝑖𝑘 𝑢𝑘𝑗 ) ) , (1 < 𝑗 < 𝑖), (𝑐ộ𝑡 𝑗 𝑐ủ𝑎 𝐿)
𝑢𝑗𝑗 𝑖𝑗
{ 𝑘=1

2.2.2 Giải quyết bài toán


a) Viết hàm phân tích nhân tử ma trận A thành A = LU bằng phương thức
Doolitle’s (không sử dụng lệnh tồn tại trong Matlab hoặc Python), sử dụng
hàm của bạn để giải quyết vấn đề tiếp theo
Hình ảnh đoạn code trên phần mềm Maple
b) Một kỹ sư điện giám sát việc sản xuất 3 loại linh kiện điện tử, 3 loại vật
liệu kim loại, nhựa và cao su được sử dụng làm nên các loại linh kiện.
Lượng nguyên liệu cần để làm nên chúng:
Kim loại, Nhựa, Cao su,
Linh (g/linh (g/linh (g/linh
kiện kiện) kiện) kiện)
1 15 0.30 1.0
2 17 0.40 1.2
3 19 0.55 1.5
Nếu mỗi ngày có tổng cộng 3.89, 0.095 và 0.282 kg của sắt, nhựa và cao su
thì mỗi ngày có thể sản xuất được bao nhiêu linh kiện? (Phải hiển thị kết
quả sau: Ma trận L, nghiệm của hệ 𝑳𝒚 = 𝑩, ma trận U, nghiệm của hệ
𝑼𝒙 = 𝒚)
- Đổi đơn vị: 3.89kg = 3890g, 0.095kg = 95g và 0.282kg = 282g.
- Từ dữ liệu bài toán, ta xây dựng một hệ phương trình:
15𝑎 + 17𝑏 + 19𝑐 = 3890
{0.3𝑎 + 0.4𝑏 + 0.55𝑐 = 95
𝑎 + 1.2𝑏 + 1.5𝑐 = 282
15 17 19 3890
Suy ra, ta có ma trận 𝐴 = (0.3 0.4 0.55), ma trận 𝐵 = ( 95 ) và ma trận
1 1.2 1.5 282
𝑎
𝑋 = (𝑏 ).
𝑐
- Sử dụng hàm ở câu a, ta tiến hành nhập vào giá trị các phần tử của ma trận A
và giá trị các phần tử của ma trận B (nhập theo hàng). Sau mỗi lần nhập giá trị
đều ấn enter để tiến đến nhập giá trị tiếp theo. Kết thúc bước nhập bằng cách ấn

enter, chương trình sẽ chạy và trả ra màn hình kết quả.


Nhập vào giá trị các phần tử của ma trận A

Nhập vào giá trị các phần tử của ma trận B


Chương trình trả về ma trận L, nghiệm của hệ Ly = B, ma trận U, nghiệm của
hệ Ux = y
- Dựa trên kết quả nghiệm X mà chương trình xuất ra màn hình thì nghiệm của
X là:
𝑎 ≈ 90
{𝑏 ≈ 60
𝑐 ≈ 80
=> Vậy nếu mỗi ngày có tổng cộng 3.89, 0.095 và 0.282 kg kim loại, nhựa và
cao su thì mỗi ngày có thể sản xuất được 90 linh kiện (1), 60 linh kiện (2), 80
linh kiện (3) và tổng cộng sản xuất được 230 linh kiện.
2.2.3 Đánh giá sai số
- Nghiệm đúng của hệ phương trình:
15𝑎 + 17𝑏 + 19𝑐 = 3890 𝑎 = 90
{0.3𝑎 + 0.4𝑏 + 0.55𝑐 = 95 ⇔ {𝑏 = 60
𝑎 + 1.2𝑏 + 1.5𝑐 = 282 𝑐 = 80
- Sai số tuyệt đối của nghiệm:
∆𝑎 = |𝑎 − 𝐴| = |90.00000260 − 90| = 2.6 × 10−6
{∆𝑏 = |𝑏 − 𝐵| = |59.99999617 − 60| = 3.83 × 10−6
∆𝑐 = |𝑐 − 𝐶| = |80.00000135 − 80| = 1.35 × 10−6
- Sai số tương đối của nghiệm:
∆𝑎 2.6 × 10−6
𝛿𝑎 = = ≈ 2.8889 × 10−8
𝐴 90
∆𝑏 3.83 × 10−6
𝛿𝑏 = = ≈ 6.3834 × 10−8
𝐵 60
∆𝑐 1.35 × 10−6
{ 𝛿𝑐 = 𝐶 = ≈ 1.6875 × 10−8
80
=> Sai số của nghiệm do chương trình trả ra màn hình và nghiệm đúng của hệ
phương trình tương đối nhỏ, không đáng kể.
2.2.4 Nhận xét
Ưu điểm của phương pháp LU:
- Do L và U là các ma trận tam giác nên cần 𝑂(𝑛2 ) để tìm nghịch đảo.
- Giải ngược, với k vế phải khác nhau:
+ 𝑂(𝑘𝑛3 ) với khử Gauss
+ 𝑂(𝑛3 + 𝑘𝑛2 ) với khử LU
- Ngoài ra từ 𝐴 = 𝐿𝑈 có thể tính 𝐴−1 , 𝑑𝑒𝑡(𝐴) , 𝑟𝑎𝑛𝑘(𝐴), 𝑘𝑒𝑟(𝐴) , …
2.3 Vấn đề 3
2.3.1 Giải quyết bài toán
a)
Ta có công thức diện tích và thể tích là

𝑧
𝑆 = ∫ 2𝜋r dz
0
𝑧
𝑉 = ∫ 𝜋r 2 dz
0

Mà z=0 và z=L vậy


𝐿
𝑆 = 𝜋 ∫ d dz
0

d 2
𝐿
𝑉 = 𝜋 ∫ ( ) dz
0 2

b)
d 2
Đặt f(x)= 𝜋d và g(x)= 𝜋 ( ) ta có bảng
2
z 0 1,5 3 4,5 6 7
d 0 2,9 4,8 5,8 6,2 6,7
f(x) 0 2,9𝜋 4,8𝜋 5,8𝜋 6,2𝜋 6,7𝜋
g(x) 0 2,1025𝜋 5,76𝜋 8,41𝜋 9,61𝜋 11,2225𝜋

Do L=12 vậy nên ta sẽ lấy đến mốc z=6 để tính. Gọi S1 và V1 là diện tích và thể
tích nửa quả bóng
Từ đó suy ra h=1,5, S=2.S1 và V=2.V1
*Diện tích bề mặt
-Theo công thức hình thang mở rộng:

S=2.S1=2. . [𝑓(0) + 𝑓(6) + 2. (𝑓(1,5) + 𝑓(3) + 𝑓(4,5))]=49,8 𝜋 (in2)
2

-Theo công thức simpson 1/3 mở rộng:



S=2.S1=2. .[𝑓(0) + 𝑓(6) + 2(𝑓(3)) + 4(𝑓(1,5) + 𝑓(4,5))]=50,6 𝜋 (in2)
3

*Thể tích
-Theo công thức hình thang mở rộng:

V=2.V1=2. . [𝑔(0) + 𝑔(6) + 2. (𝑔(1,5) + 𝑔(3) + 𝑔(4,5))]=63,2325 𝜋 (in3)
2

-Theo công thức simpson 1/3 mở rộng:



V=2.V1=2. .[𝑔(0) + 𝑔(6) + 2(𝑔(3)) + 4(𝑔(1,5) + 𝑔(4,5))]=63,18 𝜋 (in3)
3

2.3.2 Phần code


syms x f s c k
f = input('Nhập hàm trong dấu tích phân ')
a = input('Giá trị bắt đầu của tích phân ')
b = input('Giá trị kết thúc của tích phân ')
n = input('Số điểm n ')
v = mod(n,1) % kiểm tra n có phải số nguyên không
if v~=0
'Không hợp lệ, n phải là số nguyên dương'
else
if n > 1 & n < 6 %kiểm tra có thuộc vùng lập trình không
if (a == -1) & (b== 1) %biến đổi hàm nếu tích phân khác khoảng [-1;1]
else
k = (b-a)/2*x +(b-a)/2
f = (b-a)/2*f
end;
Y = zeros(5) %tạo bảng trọng số
Z = zeros(5) %tạo bảng giá trị
KQ = zeros(5) %tạo bảng phụ tính kết quả
Y(2,1)=1;Y(2,2)=1;
Z(2,1)=-sqrt(1/3);Z(2,2)=sqrt(1/3);
Y(3,1)=5/9;Y(3,2)=8/9;Y(3,3)=5/9;
Z(3,1)=-sqrt(0.6);Z(3,2)=0;Z(3,3)=sqrt(0.6);
Y(4,1)=0.34785;Y(4,2)=0.65215;Y(4,3)=0.65215;Y(4,4)=0.34785;
Z(4,1)=-0.86114;Z(4,2)=-0.33998;Z(4,3)=0.33998;Z(4,4)=0.86114;
Y(5,1)=0.23693;Y(5,2)=0.47863;Y(5,3)=0.56889;Y(5,4)=0.47863;Y(5,5)=0.236
93;
Z(5,1)=-0.90618;Z(5,2)=-0.53847;Z(5,3)=0;Z(5,4)=0.53847;Z(5,5)=0.90618;
s=0
for i=1:n
c=subs(k,x,Z(n,i)); %thế các giá trị vào hàm
KQ(n,i)=subs(f,x,c); %nhập các giá trị của hàm ở các điểm giá trị
end;
for i=1:n
s=s+Y(n,i)*KQ(n,i); %tổng của tích trọng số và giá trị hàm
end;
fprintf("xuất các bảng ");
Y
Z
KQ
fprintf("kết quả tích phân bằng phương pháp cầu phương Gauss: ");
s
else
if n < 0
'Không hợp lệ'
2.3.3 Các ví dụ
Phần 3: Tài liệu tham khảo
Lê Thái Thanh, Giáo trình Phương pháp tính, Nhà xuất bản Đại học Quốc gia
TPHCM-2020

You might also like