Nghiên cứu ứng dụng thuật toán Gauss-Jourdal trong xử lý số liệu trắc địa công trình

Bài báo này đã ứng dụng thuật toán Gauss_Jordan để xử lý số liệu đo

trong trắc địa công trình. Cụ thể là ứng dụng thuật toán Gauss_Jordan để tiến hành

đồng thời giải bài toán tuyến tính và nghịch đảo ma trận trong bài toán bình sai và

đánh giá độ chính xác trị đo. Kết quả việc ứng dụng là giải thuật, modul phần mềm

tính toán bình sai và đánh giá độ chính xác trị đo, làm cho bài toán đơn giản hơn và

tính toán nhanh hơn trên máy tính, ngoài ra còn dễ dàng hơn cho việc quản lý, lập

chương trình và cập nhật chương trình trên máy tính.

pdf 7 trang thom 08/01/2024 1640
Bạn đang xem tài liệu "Nghiên cứu ứng dụng thuật toán Gauss-Jourdal trong xử lý số liệu trắc địa công trình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Nghiên cứu ứng dụng thuật toán Gauss-Jourdal trong xử lý số liệu trắc địa công trình

Nghiên cứu ứng dụng thuật toán Gauss-Jourdal trong xử lý số liệu trắc địa công trình
Nghiên cứu khoa học công nghệ 
Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san CBES, 04 - 2018 225
NGHIÊN CỨU ỨNG DỤNG THUẬT TOÁN GAUSS-JOURDAL 
TRONG XỬ LÝ SỐ LIỆU TRẮC ĐỊA CÔNG TRÌNH 
Nguyễn Việt Hà1,*, Phạm Tuấn Cường2 
Tóm tắt: Bài báo này đã ứng dụng thuật toán Gauss_Jordan để xử lý số liệu đo 
trong trắc địa công trình. Cụ thể là ứng dụng thuật toán Gauss_Jordan để tiến hành 
đồng thời giải bài toán tuyến tính và nghịch đảo ma trận trong bài toán bình sai và 
đánh giá độ chính xác trị đo. Kết quả việc ứng dụng là giải thuật, modul phần mềm 
tính toán bình sai và đánh giá độ chính xác trị đo, làm cho bài toán đơn giản hơn và 
tính toán nhanh hơn trên máy tính, ngoài ra còn dễ dàng hơn cho việc quản lý, lập 
chương trình và cập nhật chương trình trên máy tính. 
Từ khóa: Xử lý số liệu trắc địa; Đánh giá độ chính xác; Nghịch đảo ma trận. 
1. MỞ ĐẦU 
Đối với công tác xử lý số liệu trắc địa công trình, tính đúng đắn của số liệu sau xử lý 
không những phụ thuộc vào độ chính xác đo đạc thực địa, mà còn chịu ảnh hưởng rất lớn bởi 
phương pháp xử lý số liệu. Từ trước đến nay đã có nhiều chương trình tính toán xử lý số liệu 
trắc địa công trình như chương trình bình sai mặt bằng, độ cao; chương trình đánh giá độ 
chính xác mặt bằng, độ cao; chương trình tính chuyển tọa độ,... các chương trình trên thường 
có một nội dung tính toán rất quan trọng là giải bài toán tuyến tính và nghịch đảo ma trận 
cho việc tính toán các hàm trọng số phục vụ đánh giá độ chính xác của các hàm ẩn số. Trước 
đây, việc giải bài toán tuyến tính và nghịch đảo ma trận thường được tiến hành theo thuật 
toán Gauss, thuật toán khai căn Choleski hoặc thuật toán truy hồi [1, 2, 4]. 
Với các thuật toán trên việc giải bài toán tuyến tính và nghịch đảo ma trận được tiến 
hành độc lập và theo một thuật toán phức tạp, điều này sẽ làm cho bài toán dài hơn và chậm 
hơn, ngoài ra còn gây khó khắn cho việc quản lý và lập chương trình và cập nhật chương 
trình trên máy tính. Trong khuôn khổ của bài báo khoa học này, nhóm nghiên cứu chúng tôi 
sẽ đề xuất phương pháp ứng dụng thuật toán Gauss_Jordal [2] để giải quyết bài toán giải 
phương trình tuyến tính và nghịch đảo ma trận trên cùng một phép tính. Điều này mang lại 
nhiều ưu điểm như tiết kiệm thời gian tính toán, thuật toán đơn giản, dễ quản lý, dễ hiểu. 
2. BÀI TOÁN TUYẾN TÍNH VÀ CÁC PHƯƠNG PHÁP GIẢI 
2.1. Bài toán tuyến tính trong trắc địa công trình 
Trong toán học một hệ phương trình gồm n phương trình tuyến tính với n ẩn số x
1
, 
x
2
,...,x
n 
có dạng như sau: 
 (1) 
