1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Tin học (Phần 1: Tin học ứng dụng)(cao học Vật lý): Chương 1 - TS. Ngô Văn Thanh

49 67 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 49
Dung lượng 3,12 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Tin học (Phần 1: Tin học ứng dụng) - Chương 1: Các phương pháp tính số cung cấp cho người đọc các kiến thức: Đạo hàm số, tích phân số, giải phương trình và hệ phương trình tuyến tính, tìm nghiệm các phương trình phi tuyến. Mời các bạn cùng tham khảo nội dung chi tiết.

Trang 1

Ngo Van Thanh, IOP

11/2011

Trang 2

Phần II Tin học ứng dụng

Chương 1: Các phương pháp tính số (LT: 5, TH:5)

 Đạo hàm số

 Tích phân số

 Giải phương trình và hệ phương trình tuyến tính

 Tìm nghiệm các phương trình phi tuyến

Trang 4

 Đạo hàm dạng 5 điểm (Mid-Point):

 Hoặc là (End-point)

Đạo hàm bậc 2:

 Đạo hàm dạng 3 điểm (Mid-Point):

Trang 5

1.2 Tích phân số

 Phương pháp Newton và phương pháp Simpson

 Phương pháp FIT trực tiếp:

 Các hệ số an được xác định bằng phương pháp khử Gauss

Trang 6

 Biểu thức Newton-Cotes:

 Chia nhỏ miền lấy tích phân (a, b) thành n + 1 điểm

 Đa thức nội suy Lagrange bậc n của hàm f :

 Quy tắc hình thang (Trapezium)

 Đa thức bậc 1,

Trang 9

Phương pháp Monte-Carlo Tích phân nhiều lớp

Trang 10

Tích Phân nhiều lớp:

 Lấy tích phân theo phương pháp tổ hợp Simpson:

 Chia miền tích phân thành nm khoảng

Trang 11

 Lấy tiếp tích phân theo phương pháp tổ hợp Simpson:

 Trong đó:

Trang 12

 Cuối cùng ta có:

 Sai số:

Trang 13

1.3 Giải phương trình và hệ phương trình tuyến tính

 Phương pháp tính trực tiếp

Hệ M phương trình tuyến tính với N ẩn

 Biểu diễn dạng ma trận:

Trang 14

 Phương pháp khử Gaussian

Xét hệ N phương trình tuyến tính với N ẩn số, dạng mở rộng ma trận:

 Giải hệ phương trình bằng phương pháp khử theo hàng Xét ví dụ đơn giản

Nhân hàng 1 cho 3 rồi cộng với hàng thứ 2, thay kết quả cho hàng 2

Nhân hàng 1 cho -2 rồi cộng với hàng thứ 3, thay kết quả cho hàng 3

Trang 15

 Hàng 1 vừa rồi gọi là phương trình pivot hay hàng pivot, phần tử a11 gọi là phần tử

pivot

 Áp dụng phương pháp tương tự bắt đầu từ phương trình pivot thứ hai và phần tử

pivot thứ 2

 Hệ phương trình tương đương bây giờ có dạng

 Giải lần lượt từ phương trình thứ 3 đến phương trình 1

Trang 16

 Trường hợp tổng quát:

 Chọn hàng thứ nhất làm hàng pivot, ta có:

Trang 17

 Thực hiện tiếp cho hàng pivot thứ hai:

 Cuối cùng ta thu được ma trận chéo, trong đó các phần tử nằm phía dưới đường

chéo đều bằng 0

Trang 18

Pivoting and scaling

 Nếu các phần tử pivot (các phần tử trên đường chéo) rất bé thì sẽ có sai số

do các phép tính làm tròn các con số sau dấu chấm thập phân

 Nếu các phần tử pivot bằng không thì không sử dụng được phương pháp

