1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng Phương pháp tính - Phạm Phú Triêm

20 12 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 20
Dung lượng 335,29 KB

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

Nội dung

* Ngược lại, có nghĩa là... * Ngược lại, có nghĩa là.[r]

Trang 1

Tr ườ ng Đại h ọ c Th ủ y l ợ i

Phạm Phú Triêm

phương pháp tính

Trang 2

Carl Friedrich Gauss

(1777-1855)

vua Toán học

Trang 3

MỤC LỤC

Lời nói đầu 4

Chương 1: HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH 5

1.1 Phương pháp Cholesky 5

1.2 Phương pháp lặp Gauss-Seidel 8

1.3 Phương pháp nới lỏng 13

Chương 2 : PHƯƠNG TRÌNH VÀ HỆ PHƯƠNG TRÌNH PHI TUYẾN 22

2.1 Phương pháp chia đôi 22

2.2 Phương pháp dây cung 25

2.3 Phương pháp tiếp tuyến 28

2.4 Phương pháp lặp đơn 31

2.5 Phương pháp Newton-Raphson cho hệ phương trình 33

2.6 Phương pháp lặp Seidel cho hệ phương trình 37

Kiểm tra nhận thức 42

Chương 3 : NỘI SUY GIÁ TRỊ HÀM SỐ 44

3.1 Công thức nội suy Gregory-Newton tiến 44

3.2 Công thức nội suy Gregory-Newton lùi 46

3.3 Công thức nội suy Gauss 48

3.4 Công thức nội suy Lagrange 50

3.5 Công thức nội suy Newton 51

3.6 Công thức bình phương nhỏ nhất 54

Bài tập 57

Kiểm tra nhận thức 58

Chương 4 : XẤP XỈ ĐẠO HÀM VÀ TÍCH PHÂN XÁC ĐỊNH 59

4.1 Xấp xỉ giá trị đạo hàm theo tỷ sai phân 59

4.2 Xấp xỉ giá trị đạo hàm theo công thức Richardson 60

4.3 Xấp xỉ giá trị đạo hàm theo công thức nội suy với các mốc cách đều 62

a- Công thức nội suy Gregory-Newton tiến 62

b- Công thức nội suy Gregory-Newton lùi 62

c- Công thức nội suy Gauss 62

4.4 Xấp xỉ giá trị đạo hàm theo công thức nội suy với các mốc bất kỳ 65

a- Công thức nội suy Lagrange 65

b- Công thức nội suy Newton 65

c- Công thức bình phương nhỏ nhất 65

4.5 Xấp xỉ giá trị tích phân xác định A 68

a- Công thức hình thang 68

b- Công thức Simpson 68

4.6 Dãy quy tắc 71

a- Dãy quy tắc hình thang 71

b- Dãy quy tắc Simpson 72

Bài tập 75

Kiểm tra nhận thức 78

Chương 5: XẤP XỈ NGHIỆM PHƯƠNG TRÌNH VI PHÂN 79

5.1 Xấp xỉ nghiệm phương trinh vi phân cấp một 79

a- Phương pháp Euler 79

b- Phương pháp Runge-Kutta bậc hai 80

c- Phương pháp Runge-Kutta bậc bốn 80

5.2 Xấp xỉ nghiệm hệ phương trình vi phân cấp một 82

a- Phương pháp Euler 82

Trang 4

b- Phương pháp Runge-Kutta bậc bốn 83

5.3 Xấp xỉ nghiệm phương trình vi phân cấp 2 85

5.4 Xấp xỉ nghiệm phương trình đạo hàm riêng 86

Kiểm tra nhận thức 96

Trang 5

Lời nói đầu

Nhu cầu nâng cao chất lượng đào tạo sinh viên và các bài toán thực tiễn rất đa dạng, phức tạp là đòi hỏi cấp thiết đưa vào môn học PHƯƠNG PHÁP TÍNH nhằm giúp cho sinh viên khối kỹ thuật- Kỹ sư tương lai, tiếp cận với cách giải gần đúng

phương trình, hệ phương trình có đánh giá sai só , kết hợp trên cơ sở làm quen và

tự nâng cao khả năng lập trình bằng một ngôn ngữ thường được sử dụng, đó là PASCAL

Bộ môn Toán và tác giả trân trọng giới thiệu Giáo trình này và vô cùng cảm ơn các ý kiến đóng góp quý giá của độc giả

Hà nội 8-2005

Trang 6