Hệ phương trình tuyến tính trên có thể viết dưới dạng phương trình ma trận là AX = b, 
trong đó: 
11 12 1
21 22 2
1 2
...
...
... .... ... ...
...
n
n
n n nn
a a a
a a a
A
a a a
; 
1
2
...
n
x
x
X
x
; 
1
2
...
n
b
b
b
b



nn nn 2n2 1n1
2n 2n 222 121
1n 1n 212 111
b xa . . . xa xa
............................ . . . . . . . . . . . . . . . .
b xa . . . xa xa
b xa . . . xa xa
Toán học, Cơ học & Ứng dụng 
 N. V. Hà, P. T. Cường, “Nghiên cứu ứng dụng thuật toán  số liệu trắc địa công trình.” 226 
Nếu det(A) ≠ 0 thì nghiệm của hệ (1) có thể tính theo công thức 
1X A b . Áp dụng 
công thức tính ma trận nghịch đảo ta có thể biến đổi và dẫn đến lời giải được diễn tả bằng 
định lý Cramer như sau: 
Định lý Cramer. Gọi A
j 
là ma trận nhận được từ ma trận A bằng cách thay cột thứ j bằng 
cột b, khi đó hệ (1) có nghiệm duy nhất và x
j 
được tính bởi công thức 
det(A )
det(A)
j
jx (2) 
Tuy nhiên, trong thực hành người ta không dùng công thức này để tính nghiệm vì số 
phép tính quá lớn. Người ta dùng những phương pháp hữu hiệu hơn mà chúng tôi sẽ giới 
thiệu sau đây. 
2.2. Một vài phương pháp giải bài toán tuyến tính trong trắc địa công trình 
a. Phương pháp khử Gauss 
Phương pháp khử Gauss dùng cách khử dần các ẩn số để đưa hệ phương trình tuyến 
tính về một dạng tam giác trên rồi giải hệ tam giác này từ dưới lên trên, không phải tính 
một định thức nào. Phương pháp này được thực hiện qua các bước sau: 
Quá trình xuôi: 
- Bước 1: Dùng phương trình trên cùng để khử x
1 
trong n-1 phương trình còn lại. Giả 
sử a
11
≠0. (Để cho đơn giản, trước khi khử ta có thể chia phương trình thứ nhất cho a
11 
). 
Cụ thể để khử x
1 
ở các hàng tiếp theo thứ k( k=2,3,n) ta phải tính lại các hệ số a
kj 
ở 
hàng thứ k (với j=1,2,..n+1) như sau: a
kj
=a
kj
-a
1j
*a
k1
/a
11 
- Bước 2: Dùng phương trình thứ 2 để khử x
2 
trong n-2 phương trình còn lại tiếp theo. 
Giả sử a
22
≠0. (Để cho đơn giản, trước khi khử ta có thể chia phương trình thứ hai cho a
22
). 
Cụ thể để khử x
2 
ở hàng tiếp theo thứ k (k=3,4,n) ta phải tính lại các hệ số a
kj 
ở hàng 
thứ k (j=2,..n+1) như sau: a
kj
=a
kj
-a
2j
*a
k2
/a
22 
- Bước i: Dùng phương trình i để khử x
i 
trong các phương trình tiếp theo thứ i+1,i+2, 
..., n. Giả sử a
ii
≠0. Để cho công thức đơn giản, trước khi khử ta có thể chia phương trình 
thứ i cho a
ii
. 
Cụ thể để khử x
i 
ở hàng thứ k (k=i+1,n) ta phải tính lại các hệ số a
kj 
ở hàng thứ k 
(j=i,..n+1) như sau: a
kj
=a
kj
-a
ij
*a
ki
/a
ii 
- Bước n-1: Dùng phương trình thứ n-1 để khử x
n-1 
trong phương trình thứ n. Giả sử 
a
n-1 n-1
≠0. (Để cho đơn giản, trước khi khử x
n-1
 ta có thể chia phương trình thứ n-1 cho a
n-1 
n-1
) 
Cụ thể để khử x
n-1 
ở hàng thứ n ta phải tính lại các hệ số a
nj 
ở hàng thứ n (j=n-
1,n,n+1) như sau: a
nj
=a
nj
-a
n-1j
*a
n-1i
/a
n-1n-1 
Kết thúc quá trình khử. 
 Quá trình giải ngược 
 x
n 
= b
n
/a
nn 
hoặc ( x
n
=b
n
) 
 . . . 
 x
i 
= (b
i 
-(aΣ+=nij1
ij
x
j
) )/a
ii 
) hoặc (b
i 
-(aΣ+=nij1
ij
x
j
) ), i =n-1, n-2, ..., 1 
Ta áp dụng các phép biến đổi sơ cấp như vừa trình bày để biến đổi ma trận chữ nhật 
cấp nx(n+1) trên đây về dạng: 
Nghiên cứu khoa học công nghệ 
Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san CBES, 04 - 2018 227
b. Phương pháp khử Gauss-Jordan 
Phương pháp khử Gauss-Jordan dùng cách khử dần các ẩn để đưa hệ phương trình 
đã cho về một dạng ma trận đường chéo rồi giải hệ phương trình này, không phải tính một 
định thức nào 
Phương pháp này được thực hiện qua các bước sau: 
- Bước 1: Dùng phương trình đầu tiên để khử x
1 
trong n-1 phương trình còn lại, cách 
làm tương tự như phương pháp khử để tính định thức... (Để cho công thức đơn giản, trước 
khi khử ta có thể chia phương trình thứ nhất cho a
11
). 
Cụ thể để khử x
1 
ở hàng thứ k( k=2,3,n) ta phải tính lại các hệ số a
kj 
ở hàng thứ k 
(j=1,2,..n+1) như sau: a
kj
=a
kj
-a
1j
*a
k1
/a
11
- Bước i: Dùng phương trình i để khử x
i 
trong các phương trình thứ 1,2, i-
1,i+1,i+2,...,n.. (Để cho công thức đơn giản, trước khi khử ta có thể chia phương trình thứ 
i cho a
ii
). 
Cụ thể để khử x
i 
ở hàng thứ k (k=1,2, i-1,i+1,i+2,...,n.) ta phải tính lại các hệ số a
kj 
ở 
hàng thứ k (j=i,..n+1) như sau: a
kj
=a
kj
-a
ij
*a
ki
/a
ii . 
- Bước n: Dùng phương trình thứ n để khử x
n 
trong phương trình thứ 1,2, ..., n-1.. (Để 
cho công thức đơn giản, trước khi khử ta có thể chia phương trình thứ n cho a
nn
) 
Cụ thể để khử x
n 
ở hàng thứ k( k=1,2, ..,n-1.) ta phải tính lại các hệ số a
kj 
ở hàng thứ k 
(j=n,n+1) như sau: a
kj
=a
kj
-a
nj
*a
kn
/a
nn 
Tương tự phép khử Gauss tại mỗi bước, trước khi khử ta phải chọn trụ tối đại. Cụ thể 
tại bước i ta luôn chọn hàng có phần tử a
ri 
có giá trị tuyệt đối lớn nhất rồi đổi cho hàng thứ 
i cho hàng thứ r. 
Hệ phương trình sau khi khử có dạng: 
Hoặc nếu tại các bước (bước i) ta chia cho hệ số a
ii
: 
Tức là ta đã có các nghiệm mà không cần phải tính toán thêm. 
Cũng như trong phương pháp khử Gauss, khi cài đặt trên máy tính ta dùng một mảng 
a thay cho cả ma trận A và vec tơ b. Tức là: 
1
'
12
'
2
'
11
'
1
'
12
1......00
..................
..................
......10
......1
nn
nn
nn
a
aa
aaa
nn nn 
 2 2 22
 1 1 11
b xa 
.......................................
bxa 
b xa
1 1 
2 2 
x b
 x b
.......................................
n n x b
Toán học, Cơ học & Ứng dụng 
 N. V. Hà, P. T. Cường, “Nghiên cứu ứng dụng thuật toán  số liệu trắc địa công trình.” 228 
Ta áp dụng các phép biến đổi sơ cấp như vừa trình bày để biến đổi ma trận chữ nhật 
cấp nx(n+1) trên đây về dạng 
Vậy ta có x
i 
= a'
i,(n+1). 
3. ÁP DỤNG PHƯƠNG PHÁP KHỬ GAUSS - JORDAN ĐỂ TÍNH MA TRẬN 
NGHỊCH ĐẢO
Để giải hệ n phương trình n ẩn Ax = b, trong phương pháp khử Gauss-Jordan ta đã 
dùng các phép biến đổi sơ cấp để đưa phương trình này về dạng: 
 Ex = b' (3) 
Vì Ex = x, do đó, ta có x=b'. Nếu B là một ma trận chữ nhật cấp n x k tùy ý, ta có thể 
áp dụng phương pháp khử Gauss-Jordan để giải đồng thời k hệ n phương trình n ẩn: 
 AX = B (4) 
trong đó: 
Ta viết ma trận B bên phải ma trận A như sau: 
Nếu ma trận A không suy biến, ta có thể áp dụng các phép biến đổi sơ cấp để đưa ma 
trận này về dạng: 
nnnnn
n
n
nnnnnn
nn
nn
baaa
baaa
baaa
aaaa
aaaa
aaaa
......
..................
..................
......
......
......
..................
..................
......
......
21
222221
111211
121
1222221
1111211
1
'
12
'
11
'
1......00
..................
..................
0......10
0......01
nn
n
n
a
a
a
nknn
k
k
xxx
xxx
xxx
X
...
............
...
...
21
22221
11211
nknn
k
k
bbb
bbb
bbb
B
...
............
...
...
21
22221
11211
nknnnnnn
kn
kn
bbbaaa
bbbaaa
bbbaaa
......
........................
......
......
2121
2222122221
1121111211
11 12 1
21 22 2
1 2
1 0 ... 0 ' ' ... '
0 1 ... 0 ' ' ... '
... ... ... ... ... ... ... ...
0 0 ... 1 ' ' ... '
k
k
n n nk
b b b
b b b
b b b
Nghiên cứu khoa học công nghệ 
Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san CBES, 04 - 2018 229
Khi đó, ta có: 
Đặt: 
Xét trường hợp đặc biệt B = E, ta có ma trận B' chính là ma trận nghịch đảo của ma 
trận A. Thật vậy, nếu X là nghiệm của (4) thì: 
 X = A
-1
B (5) 
Nếu B = E thì X = A
-1
. Do đó, việc tìm ma trận nghịch đảo của ma trận A tương 
đương với việc giải phương trình 
 AX = E (6) 
Vậy để tính ma trận nghịch đảo ta cần thực hiện các bước sau: 
• Viết thêm ma trận đơn vị E bên cạnh ma trận A 
• Áp dụng phép biến đổi sơ cấp trên hàng cho đến khi ma trận có dạng 
Khi đó ta có 
Chú ý. Trong quá trình biến đổi ta có thể đổi các hàng của ma trận. Điều này không 
ảnh hưởng đến kết quả thu được: Ma trận C vẫn là ma trận nghịch đảo của ma trận A ban 
đầu. Lý do là vì để tìm ma trận nghịch đảo ta chỉ cần xác định ma trận nghiệm. Ma trận 
nghiệm không bị thay đổi nếu ta đổi chỗ các hàng. 
4. LẬP CHƯƠNG TRÌNH TÍNH TOÁN ÁP DỤNG 
THUẬT TOÁN GAUSS- JORDAN 
;
'...''
............
'...''
'...''
...
............
...
...
21
22221
11211
21
22221
11211
nknn
k
k
nknn
k
k
bbb
bbb
bbb
xxx
xxx
xxx
X
nknn
k
k
bbb
bbb
bbb
B
'...''
............
'...''
'...''
'
21
22221
11211
1...00...
........................
0...10...
0...01...
21
22221
11211
nnnn
n
n
aaa
aaa
aaa
nnnn
n
n
ccc
ccc
ccc
...1...00
........................
...0...10
...0...01
21
22221
11211
nnnn
n
n
ccc
ccc
ccc
A
...
............
...
...
21
22221
11211
1
Toán học, Cơ học & Ứng dụng 
 N. V. Hà, P. T. Cường, “Nghiên cứu ứng dụng thuật toán  số liệu trắc địa công trình.” 230 
a. Môđun lập hệ phương trình số hiệu chỉnh và lập hệ phương trình chuẩn 
 void Pthc(int i,int sdm) 
 { 
 int m,i1,i2; 
 for( m=1;m<=sdm+1;m++) a[m]=0.0; 
 i1=trido[i].ds; 
 i2=trido[i].dt; 
 a[i1]=-1.0; 
 a[i2]=1.0; 
 a[sdm+1]=trido[i].hh-(diem[i2].h-diem[i1].h); 
 } 
 //-------------------------------------------------------} 
 void Ptc(int i,int sdm) 
 { 
 double p; int j,i1,i2; 
 p=1.0/trido[i].tram; 
 for(i1=1;i1<=sdm+1;i1++) 
 for(i2=i1;i2<=sdm+1;i2++) 
 rnm[i2*(i2-1)/2+i1]=rnm[i2*(i2-1)/2+i1]+p*a[i1]*a[i2]; 
 } 