khử Gaussian

 Để giải quyết các vấn đề trên

 Nếu phần tử pivot bằng 0, thực hiện tráo đổi hàng pivot cho hàng kế tiếp

 Sử dụng các phương pháp scaling

Phương pháp scaling theo cột (partial pivoting)

Phương pháp scaling theo hàng (scaled partial pivoting)

Kết hợp cả hai phương pháp trên (full pivoting)

 Cuối cùng là tìm các nghiệm bằng phương pháp thay thế ngược (backward

substitution)

Trang 19

Phương pháp scaling theo cột (partial pivoting):

 Tráo đổi hàng thứ 2 cho hàng 1

 Tiếp tục thực hiện phương pháp này cho đến khi thu được ma trận rút gọn về

dạng chéo

Trang 20

Phương pháp scaling theo hàng (scaled partial pivoting):

Trang 21

Phương pháp phân ly LU

 Giả thiết rằng ma trận A có thể viết dưới dạng tích của hai ma trận tam giác:

 Suy ra

 Ta có hai phương trình ma trận:

: giải phương trình này để tìm y

: giải phương trình này để tìm x

Trang 23

 Thuật toán Crout:

Đầu tiên đặt N phần tử trên đường chéo của ma trận L bằng 1

Trang 25

 Chương trình đơn giản:

SUBROUTINE ludcmp(a,indx,d)

IMPLICIT NONE

REAL, DIMENSION(:,:), INTENT(INOUT) :: a

INTEGER, DIMENSION(:), INTENT(OUT) :: indx

Trang 26

*

do i=j,n !This is i = j and i = j+1: ::N a(i,j)=a(i,j)-sum(a(i,1:j-1)*a(1:j-1,j)) enddo

enddo

END SUBROUTINE ludcmp

Trang 27

 Chương trình F90 kiểu parallel tối ưu:

SUBROUTINE ludcmp(a,indx,d)

IMPLICIT NONE

REAL, DIMENSION(:,:), INTENT(INOUT) :: a

INTEGER, DIMENSION(:), INTENT(OUT) :: indx

Trang 29

Nghịch đảo ma trận

 Xét hệ phương trình tuyến tính:

 Nhân hai vế cho ma trận ngịch đảo A-1:

Nếu xác định được A-1 thì hệ phương trình hoàn toàn có thể tìm nghiệm dưới

dạng:

Trang 30

1.4 Tìm nghiệm các phương trình phi tuyến

 Phương pháp khoanh vùng

 Khoanh vùng nghiệm bằng cách vẽ đồ thị các hàm

Trang 31

 Phương trình có nghiệm trong khoảng (a, b) nếu

 liên tục trên khoảng (a, b)

Các bước thực hiện:

 Vẽ đồ thị của hàm số bằng các phần mềm

như Gnuplot, Mathematica, Matlab…

 Dựa trên đồ thị, xác định khoảng (a, b) mà nghiệm nằm trong khoảng đó

 Xác định nghiệm gần đúng của phương trình x0

Trang 32

Khoanh vùng nghiệm từ trong ra ngoài

 Xét hai điểm bất kỳ

 Tính tích

 Nếu tích trên thì kết thúc chương trình tính

 Ngược lại, nếu

Nếu thì thay giá trị Ngược lại: thì thay Với b là thừa số tùy chọn

 Thực hiện các phép tính trên theo một số vòng lặp xác định

Trang 33

INTEGER, PARAMETER :: NTRY=50

REAL, PARAMETER :: FACTOR=1.6

Trang 34

Khoanh vùng nghiệm từ ngoài vào trong (cho phép khoanh vùng nhiều nghiệm)

 Xét hai điểm cho trước

 Chia thành n khoảng và trong đó có tối đa là nb nghiệm

 Tính tích

 Nếu tích trên đưa ra khoảng nghiệm

 Thực hiện các phép tính trên cho n khoảng

Trang 36

Phương pháp phi đạo hàm

