a)Ví dụ :
Ví dụ 3.6.1: Giải phương trình sau với độ chính xác = 10-3:
x6 – 3x2 + x – 1 = 0 (3.6.1)
Giải:
Đặt f(x) = x6 – 3x2 + x – 1 .
f(1) = -2; f(2) = 53 f(1).f(2) < 0.
Phương trình (3.6.1) có nghiệm x* (1;2). Theo phương pháp parabol ta có bảng sau:
Ta có f(x3) = 0,00008 < 10-3.
Vậy nghiệm của phương trình (3.6.1) là: x* 1,2963 với độ chính xác 10-3.
b) Bài tập:
Bài tập 3.6.1: Sử dụng phương pháp parabol để giải các phương trình sau: a) x5 – 3x2 + 1 = 0. b) x3 – 3x2 + 6x – 5 = 0. c) x3 – 0.1x2 + 0,4x + 1,2 = 0. d) x2 = sin x + 1. e) 2x + lg x = - 0,5 . f) 2sin (x – 0,6) = 1,5 – x . n xn f(xn) f(xn,xn-1) f(xn,xn-1,xn-2) n x xn xn xn xn1 0 1,2 -1,1341 1 1,3 0,0568 11,9090 1,2952 2 1,2952 -0,0166 15,2917 35,5326 1,2963 0,0011 -0,0037 3 1,2963 0,00008
PHỤ LỤC : GIẢI NHỮNG VÍ DỤ BẰNG NGÔN NGỮ LẬP TRÌNH PASCAL
Trên cơ sở chương 2 và chương 3 ta có thể giải các ví dụ bằng chương trình Pascal như sau.
1) Giải ví dụ 3.2.1 bằng chương trình Pascal
Ví dụ 3.2.1: Giải gần đúng phương trình sau bằng phương pháp chia đôi với sai số không vượt quá 10-1:
x3 + 3x + 5 = 0 (3.2.1) Giải: Program Giaividu3.2.1; Var a,b,c,s:real; Function f(x:real):real; Begin f:=x*x*x + 3*x + 5; End; Begin
Write (‘Nhap sai so s = ‘); readln(s); Write (‘Nhap so a,b:’); readln(a,b);
Repeat
c:=(a+b)/2;
if f(a)*f(c) > 0 then a:=c else b:=c; Until (b – a < s)
Writeln (‘ Vay nghiem xap xi cua pt la:’,c:2:5); Readln;
Kết quả: Nhap sai so s=0.1. Nhap a,b: -2 -1
Vay nghiem xap xi cua pt la: -1,15625
2) Giải ví dụ 3.2.2 bằng chương trình Pascal
Ví dụ 3.2.1: Giải gần đúng phương trình sau bằng phương pháp chia đôi với sai số không vượt quá 10-2:
x3 – x – 1 = 0 (3.2.2) Giải: Program Giaividu3.2.2; Var a,b,c,s:real; Function f(x:real):real; Begin f:=x*x*x – x – 1; End; Begin
Write (‘Nhap sai so s = ‘); readln(s); Write (‘Nhap so a,b:’); readln(a,b);
Repeat
c:=(a+b)/2;
if f(a)*f(c) > 0 then a:=c else b:=c; Until (b – a < s)
Writeln (‘ Vay nghiem xap xi cua pt la:’,c:2:5); Readln;
End.
Kết quả: Nhap sai so s=0.01. Nhap a,b: 1 2
Vay nghiem xap xi cua pt la: -1.15625
3) Giải ví dụ 3.3.1 bằng chương trình Pascal
Ví dụ 3.3.1: Giải phương trình sau nhờ phương pháp lặp đơn chính xác đến 10-4:
x7 + 9x + 8 = 0 (3.3.1)
Giải:
Program Giaividu3.3.1; Var x0,x1,s,e,q: real;
i: byte;
x: array[1..10] of real; Function f(x:real): real;
Begin
f:= -1/9 (sqr(sqr(x))* sqr(x) * x + 8); End;
Begin
Write(‘nhap q =’); readln(q); Write(‘nhap sai so s =’); readln(s);
Write(‘chon xap xi ban dau x0 =’); readln(x0); Writeln(‘cac xap xi tiep theo la:’);
i:=1; e:=0; Repeat Begin x1:=f(x0); Writeln(‘x[‘,i,’x[=’,x1:2:9); e:=abs(x1 – x0); i:=i+1; End;
Until (e < s*q/(1 – q));
Writeln( ‘Vay nghiem xap xi cua pt la:’,x[i]:2:9); Readln;
End.
Kết quả như sau:
Nhap q = 0.777 Nhap sai so s = 0.001 Chon xap xi ban dau x0 = 0 Cac xap xi tiep theo la:
x[1]= -0.8888888889 x[2] = -0.840170846 x[3] = -0.8560543636 x[4] = -0.851454831 x[5] = -0.8528402569 x[6] = -0.8524276571 x[7] = -0.8525509563 x[8] = -0.8525141477
Vay nghiem xap xi cua pt la: -0.8525141477
4) Giải ví dụ 3.3.2 bằng chương trình Pascal
Ví dụ 3.3.2: Giải phương trình sau nhờ phương pháp lặp đơn chính xác đến 10-3:
x – sin x = 0,25 (3.3.2)
Giải:
Program Giaividu3.3.2; Var x0,x1,s,e,q: real;
x: array[1..10] of real; Function f(x:real): real;
Begin
f:=sin (x) + 0.25; End;
Begin
Write(‘nhap q =’); readln(q); Write(‘nhap sai so s =’); readln(s);
Write(‘chon xap xi ban dau x0 =’); readln(x0); Writeln(‘cac xap xi tiep theo la:’);
i:=1; e:=0; Repeat Begin x1:=f(x0); Writeln(‘x[‘,i,’x[=’,x1:2:9); e:=abs(x1 – x0); i:=i+1; End; Until (e < s*q/(1 – q));
Writeln( ‘Vay nghiem xap xi cua pt la:’,x[i]:2:9); Readln;
End.
Kết quả như sau: Nhap q = 0.5403 Nhap sai so s = 0.001 Chon xap xi ban dau x0 = 1 Cac xap xi tiep theo la:
x[2] = 1.137306264 x[3] = 1.157505311 x[4] = 1.165804029 x[5] = 1.169105432 x[6] = 1.170907057 x[7] = 1.170907057
Vay nghiem xap xi cua pt la: 1.170907057
5) Giải ví dụ 3.4.1 bằng chương trình Pascal
Ví dụ 3.4.1: Giải phương trình sau bằng phương pháp Newton với sai số tuyệt đối không vượt quá 10-5:
3x – cos x – 1 = 0 (3.4.1)
Giải:
Program Giaividu3.4.1; Uses crt;
Var x0,x1,s,e: real; i: byte; x: array[1..10] of real; Function f(x:real): real;
Begin
f:= 3*x – cos (x) – 1; end;
Function dhf(x:real): real; Begin
dhf:= 3 + sin (x); End;
Begin
Write(‘ Chon xap xi ban dau x0 = ‘); readln (x0); Writeln( ‘ Cac xap xi tiep theo la: ‘);
i:=1; e:= 0; Repeat Begin x1:= x0 – f(x0)/dhf(x0); writeln(‘ x[ ‘,i, ‘]= ‘, x1:2:9); e:= abs(x1 – x0); x0:= x1; i:= i + 1; End; Until (e < s);
Writeln (‘Vay nghiem xap xi cua pt la :’, x[i]:2:9); Readln;
End.
Kết quả như sau:
Nhap sai so s = 10-5
Chon xap xi ban dau x0 = 1 Cac xap xi tiep theo la:
x[1] = 0.6200159522 x[2] = 0.6071206581 x[3] = 0.6071016481
Vay nghiem xap xi cua pt la : 0.6071016481
6) Giải ví dụ 3.4.2 bằng chương trình Pascal
Ví dụ 3.4.2: Giải phương trình sau bằng phương pháp Newton với sai số tuyệt đối không vượt quá 10-3:
2x3 + 3x2 – 3 = 0 (3.4.2) Giải:
Program Giaividu3.4.2; Uses crt;
Var x0,x1,s,e: real; i: byte; x: array[1..10] of real; Function f(x:real): real;
Begin
f:= 2*x*x*x + 3*sqr(x) – 3 ; end;
Function dhf(x:real): real; Begin
dhf:= 6*sqr(x) + 6*x;
End; Begin
Write(‘Nhap sai so s = ‘); readln(s);
Write(‘ Chon xap xi ban dau x0 = ‘); readln (x0); Writeln( ‘ Cac xap xi tiep theo la: ‘);
i:=1; e:= 0; Repeat Begin x1:= x0 – f(x0)/dhf(x0); writeln(‘ x[ ‘,i, ‘]= ‘, x1:2:9); e:= abs(x1 – x0); x0:= x1; i:= i + 1; End; Until (e < s);
Writeln (‘Vay nghiem xap xi cua pt la :’, x[i]:2:9); Readln;
End.
Kết quả như sau:
Nhap sai so s = 10-5
Chon xap xi ban dau x0 = 0.5 Cac xap xi tiep theo la:
x[1] = 0.94444444444 x[2] = 0.8209461562 x[3] = 0.8066290937 x[4] = 0.8064439631
Vay nghiem xap xi cua pt la : 0.8064439631
7) Giải ví dụ 3.5.1 bằng chương trình Pascal
Ví dụ 3.5.1: Giải gần đúng phương trình sau nhờ phương pháp dây cung: x4 – 6x + 4 = 0 (3.5.1) Giải: Program Giaividu3.5.1; Var x0, x1, s, e, a, b, m: real; i: byte; x: array[1..10] of real; Function f(x: real): real;
Begin
f:= x*x*x*x – 6*x + 4; End;
Begin
Write (‘ Nhap a,b : ’); readln(a, b); Write (‘ Nhap m = ’); readln(m); Write (‘ Nhap sai so s = ’); readln(s); Write (‘ Chon x0 = ’); readln(x0); Writeln (‘Cac xap xi tiep theo la’) i:=1; e:= 0;
Repeat
If f(a) > 0 then x1:= x0 – f(x0)*(x0 – a)/(f(x0) – f(a)) else x1:= x0 – f(x0)*(b – x0)/(f(b) – f(x0));
Writeln(‘ x[ ‘,i,’ ]= ’,x1: 2: 9); e:= abs (x1 – x0);
x0:= x1; i:= i+1; Until (e < s);
Writeln (‘Vay nghiem cua pt la:’,x[i]:2:9); Readln;
End.
Kết quả như sau: Nhap a,b: 0 1 Nhap m = 2
Nhap sai so s = 0.001 Chon x0 = 1
Cac xap xi tiep theo la: x[1] = 0.8
x[2] = 0.7288629738 x[3] = 0.7126570468
x[4] = 0.7094644357 x[5] = 0.7088555864
Vay nghiem cua pt la: 0.7088555864
8) Giải ví dụ 3.5.2 bằng chương trình Pascal
Ví dụ 3.5.2: Tìm nghiệm dương của phương trình sau đây nhờ phương pháp dây cung với độ chính xác đến 0, 03:
2 1 ( 1) 0 2 x x e (3.5.2) Giải: Program Giaividu3.5.2; Var x0, x1, s, e, a, b: real; i: byte; x: array[1..10] of real; Function f(x: real): real;
Begin
f:= 2*(x – 1) – 1/2 * exp(x); End;
Begin
Write (‘ Nhap a,b : ’); readln(a, b); Write (‘ Nhap sai so s = ’); readln(s); Write (‘ Chon x0 = ’); readln(x0); Writeln (‘Cac xap xi tiep theo la’) i:=1; e:= 0;
Repeat
If f(a) > 0 then x1:= x0 – f(x0)*(x0 – a)/(f(x0) – f(a)) else x1:= x0 – f(x0)*(b – x0)/(f(b) – f(x0));
Writeln(‘ x[ ‘,i,’ ]= ’,x1: 2: 9); e:= abs (x1 – x0);
x0:= x1; i:= i+1; Until (e < s);
Writeln (‘Vay nghiem cua pt la:’,x[i]:2:9); Readln;
End.
Kết quả như sau: Nhap a,b: 0 1 Nhap sai so s = 0.03 Chon x0 = 1
Cac xap xi tiep theo la: x[1] = 0.2689414214 x[2] = 0.07559782528 x[3] = 1.782031246 x[4] = 0.9568940865 x[5] = 0.2346810378
KẾT LUẬN
Khoá luận này có mục đích giới thiệu một số phương pháp giải phương trình phi tuyến và việc vận dụng các phương pháp này vào giải các ví dụ cụ thể. Trong luận văn, em đã trình bày nội dung của từng phương pháp giải, thực hành giải các ví dụ cụ thể và lập trình trên Pascal tìm nghiệm gần đúng của phương trình phi tuyến.
Do thời gian và trình độ có hạn, khoá luận của em không tránh khỏi thiếu sót. Rất mong được sự góp ý của quý thầy cô và các bạn sinh viên.
TÀI LIỆU THAM KHẢO
1. Nguyễn Minh Chương, Nguyễn Văn Khải, Khuất Văn Ninh, Nguyễn Văn Tuấn, Nguyễn Tường (2001). Giải tích số. NXB Giáo dục.
2. Trần Anh Bảo, Nguyễn Văn Khải, Phạm Văn Kiều, Ngô Xuân Sơn (2003).
Giải tích số. NXB Đại học Sư Phạm Hà Nội.
3. Phạm Kì Anh (1996). Giải tích số. NXB Đại học Quốc Gia Hà Nội.
4. Phan Văn Hạp, Lê Đình Thịnh (2002). Phương pháp tính và các thuật toán. NXB Giáo dục.
5. Hoàng Xuân Huấn (2004). Giáo trình các phương pháp số. NXB Đại học Quốc Gia Hà Nội.
MỤC LỤC
LỜI CẢM ƠN... 1
LỜI CAM ĐOAN... 2
MỞ ĐẦU ... 3
NỘI DUNG ... 4
Chương 1: Các kiến thức chung ... 4
1.1. Một số kiến thức về không gian hàm ... 4
1.2. Số gần đúng và sai số………10
1.3. Khoảng tách nghiệm của phương trình ... 15
1.4. Tỷ sai phân ... 17
Chương 2: Một số phương pháp giải phương trình phi tuyến... 19
2.1. Phương pháp tách nghiệm... 19
2.2.. Phương pháp chia đôi ... 20
2.3. Phương pháp lặp đơn ... 22
2.4. Phương pháp Newton ... 23
2.5. Phương pháp dây cung... 24
2.6. Phương pháp parabol ... 26
Chương 3: Những ví dụ cụ thể và bài tập ... 29
3.1. Ví dụ và bài tập về phương pháp tách nghiệm ... 29
3.2. Ví dụ và bài tập về phương pháp chia đôi ... 31
3.3. Ví dụ và bài tập về phương pháp lặp đơn... 34
3.4. Ví dụ và bài tập về phương pháp Newton ... 36
3.5. Ví dụ và bài tập về phương pháp dây cung ... 40
3.6. Ví dụ và bài tập về phương pháp parabol... 42
PHỤ LỤC ... 45
KẾT LUẬN... 57