Chương 1: HỆ PHƯƠNG TRÌNH ĐẠI SỐ TUYẾN TÍNH

Chúng ta biết rằng hầu hết các bài toán thực tế đều dẫn đến giải hệ phương

trình tuyến tính Các phương pháp giải hệ được trình bày khá đầy đủ trong các tài liệu

về Đại số tuyến tính Tuy nhiên mọi cách giải về mặt thực tiễn đều phải tính gần đúng

gắn liền với sai số Vì vậy trong chương này chúng ta giải quyết vấn đề nêu ra trên

đây

1.1 Phương pháp Cholesky Giải hệ AX = B

(1.1.1) trong đó A = 11 1 1

n n n n a a a a é ù ê ú ê ú ê ú ê ú ê ú ë û , X = 1

n x x é ù ê ú ê ú ë û , B = 1

n b b é ù ê ú ê ú ë û

(1.1.2)

Các bước cơ bản của phương pháp này là ** Tìm 2 ma trận tam giác L = 2131 32 1 2 3 1 1 0 0 0 0 1 0 0 0 1 0 0

1

n n n n n l l l l l l l -é ù ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ë û , U =

11 12 13 1 1 1 22 23 2 1 2 33 3 1 3

0

0 0

0 0 0 0

n n n n n n n n u u u u u u u u u u u u u -é ù ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ë û

(1.1.3)

thoả mãn

LU = A

(1.1.4) ** Giải hệ sau đây tìm Y

LY= B

(1.1.5) ** Tìm nghiệm X từ hệ

UX= Y

(1.1.6)

Đó chính là nghiệm của hệ (1.1.1) Thật vậy AX = L(UX) = LY = B Để tìm L , U ta tìm lần lượt hàng 1 của U , cột 1 của L , hàng 2 của U , cột 2 của L , theo công thức tổng quát sau đây

Trang 7

1

1 1

1

,

,

i

i

i j i j i k k j

k

i j i k k j k

i j

j j

u a l u i j

a l u

u

-=

=

ìïï

ïï ïïï

íï - å ïï

ïï ïïî

(1.1.7)

Để đơn giản ta chỉ xét n = 3 và các bước tìm nghiệm

* Tìm L và U

L = 21

31 32

1 0 0

1 0 1

l

l l

, U = 11 1222 1323

33

0

0 0

u u u

u u u

(1.1.8)

Hàng 1 của U là

u11 = a11 , u12 = a12 , u13 = a13

Cột 1 của L là

21

21 11

a l u

= , 31

31 11

a l u

= Hàng 2 của U là

u22 = a22 – l21u12 u23 = a23 – l21u13

Cột 2 của L là

32 31 12

32

22

a l u l

u

-= Hàng 3 của U là

u33 = a33 – (l31u13 + l32u23)

* Tìm Y

y1 = b1 ∧ y2 = b2 – l21y1 ∧ y3 = b3 – ( l31y1 + l32y2)

* Tính nghiệm X

3

3 33

y

x u

22

y

x u x

u

11

x u x u x

u

Ví dụ 1.1

Giải hệ sau đây bằng phương pháp Cholesky 11 2 33

1 2

3 2 5 10

0

x x

x x x

x x

ïïï + + = íï

ïî

Giải

A = 23 02 15

1 1 0

ê - ú

, X = 12

3

x x x

é ù

ê ú

ê ú

ê ú

, B = 103

0

é ù

ê ú

ê ú

ë û

* Tìm L và U

Hàng1 của U là

u11 = a11 = 2 , u12 = a12 = 0 , u13 = a13 = 1

Cột 1 của L là

21

21 11

3 2

a l u

= = , 31

31 11

1 2

a l u

= =

Trang 8

Hàng 2 của U là

u22 = a22 – l21u12 = 2 –32.0 = 2 ; u23 = a23 – l21u13 = 5 –32.1 = 72

Cột 2 của L là

32 31 12

32

22

1

1 0 1 2

a l u l

u

Hàng 3 của U là

u33 = a33 – (l31u13 + l32u23) = 0 – 1.1 1 7. 5

4

2 2 2

æ ö÷

ç - ÷=

çè ø

1 1 7 5 1

2 2 2 4

æ ö÷

ç - ÷=

çè ø

* Tìm Y

y1 = b1 = 3 ∧ y2 = b2 – l21y1 = 10 – 32.3 = 112

∧ y3 = b3 – ( l31y1 + l32y2) = 0 – 1.3 1 11. 5

4

2 2 2

ç - ÷=

* Tính nghiệm X 3

3 33

y

x u

= =

5 4 5 4

2

22

y

x u x

u

11 7.1

2 2 2

-= 1

1 12 2 13 3

1

11

x u x u x

u

Ù = = 3 (0.1 1.1)- 2+ = 1

Program CHOLESKY;

Var

A:Array[1 10,1 10] of real;

B,X,Y:Array[1 10] of real;

R:Array[1 10] of integer;

DK,I,J,K,T,N:Integer;

DET,SUM:Real;

BEGIN

Write('So an N=');Readln(N);

Writeln('Nhap ma tran A ');

For I:=1 to N do

For J:=1 to N do

Begin Write('A[',I,J,']=');Readln(A[I,J]); End;

Writeln(' Nhap vecto B ');

For I:=1 to N do

Begin Write('B[',I,']=');Readln(B[I]); End;

DK:=1;DET:=1;

For I:=1 to N do R[I]:=I;

For I:=1 to N-1 do

If DK=1 then

Begin

For K:=I+1 to N do

Begin

If ABS(A[R[K],I])>ABS(A[R[I],I]) then

Trang 9

Begin

T:=R[I];R[I]:=R[K];R[K]:=T;DET:==-DET;

End;

If A[R[I],I]=0 then DK:=2 Else

Begin

DET:=DET*A[R[I],I];

For K:=I+1 to N do

Begin

A[R[K],I]:=A[R[K],I]/A[R[I],I];

For J:=I+1 to N do

A[R[K],J]:=A[R[K],J]-A[R[K],I]*A[R[I],J]; End;

End;

End;

End;

If A[N,N]=0 then DK:=2 Else

Begin

Y[1]:=B[R[1]];

For K:=2 to N do

Begin

SUM:=0;

For J:=1 to K-1 do

SUM:=SUM+A[R[K],J]*Y[J];

Y[K]:=B[R[K]]-SUM;

End;

X[N]:=Y[N]/A[R[N],N];

For K:=N-1 downto 1 do

Begin

SUM:=0;

For J:= K+1 to N do

SUM:=SUM+A[R[K],J]*X[J];

X[K]:=(Y[K]-SUM)/A[R[K],K];

End;

End;

If DK=1 then

For I:=1 to N do Write('X[',I,']=',X[I]);

If DK=2 then Writeln('Khong tinh duoc');

Readln;

END

1.2 Phương pháp lặp Gauss-Seidel

Giải hệ

Trang 10

11 1 1 1

1 1

n n

n n n n n

a x a x b

a x a x b

ïï ïïí ïï

ïïî

(1.2.1)

* Điều kiện lặp: A có đường chéo trội, có nghĩa là

1;

n

a ii a i j

j j i

³ å

(1.2.2)

* Điều kiện hội tụ: A xác định dương, có nghĩa là

a11 > 0 , 11 12 11 12 13

21 22 23

21 22

31 31 33

0 , 0 , , 0

a a a

a a

a a

a a a

> > >

(1.2.3)

* Đưa hệ (1.2.1) về hệ tương đương

1 12 2 1 1

2 21 1 23 3 2 2

'

'

.

'

n n

n n

n n n n n n n n n

x c x c x b

x c x c x c x b

x c x c - x - c - x - b

ìïï = + + + ïï

ïï

ïí ïï ïï

ïïî

(1.2.4)

bằng cách: chuyển các x K ( k i ) của phương trình thứ i sang vế phải và chia 2 vế

cho a ii , i = 1, , n

* Thay xấp xỉ ban đầu X(0) = (x1(0) xn(0)) của nghiệm vào (1.2.4) để tìm xấp xỉ

thứ nhất

X(1) = (x1(1) xn(1)) của nghiệm

(1) (0) (0)

(1) (1) (0) (0)

(1) (1) (1) (0) (0)

'

'

'

.

n n

n n

n n

n n n n n n n

x c x c x b

x c x c x c x b

x c x c x c x c x b

x - c - x c - - x - c - x b

(1)

' '

n n n n n n n n n

x c x c - x - c - x - b

ìïï ïï ïï ïï ïï ïï ïïí ïï ïï ïï ïï ïï

ïïî

(1.2.5)

Như vậy ta đã sử dụng các giá trị x 1 (1) , , x i (1) được tính ở các hàng trên để tìm

các giá trị

x i+1 (1) , , x n (1) , i =1, , n – 1, ở các hàng dưới

* Nếu

(1) (0)

1

n

i i

i x x

=

(1.2.6)

trong đó εx> 0 , cho trước (sai số đối với nghiệm) thì ta dừng ở X(1)

* Ngược lại, có nghĩa là

Trang 11

(1) (0)

1

n

i i

i x x

=

(1.2.7)

ta lại thay xấp xỉ thứ nhất X (1) = (x 1 (1) x n (1) ) của nghiệm vào (1.2.4) để tìm

xấp xỉ thứ hai

X (2) = (x 1 (2) x n (2) ) của nghiệm

(2) (1) (1)

(2) (2) (1) (1)

(2) (2) (2) (1) (1)

'

'

'

.

n n

n n

n n

n n n n n n n

x c x c x b

x c x c x c x b

x c x c x c x c x b

x - c - x c - - x - c - x b

(2)

' '

n n n n n n n n n

x c x c - x - c - x - b

ìïï ïï ïï ïï ïï ïï ïïí ïï ïï ïï ïï ïï

ïïî

(1.2.8)

Ta tiếp tục cho đến xấp xỉ thứ k : X (k) = (x 1 (k) x n (k) ) của nghiêm theo công thức

( ) ( 1) ( 1)

( ) ( ) ( 1) ( 1)

( ) ( ) ( ) ( 1) ( 1)

'

'

'

.

n n

n n

n n

x c x c x b

x c x c x c x b

x c x c x c x c x b

( )

' '

k

n n n

k

n n n n n n n n n

x b

x c x c x c x b

-ìïï ïï ïï ïï ïï ïï ïïí ïï ïï

ïï ïï

ïïî

(1.2.9)

và dừng lại ở X(k) khi thoả mãn

( ) ( 1)

1

n k k

i i

i x x

-=

(1.2.10)

hoặc

1 ( 1) ( 2)

n k k

i i i

k M

e

-

-=

ìïï - >

ï å ïí ïï

ï = ïî

(1.2.11)

trong đó M là số bước lặp tối đa cho trước mà ta phải dừng lại mặc dù tại bước

lặp thứ M – 1 vẫn

chưa đảm bảo sai số

Ví dụ 1.2

Giải hệ sau đây bằng phương pháp Gauss-Seidel 11 22 33

1 2 3

x x x

x x x

x x x

ìï - + = ïïï - + = -íï

ïï - + = ïî

với X(0) = (0 0 0) , εx = 0,15 và M =

10

Giải

Trang 12

* Kiểm tra điều kiện đường chéo trội ⎜a11 ⎜= ⎜5 ⎜> ⎜– 1 ⎜ + ⎜2 ⎜= ⎜a12 ⎜ +

⎜a13 ⎜

⎜a22 ⎜= ⎜– 5 ⎜> ⎜1 ⎜ + ⎜1 ⎜= ⎜a21 ⎜ + ⎜a23

⎜a33 ⎜= ⎜4 ⎜> ⎜– 2 ⎜ + ⎜– 1 ⎜= ⎜a31 ⎜ +

⎜a32 ⎜

* Kiểm tra điều kiện xác định dương: a11 = 5 > 0

Sau khi đổi dấu 2 vế của phương trình thứ 2 ta tính được

11 12

21 22

5 1

1 4

a a

a a

-=

- = 19 > 0

1121 1222 1323

31 31 33

5 1 2

1 4 1

2 1 4

a a a

a a a

a a a

-= 5.4.4 + ( – 1).( – 1).2

+ ( – 2).( – 1).( – 1) – ( – 2).4.2 – ( – 1).( – 1).5 – (

– 1).( – 1).4 = 87 > 0

* Đưa hệ đã cho về hệ tương đương theo công thức (1.2.4)

12 21 3 3

0,2 0,4 1,2 0,25 0,25 0,5 0,5 0,25 0,25

x x x

íï

ïî

* Thay xấp xỉ ban đầu X(0) = (0 0 0) của nghiệm vào vế phải tìm xấp xỉ thứ nhất

X(1) = (x1(1) x2(1) x3(1))

của nghiệm theo công thức (1.2.5) với n = 3

(1) 1 (1) 2 (1) 3

0,2.0 0,4.0 1,2 1,2 0,25.1,2 0,25.0 0,5 0,8 0,5.1,2 0,25.0,8 0,25 1,05

x x x

ïï

íï ïï

ïî

* Tính sai số

3 (1) (0)

1 i i

i x x

=

å - = 1,2 + 0,8 + 1,05 = 3,05 > 0,15

* Tìm xấp xỉ thứ hai X(2) = (x1(2) x2(2) x3(2)) của nghiệm theo công thức (1.2.8)

(2) 1 (2) 2 (2) 3

0,2.0,8 0,4.1,05 1,2 0,94 0,25.0,94 0,25.1,05 0,5 0,9975 0,5.0,94 0,25.0,9975 0,25 0,969375

x x x

ïï

íï ïï

ïî

* Tính sai số

3 (2) (1)

1 i i

i x x

=

å - = ⎜0,94 – 1,2⎜ + ⎜0,9975 – 0,8⎜ + ⎜0,969375 – 1,05⎜ = 0,538125 > 0,15

* Tìm xấp xỉ thứ ba X(3) = (x1(3) x2(3) x3(3)) của nghiệm theo công thức (1.2.9) :

(3) 1 (3) 2 (3) 3

0,2.0,9975 0,4.0,969375 1,2 1,01175 0,25.1,01175 0,25.0,969375 0,5 0,995281 0,5.1,01175 0,25.0,995281 0,25 1,004695

x x x

ïï

íï ïï

ïî

* Tính sai số

Trang 13

3 (3) (2)

1 i i

i x x

=

å - = ⎟1,01175 – 0,94⎟ + ⎟0,995281 – 0,9975⎟

+ ⎟1,004695 – 0,969375⎟

= 0,109289 < 0,15

Như vậy ta dừng ở xấp xỉ thứ 3 của nghiệm với độ chính xác cho trước

X (3) = ( 1,01175 0,995281 1,004695)

Program G_SEIDEL;

Var

AB:Array[1 20,1 20] of real;

X0,XK:Array[1 20] of real;

I,J,K,M,N,KMAX,DK:Integer;

R,EPS,SUM,SUMEPS:Real;

BEGIN

Write('So an N = ');Readln(N);

M:=N+1;

Writeln('Nhap ma tran AB : N hang, N+1 cot ’);

Writeln('N cot dau la cac cot cua ma tran A’);

Writeln('cot thu N+1 la cot cac he so tu do B ’);

For I:=1 to N do

For J:=1 To M do

Begin Write('AB[',I,J,']=');Readln(AB[I,J]); end;

Write(' So buoc lap toi da KMAX=');Readln(KMAX);

Write(' Sai so EPS =');Readln(EPS);

DK:=1;I:=1;

{ Kiem tra tinh cheo troi }

While ((I<=N) and (DK=1)) do

Begin

R:=0;

For J:=1 to N do

R:=R + ABS(AB[I,J]);

If R>=2*ABS(AB[I,I]) then

DK:=2;I:=I+1:

end;

If DK=1 then

{ Khi tinh cheo troi thoa man ta nhap xap xi ban dau }

Writeln(‘ Nhap xap xi ban dau X’);

Begin

For I:=1 to N do

Begin Write('X0[',I,']=');Readln(X0[I]); end;

end;

Trang 14

K:=1;

While ((K<KMAX) and (DK=1)) do

{ Tinh cac thanh phan XK[I] o buoc lap thu K khi khong su dung cac gia tri XK[1] , XK[2] , , XK[I] da tinh o tren de tinh XK[I+1], ,XK[N] ; I = 1 , , N– 1 }

Begin

For I:=1 to N do

Begin

SUM:=AB[I,M];

For J:=1 to N do

If J<>I then

SUM:=SUM – AB[I,J]*X0[J];XK[I]:=SUM/AB[I,I];

end;

{ So sanh tong sai so cac thanh phan o buoc lap thu K va K-1 voi sai so da cho }

SUMEPS:=0;

For I:=1 to N do

SUMEPS:=SUMEPS + ABS(XK[I]-X0[I]);

If SUMEPS<EPS then DK:=3;

For I:=1 to N do

X0[I]:=XK[I];K:=K+1;

end;

If DK=3 then

Begin

Writeln('Nghiem xap xi la');

For I:=1 to N do

Writeln('X',K,'[',I,']=',XK[I]);

end;

If DK=2 then

Writeln('Khong cheo troi');

If K=KMAX then

Begin

Writeln('Chua hoi tu va ta dung o xap xi thu k cua nghiem,k= ', K);

For I:=1 to N do

Writeln('X',K,'[',I,']=',XK[I]);

end;

Readln;

END

1.3 Phương pháp nới lỏng

Giải hệ

Ngày đăng: 30/03/2021, 03:27

TỪ KHÓA LIÊN QUAN