b. Môđun giải ẩn và nghịch đảo ma trận bằng thuật toán Gauss-Jordal 
Đây là môđun để giải ẩn và nghịch đảo ma trận trên một thuật toán, với đoạn chương 
trình rất ngắn này có thể thay thế được những môđun rất dài khi viết bằng thuật toán 
Gauss. Theo nhóm nghiên cứu thì cùng một bài toán mà số dòng viết bằng thuật toán 
Gauss-Jordal/ số dòng viết bằng thuật toán Gauss là 18/80. Điều này cho thấy thuật toán 
mà tác giải lựa chọn là tối ưu hơn về mặt quản lý và tốc độ. 
void Gauss_Jordan_Invers(int sdm) 
{ 
int i,j,k,m = 2*sdm+1; 
for (i = 0; i < sdm; i++) 
 for (j = 0; j < sdm; j++) //tao ma tran E phia sau 
 if (j == i) GA[i][sdm+j+1] = 1; 
 else GA[i][sdm+j+1] = 0; 
 for (k = -1; k < sdm - 1; k++) 
 { i = k + 1; 
 for (j = m; j >= i; j--) 
 GA[i][j] = GA[i][j]/GA[i][i]; 
 for (i = 0; i < sdm; i++) 
 { if (i == k + 1) continue; 
 for (j = m; j > k; j--) 
 GA[i][j] = GA[i][j] - GA[i][k+1]*GA[k+1][j]; 
 } 
 } 
} 
5. TÍNH TOÁN THỰC NGHIỆM VÀ KIỂM TRA ĐỘ CHÍNH XÁC CỦA 
CHƯƠNG TRÌNH 
Sau khi hoàn thành phần mềm do nhóm nghiên cứu thành lập, để thực nghiệm kiểm 
chứng độ chính xác và tin cậy của phần mềm, nhóm đã chạy chương trình lấy số liệu quan 
Nghiên cứu khoa học công nghệ 
Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san CBES, 04 - 2018 231
trắc lún công trình Tòa nhà hỗn hợp HH3 khu đô thị mới Mỹ Đình-Mễ Trì-Từ Liêm-Hà 
Nội làm số liệu thực nghiệm, vẫn số liệu đo trên được nhóm nghiên cứu tiến hành bình sai 
bằng hai phần mềm khác là phần mềm PICKNET 3.0 và phần mềm BSDC của TS 
Nguyễn Việt Hà để đánh giá độ chính xác và độ tin cậy của chương trình, kết quả được thể 
hiện ở bảng dưới. 
Chỉ tiêu đánh giá 
Kết quả do 
nhóm 
nghiên cứu 
Kết quả phần 
mềm BSDC 
(Nguyễn Việt Hà) 
Kết quả 
phần mềm 
Picknet 3.0 
Sai số trung phương trọng số đơn vị 0.21 (mm) 0.21 (mm) 0.21 (mm) 
Sai số điểm yếu nhất 0.64 (mm) 0.64 (mm) 0.64 (mm) 
Chênh cao có số hiệu chỉnh lớn nhất 1.47 (mm) 1.5 (mm) 1.5 (mm) 
6. KẾT LUẬN 
Thuật toán Gauss_Jordan mà nhóm tác giả nghiên cứu cho thấy có thể ứng dụng trong 
công tác xử lý số liệu trắc địa công trình, tính đúng đắn của số liệu sau xử lý đã được tính 
toán thực nghiệm và so sánh với một số phần mềm tin cậy hiện nay. 
Với thuật toán Gauss_Jordan cho phép giải bài toán tuyến tính và nghịch đảo ma trận 
được tiến hành đồng thời bằng một thuật toán đơn giản, điều này sẽ làm cho bài toán ngắn 
hơn và tính toán nhanh hơn trên máy tính, ngoài ra còn dễ dàng hơn cho việc quản lý, lập 
chương trình và cập nhật chương trình trên máy tính. 
TÀI LIỆU THAM KHẢO 
[1]. Hoàng Ngọc Hà “Tính toán trắc địa và cơ sở dữ liệu”. NXB Giáo dục -2002 
[2]. Nguyễn Trọng San, Đào Quang Hiếu , Nguyễn Tiến Năng “Giáo trình trắc địa phổ 
thông”. Đại học Mỏ - Địa Chất -1992 
[3]. Nguyễn Trọng San, Đào Quang Hiếu, Đinh Công Hòa “Trắc địa cơ sở'' Tập 1, Tập 
2. Hà Nội – 2002. 
[4]. Trần Khánh, Nguyễn Việt Hà “Bài giảng ứng dụng tin học trong trắc địa công 
trình” Hà Nội 2012. 
[5]. Phạm Hồng Thái “Bài giảng ngôn ngữ lập trình C/C++ ’’. Hà Nội 2003. 
ABSTRACT 
ON THE APPLICATION OF GAUSS-JOURDAL FOR PROCESSING DATA IN 
ENGINEERING SURVEYING 
In this paper, an application of Gauss-Jordan for processing surveyed 
measurements in the field of engineering surveying is presented. This algorithm is 
applied for determining response variables and inverse covariance matries in 
purpose of the adjustment and evaluation of accuracy. A modul using this algorithm 
is developed for surveying applications which has many benefits such as faster for 
running, easier for control of software and update on data. 
Keywords: Surveying processing; Evaluation of accuracy; Inverse matrix. 
Nhận bài ngày 25 tháng 02 năm 2018 
Hoàn thiện ngày 16 tháng 3 năm 2018 
Chấp nhận đăng ngày 20 tháng 3 năm 2018 
Địa chỉ: 1 Khoa Trắc địa, Bản đồ và Quản lý đất đai, Trường Đại học Mỏ - Địa chất; 
 2 Khoa Khoa học cơ bản, Trường Đại học Mỏ - Địa chất ; 
 * Email: nguyenvietha@humg.edu.vn, phamtuancuong@humg.edu.vn 

File đính kèm:

  • pdfnghien_cuu_ung_dung_thuat_toan_gauss_jourdal_trong_xu_ly_so.pdf