Phương pháp chia đôi (bisection method)

 Tìm nghiệm nhanh hơn phương pháp khoanh vùng nghiệm

 Có độ chính xác cao hơn

 Chỉ tìm được một nghiệm nào đó khoảng (a, b)

 Xét khoảng (a, b) mà trong đó phương trình phi tuyến có nghiệm, tức là

 Chọn điểm c là điểm giữa của (a, b)

Nếu như f (c) cùng dấu với f (a) thì thay khoảng (a, b) bằng (c, b)

Nếu như f (c) cùng dấu với f (b) thì thay khoảng (a, b) bằng (a, c)

 Thực hiện qua trình lặp trên một số bước nào đó, hoặc khoảng chia đôi bé

hơn một thừa số cho trước (sai số)

Trang 37

if (fmid <= 0.0) rtbis = xmid

if (abs(dx) < xacc or fmid == 0.0) RETURN

end do

write(6,*) 'rtbis:too many bisections'

Trang 38

Phương pháp cát tuyến (Secant method)

 Áp dụng cho các hàm trơn (smooth) ở gần nghiệm

 Tốc độ hội tụ nhanh hơn phương pháp bisection

 Xét khoảng (a, b) mà trong đó phương trình phi tuyến có nghiệm

Chọn hai điểm ban đầu p0 = a, p1 = b

Phương trình đường thẳng đi qua (p0, f(p0)) và (p1, f(p1))

Giao điểm với trục hoành tại (p2, 0):

suy ra

 Tổng quát:

Trang 40

Phương pháp đạo hàm (Methods with derivatives)

Phương pháp lặp Newton (Newton iterative method)

 Khai triển chuỗi Taylor:

Trang 41

Nếu hàm số f(x) không tính được đạo hàm bằng giải tích thì phải tính f’ (x)

theo phương pháp gần đúng tại mỗi vòng lặp

Trang 42

Thuật toán:

Run_newton(f; f‟; x0;N; tol) (1) đặt x = x0; n = 0

(11) end while

Trang 43

write(6,*) 'rtnewt:values jumped out of brackets'

if (abs(dx) < xacc) RETURN ! Convergence

end do

write(6,*) 'rtnewt exceeded maximum iterations'

END FUNCTION rtnewt

Trang 44

 Một số trường hợp mà phương pháp lặp Newton sẽ tính sai

 Kết hợp bisection và Newton-Raphson Phương pháp bisection được áp dụng

cho trường hợp phương pháp Newton hội tụ chậm hoặc nghiệm tìm được vượt ra ngoài khoảng nghiệm

Trang 45

call funcd(rtsafe,f,df)

Trang 46

Chương trình:

do i=1,ntrial

! x in fvec and Jacobian matrix in fjac

!Right-hand side of linear equations

end do

Trang 47

Phương pháp lặp Newton cho hệ các phương trình không tuyến tính

 Xét hệ hai phương trình không tuyến tính bất kỳ:

 Giao điểm của các đường mức chính là nghiệm của hệ phương trình

Trang 48

 Xét hệ N phương trình không tuyến tính

 Khai triển chuỗi Taylor cho hệ phương trình trên

 Ma trận các đạo hàm riêng chính là ma trận Jacobian

 Suy ra:

 Bỏ qua số hạng bậc cao, đặt , ta có

Giải phương trình trên để tìm bằng phương pháp phân ly LU Nghiệm gần

đúng của hệ có dạng:

Trang 49

do j=1,MAXIT !Loop over allowed iterations

if (((rtsafe-xh)*df-f)*((rtsafe-xl)*df-f) > 0.0 or &

abs(2.0*f) > abs(dxold*df) ) then

! Bisect if Newton out of range, or not decreasing fast enough dxold=dx

dx=0.5*(xh-xl)

rtsafe=xl+dx

write(6,*) 'rtsafe:exceeded maximum iterations'

END FUNCTION rtsafe

Ngày đăng: 30/01/2020, 17:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm