Tìm nghiệm xấp xỉ hệ phương trình tuyến tính đại số
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
KHOA TOÁN TIN ỨNG DỤNG
- -
Đề tài: Tìm nghiệm xấp xỉ hệ phương trình tuyến tính đại số
Giáo viên hướng dẫn: Nguyễn Hữu Điển
Sinh viên thực hiện : Lê Minh Cường Lớp: Toán – Tin 1-k51
Hà Nội, tháng 11 năm 2009
Trang 2LỜI NÓI ĐẦU
Nội dung chủ yếu tập trung vào phần giải thuật và cách cài đặt nó trên chương trình ứng dụng Maple, để giải quyết bài toán tìm nghiệm xấp xỉ hệ phương trình tuyến tính đại số
Ax = b bằng các phương pháp như Jacobi hay Gauss_Seidel …
Phiên bản sử dụng là Maple 12.Ở đây xin được trình bày 5 thuật toán chính và cài đặt
3 thuật toán đầu tiên bằng Maple 12
Tuy nhiên do khả năng đọc hiểu tiếng Anh còn hạn chế nên có thể có những chỗ giải thích chưa thoả đáng,rất mong được sự góp ý của thầy cô và bạn bè Xin chân thành cám ơn sự giúp đỡ chỉ bảo tận tình của phó giáo sư Nguyễn Hữu Điển
Mọi đóng góp xin gửi về địa chỉ email : cuongleminh.hut@gmail.com hoặc
thecatmc@yahoo.com
Một lần nữa xin chân thành cám ơn
Sinh viên trình bày: Lê Minh Cường Lớp : Toán Tin 1 – K51
Trang 3I.Chuẩn của Vecto và Ma Trận :
1.Chuẩn Vecto :
Để định nghĩa hàm khoảng cách trong không gian R chúng ta sử dụng khái niệm n
về chuẩn, được định nghĩa như sau :
1.1 Định nghĩa 1:Chuẩn của một vecto trong R ;ký hiệu ;là một hàm n
x x
l
1
2 2
n
i x x
n
x x
n
y y
y= 1, , trong không gian Ta có bất đẳng thức :
n
R
y x y x
y x y
i i n
i i n
i i i
1
2 1
2 1
x= 1, , và ( )t
n
y y
y= 1, , trong không gian Khoảng cách giữa x và y được định nghĩa theo các chuẩn là :
x trong R được gọi là hội tụ đến x với n
chuẩn ⋅ khi ∀ε >0,tồn tại số nguyênN( )ε thỏa mãn :
x k − < ;∀ ≥ 1.6 Định lý : Dãy vecto { }( ) ∞
=1
k k
x hội tụ đến x trong R với chú ý là chuẩn n ,khi ∞
Trang 4Az A
II.Trị riêng và vecto riêng :
Trong trường hợp A là ma trận vuông n chiều,luôn tồn tại một vecto x song song với
Ax nghĩa là tồn tại hằng số λsao cho Ax=λx.Từ đó ta có : (A−λI)x=0.Ta tìm hiểu về mối quan hệ mật thiết giữa λvà sự hợp lý trong thuật toán lặp sẽ hội tụ
1.Định nghĩa 1 : Nếu A là ma trận vuông thì Đa thức đặc trưng của A là :
110
201
A
Trong Maple,ta dùng câu lệnh with()để truy xuất gói lệnh linalg (viết tắt của
Linear Algebra) và sử dụng hàm Eigenvals(A) để tính trị riêng của ma trận A :
Trang 54 Định nghĩa 3 : Bán kính quy chiếu ρ( )A của ma trận A được định nghĩa là
ρ( )A =maxλ với λlà trị riêng của A
Đối với λlà giá trị phức thì λ =α +βi = α2 +β2
5 Định lý : Nếu A là ma trận vuông n chiều thì :
121
011
Trang 6Hiển thị các trị riêng của ma trận A t A
Ngoài ra ta cũng có thể tìm được giới hạn của 1 vecto bằng hàm VectorLimit nằm trong
gói câu lệnh NumericalAnalysis.Ta dùng cú pháp sau : with(Student[NumericalAnalysis])
NumberOfSignificantDigits, PolynomialInterpolation, Quadrature,
RateOfConvergence,
RelativeError, RemainderTerm, Roots, RungeKutta, Secant, SpectralRadius, Steffensen, Taylor,
TaylorPolynomial, UpperBoundOfRemainderTerm, VectorLimit]
Gói lệnh Student hỗ trợ cho việc dạy và học toán
• Từ Maple 8, gói lệnh Student được phát triển từ gói lệnh student trước đó nhằm hỗ trợ cho việc dạy và học toán ở đại học và phổ thông Khai thác khả năng của gói lệnh này sẽ đem đến cho giáo viên rất nhiều công cụ hỗ trợ mới trong phương pháp dạy học Có thể nói rằng gói lệnh này đã đề cập đến tất cả các nội dung toán học của đại học và phổ
Trang 7thông, cung cấp nhiều lệnh và thủ tục cho các phép toán và algorithm xuất hiện trong chương trình giảng dạy, cung cấp nhiều công cụ tương tác dưới dạng Maplet và hỗ trợ việc làm
từng bước các phép toán cơ bản của vi tích phân
• Gói lệnh Student có 3 gói lệnh con là
Trang 8> with(Student[NumericalAnalysis]);
> vectorlimit1:=VectorLimit(v,k);
Ta xét ma trận sau và tìm chuẩn của nó :
> 1,4]]);
Trang 9XO i,1≤ ≤ ( )0
x
XO= ;sai số cho phép TOL;số lần lặp lớn nhất N
- Đầu ra : các nghiệm xấp xỉ hoặc thông báo “Số lượng tối đa của phép lặp đã bị vượt quá”
n
x x
j ij j i
b XO a x
Bước 4 : Nếu x−XO <TOLthì prinf(x1,x2, ,x n);
STOP.(thoát khỏi chương trình con) Bước 5 : Update k = k+1
Bước 6 : Tính toán vecto XO
XO i = ; với x i i=1 …, ,n
Bước 7 : Output “Số lần lặp tối đa đã bị vượt quá!”
STOP
Trang 10local AA, B, OK, N, I, J, X0, X1, TOL, NN, K, ERR, S, X; with(LinearAlgebra);
TOL XO
Output(‘x1, ,x n’) STOP
1+
= k k
Tính các XO i = x i
F
Trang 11A:=Matrix(4,4,[[10,-1,2,0],[-1,11,-1,3],[2,-1,10,-> if Determinant(A)=0 then print("There is no unique solution.")
else print("There is a unique solution.") fi;
Trang 138 [ 1.00062513, 1.99867030, -0.99903558, 0.99888839]
9 [ 0.99967415, 2.00044767, -1.00036916, 1.00061919]
10 [ 1.00011860, 1.99976795, -0.99982814, 0.99978598] Maximum Number of Iterations Exceeded
2.Thuật toán Lặp Gauss-Seidel :
Giải bài toán Ax=bvới xấp xỉ gần đúng là x( )0
- Đầu vào : Số lượng phương trình và nghiệm ;các phần tử của
ma trận A;các thành phần
n a ij,1≤ ,i j≤n n
i
b i,1≤ ≤ của vecto b ;các thành phần
của vecto
n i
XO i;1≤ ≤ XO=x( )0 ;sai số cho phép TOL;Số lần lặp lớn nhất N
- Đầu ra : các nghiệm xấp xỉ hoặc thông báo “Số lượng tối đa của phép lặp đã bị vượt quá”
n
x x
x1, 2, ,
Thuật toán :
Bước 1 : Đặt k = 1
Bước 2 : Trong khi (k≤N) thì thực hiện từ Bước 3 đến Bước 6
Bước 3 : Cho i chạy từ 1 đến n , ta tính các giá trị
( )
ii
i j
i n
i j
j ij j
ij i
a
b XO a x
Trang 14local AA, B, OK, N, I, J, X0, X1, TOL, NN, K, ERR, S, X;
T
TOL XO
STOP
1+
= k k
Tính các XO i = x i
F
Trang 16> 1],[0,3,-1,8]]);
A:=Matrix(4,4,[[10,-1,2,0],[-1,11,-1,3],[2,-1,10,-> if Determinant(A)=0 then print("There is no unique solution.")
else print("There is a unique solution.") fi;
Từ đây ta thấy giải thuật Gauss-Seidel có tốc độ hội tụ nhanh hơn giải thuật Jacobi
3.Thuật toán SOR :
Giải bài toán Ax=bvới tham số ωvà xấp xỉ gần đúng ban đầu x( )0
- Đầu vào : Số phương trình và số ẩn ; các phần tử n a ij,1≤ ,i j≤n của ma trận A;các thành phần b i,1≤i≤n của vecto b ;các thành phần của vecto
; tham số
n i
XO i;1≤ ≤
( ) 0
x
XO= ω ; sai số cho phép TOL ; số lần lặp lớn nhất N
- Đầu ra : các nghiệm xấp xỉ hoặc thông báo “Số lượng tối đa của phép lặp đã bị vượt quá”
n
x x
x1, 2, , Thuật toán :
Trang 17j ij j
i
j ij j i
b XO a x
a XO
1
ωω
Bước 4 : Nếu x−XO <TOL thì prinf(x1,x2, ,x n);STOP
local AA, B, OK, N, I, J, X0, X1, TOL, NN, K, ERR, S,
Trang 20Thuật toán SOR ngắn gọn hơn nhờ vào tham số Omega tốc độ làm việc và hội
tụ của thuật toán SOR có thể nói là nhanh hơn khi ta tăng Omega
Xấp xỉ nghiệm của hệ tuyến tính Ax= b
- Đầu vào : Số phương trình và số ẩn ; các phần tử n a ij,1≤ ,i j≤n của ma trận A;các thành phần b i,1≤i≤n của vecto b ; số lần lặp lớn nhất N ; sai số cho phép TOL ; độ chính xác chữ số t
- Đầu ra : xấp xỉ hoặc thông báo về số lần lặp bị vượt quá và một xấp xỉ COND gần đến
n
i xx xx
xx= ,…, )
( )A
K∞ Thuật toán :
Bước 0 : Giải hệ tìm nghiệm bằng phép loại trừ Gauss , bằng cách giữ lại các hệ số nhân
b
Ax= x1,…,x n
1,,2,1,,,2,1,j=i+ i+ n i= n−
i b a x r
1
Bước 4 : Giải hệ tuyến tínhAy=rsử dụng phép loại trừ Gauss như ở Bước 0 Bước 5 : Tính các xx i với i=1 …, ,n
i i
T
TOL XO
STOP
1+
= k k
Tính các XO i = x i
F
Trang 21Bước 6 : Nếu k =1 thì đặt t
xx
y COND= ×10
∞
∞
Bước 7 : Nếu x−xx∞ <TOL thì OUTPUT(xx);
OUTPUT(COND);STOP Bước 8 : Đặt k = k+1
Bước 9 : Tính các x i =xx i với i=1, ,n
Bước 10 : OUTPUT(‘Số lần lặp tối đa bị vượt quá!’)
OUTPUT(COND);
STOP
Trang 22’)
n
n r r x
= k k
( )k
Av Av
u= =
( )k ( )k ( )k n
j j
u v t
r
r= k = k−1 − ( )k C r( )k
x1, , ; 1, ,
STOP
TFF
Trang 235.Thuật toán Gradient điều kiện kết hợp :
Giải bài toán Ax=b với ma trận điều kiện C− 1 và xấp xỉ gần đúng x( )0
o Đầu vào : số lượng phương trình là số chưa biết n ; ma trận A với các thành phần a ij,1≤ ,i j≤n ; vecto b với thành phần ; ma trận hệ số điều kiện với các thành phần là
n j
Bước 3 : Kiểm tra điều kiện
Trong khi k≤N thì làm từ Bước 4 đến Bước 7
Bước4 : If v ≤TOL then
printf (Nghiệm là : x1,x2, ,x n)
printf (với phần dư là : r1,r2, ,r n)
STOP Else (Sang Bước 5) Bước 5 : Tính
( )k
Av Av
u= =
n j j j
u v
w
1
2
βBước 6 : Kiểm tra điều kiện
If β〈TOL then printf (Nghiệm là : x1,x2, ,x n)
printf (với phần dư là : r1,r2, ,r n) STOP
Else (Sang bước 7) Bước 7 : Tính
α
β
=
=s k s
v
v= + = − 1 +
Trang 24Quay lại Bước 3 Bước 8 : Kiểm tra điều kiện
If (k〉n then
Printf(Số lượng tối đa của phép lặp đã bị vượt quá ! ) STOP
Trang 25’)
n
n r r x
= k k
( )k
Av Av
u= =
( )k ( )k ( )k n
j j
u v t
r
r= k = k−1 − ( )k C r( )k
x1, , ; 1, ,
STOP
TFF
Trang 26Chú ý là thuật toán sẽ hội tụ khi và chỉ khi bán kính chiếu của ma trận lặp p < 1,p càng nhỏ thì thuật toán hội tụ càng nhanh
Phân tích các vecto còn lại của thuật toán Gauss lên phép lặp SOR, điều này ko làm thay đổi ảnh hưởng của tham số w đến tốc độ hội tụ của thuật toán
Thuật toán lặp và cải biên được sử dụng rộng rãi để giải các hệ tuyến tính, điều này phát sinh trong nghiệm thực của bài toán
V.Tài liệu tham khảo:
1 Hướng dẫn và sử dụng Maple V của thầy Nguyễn Hữu Điển
1.Tra cứu trên mạng bằng :
• www.google.com.vn
• http://www.thuvienkhoahoc.com
• Các forum về Lập trình
2.Tài liệu tham khảo :
• Giải tích số - Nguyễn Trọng Vinh
• Numerical Analysis
• Lập trình MathLab
• Lập trình Mathematica