Bài giảng môn phương pháp tính - Đỗ Thị Tuyết Hoa

Phương pháp tính là bộmôn toán học có nhiệm vụgiải đến kết quảbằng số

cho các bài toán, nó cung cấp các phương pháp giải cho những bài toán

trong thực tếmà không có lời giải chính xác. Môn học này là cầu nối giữa

toán học lý thuyết và các ứng dụng của nó trong thực tế.

Trong thời đại tin học hiện nay thì việc áp dụng các phương pháp tính càng

trởnên phổbiến nhằm tăng tốc độtính toán.

pdf68 trang | Chia sẻ: hainam | Lượt xem: 1641 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng môn phương pháp tính - Đỗ Thị Tuyết Hoa, để xem tài liệu hoàn chỉnh bạn click vào nút TẢI VỀ ở trên
eo bảng sau: 
xi 0.65 0.75 0.85 0.95 1.15 
yi 0.96 1.06 1.17 1.29 1.58 
Lập công thức thực nghiệm của y dạng aebx 
⇔ 
 56
Giải 
Ta có: y = aebx 
Lấy Logarit cơ số e hai vế: Lny = lna + bx 
Đặt Y = lny; A = lna; B = b; X = x 
Ta đưa về dạng: Y = A + BX 
 Xi = xi 0.65 0.75 0.85 0.95 1.15 
Yi = lnyi -0.04 0.06 0.18 0.25 0.46 
ΣXi ΣXi2 ΣXiYi ΣYi 
4.35 3.93 0.92 0.89 
Phương pháp bình phương bé nhất: A, B là nghiệm hệ phương trình 
 ∑∑
==
=+ n
1i
i
n
1i
i YXBnA 
∑∑∑
===
=+ n
1i
ii
n
1i
2
i
n
1i
i YXXBXA 
 5A + 4.35B =0.89 
 4.35A + 3.93B = 0.92 
Giải hệ phương trình ta được: A = -.069, B = 1 
Suy ra: a = eA = ½, b = B =1 
Vậy f(x) = xe
2
1 
 57
CHƯƠNG VIII TÍNH GẦN ĐÚNG TÍCH PHÂN XÁC ĐỊNH 
8.1. Giới thiệu 
Xét hàm số f(x) liên tục trên [a,b], nếu xác định được nguyên hàm F(x) ta 
có công thức tính tích phân: 
∫ −=
b
a
)a(F)b(Fdx)x(f 
Nhưng trong đa số các trường hợp ta không xác định được nguyên hàm của, 
hoặc không xác định được biểu thức của f(x) mà chỉ nhận được các giá trị 
của nó tạI nhưng điểm rời rạc. Trong trường hợp như vậy ta có thể sử dụng 
các công thức gần đúng sau để tính tích phân: 
- Công thức hình thang. 
- Công thức Parabol 
- Công thức Newton _Cotet 
8.2. Công thức hình thang 
Chia [a, b] thành n đoạn bằng nhau với khoảng cách h = (b - a)/n theo các 
điểm chia: x0=a, x1=a+h, ..., xn = b 
∫ ∫ ∫∫ =+++=
−=
b
a
2x
x
x
x
x
ax 1
n
1n
1
0
Sdx)x(f...dx)x(fdx)x(fdx)x(f 
S là diện tích giới hạn bởi đường cong f(x), x=a, x=b, và trục x 
Xét trên [x0, x1], ta xem đường cong f(x) là đường thẳng 
S
f(x)
x0 =a 
S1 
Sn
x1 xn-1 xn = b
 58
)yy(h
2
1SS 10hthang1 +=≈ 
 Tương tự: 
)yy(h
2
1S 212 +≈ 
... … … 
)yy(h
2
1S n1nn +≈ − 
Vậy: ∫ +++++≈ −
b
a
n1n210 )yy2...y2y2y(2
hdx)x(f 
8.3. Công thức Parabol 
Chia [a, b] thành 2n đoạn bằng nhau với khoảng cách h = (b - a)/2n theo các 
điểm chia: x0=a, x1=a+h, ..., x2n = b 
∫ ∫∫∫
−
+++=
b
a
x
x
x
x
x
x
n2
2n2
4
2
2
0
dx)x(f...dx)x(fdx)x(fdx)x(f 
Xét trên [x0, x2] xem đường cong f(x) là Parabol (nội suy bậc 2 của 3 điểm 
x0, x1, x2) 
)xx)(xx(
)xx)(xx(y
)xx)(xx(
)xx)(xx(y
)xx)(xx(
)xx)(xx(y)x(L)x(f
1202
10
2
2101
20
1
2010
21
02
−−
−−+
+−−
−−+−−
−−=≈
∫ ∫≈2
0
2
0
x
x
x
x
2 dx)x(Ldx)x(f 
Thay x0 = a, x1 = a + h , x2 = a+2h vào, ta có: 
∫ ++≈2
0
x
x
210 )yy4y(3
hdx)x(f 
Tương tự: 
 59
∫ ++≈4
2
x
x
432 )yy4y(3
hdx)x(f 
∫
−
++≈ −−
n2
2n2
x
x
21n22n2 )yy4y(3
hdx)x(f 
Vậy: ∫ ++++++≈ −−
b
a
n21n22n2210 )yy4y2...y2y4y(3
hdx)x(f 
Ví dụ. Tính J = ∫ +
5
1
2x1
dx theo 3 cách 
Giải 
Cách 1: 4/5arctgarctgxJ 51 Π−== ≈ 0.588 
Cách 2: chia [1, 5] thành 4 đoạn bằng nhau (h=1) với các điểm chia 
xi 1 2 3 4 5 
yi 1/2 1/5 1/10 1/17 1/26 
 Công thức hình thang: 
 J ≈ (1/2 + 2/5 +2/10 +2/17 + 1/26) /2 ≈ 0.628 
 Cách 3: Công thức Parabol: 
 J ≈ (1/2 + 4/5 +2/10 +4/17 + 1/26) /3 ≈ 0.591 
8.4. Công thức Newton-Cotet 
Chia [a, b] thành n đoạn bằng nhau với khoảng cách h = (b - a)/n với x0=a; 
x1 = a + h , ...., xn = b. 
Đặt x = a + (b - a)t => dx = (b - a) dt 
xi a a+h a + 2h ... b 
ti 0 1/n 2/n ... 1 
Khi đó: 
∫ ∫ ∫Φ−=−+−=
b
a
1
0
1
0
dt)t()ab(dt)t)ab(a(f)ab(dx)x(f
 Với φ(t)= f(a + (b - a)t 
Xem φ(t) là hàm nội suy Lagrange của n + 1 điểm: t0, t1, ..., tn 
 60
)
n
1n1)...(
n
11)(01(
)
n
1nt)...(
n
1t)(0t(
y
...
)1
n
1)...(
n
2
n
1)(0
n
1(
)1t)...(
n
2t)(0t(
y
)1)...(
n
2)(
n
1(
)1t)...(
n
2t)(
n
1t(
y)t(L)t(
n
10n
−−−−
−−−−
+
+
−−−
−−−
+
−−−
−−−
=≈Φ
Khi đó: ∫ ∫≈Φ
1
0
1
0
n dt)t(Ldt)t( 
Đặt ∫ −+−−−−−
−+−−−−−
=
1
0
i
n dt
)1
n
i(...)
n
1i
n
i)(
n
1i
n
i(...)
n
1
n
i)(0
n
i(
)1t...()
n
1it)(
n
1it(...)
n
1t)(0t(
P 
Vậy: ∫ ∑
=
−≈
b
a
n
0i
i
nipy)ab(dx)x(f 
Xét n = 1 ( h = b-a ) 
∫ −=−
−=
1
0
0
1 2
1dt
10
1tP ; ∫ =−
−=
1
0
1
1 2
1dt
01
0tP 
∫ +=+−=
b
a
10
10 )yy(
2
h)
2
y
2
y
)(ab(dx)x(f → Công thức hình thang 
Lưu ý: Giá trị của inP có thể tra trong bảng sau: 
n inP 
1 1/2 1/2 
2 1/6 4/6 1/6 
3 1/8 3/8 3/8 1/8 
4 9/71 16/45 2/15 16/45 9/70 
5 19/288 25/95 25/144 25/144 25/95 19/288 
… … … … … … … 
 61
BÀI TẬP 
1. Khai báo (định nghĩa) hàm trong C để tính gần đúng tích phân xác định 
của f(x) tr ên [a, b] (đối kiểu con trỏ hàm) 
a. Dùng công thức hình thang 
b. Dùng công thức Parabol 
c. Dùng công thức Newton-cotet 
2. Viết chương trình tính gần đúng tích phân xác định trên [a, b] của 1 hàm 
f(x) cụ thể (sử dụng các hàm đã khai báo trong câu 1). So sánh kết quả, 
nhận xét. 
 62
MỘT SỐ CHƯƠNG TRÌNH THAM KHẢO 
1. Tính gần đúng tích phân xác định 
# include 
# include "conio.h" 
# include "math.h" 
# define PI 3.14159 
float d[10];int n; 
double g(double x) 
{ 
 return 1/(1+x*x); 
} 
double tp(double (*f)(double),float a,float b) 
{ 
 int n=100,i; 
 float s,h=(b-a)/n; 
 s=(f(a)+f(b))/2; 
 for (i=1; i<n;i++) s+=f(a+i*h); 
 return s*h; 
} 
void nhap(float *a, int *n) 
{ int i; 
 printf("\n Nhap bac da thuc: ");scanf("%d",n); 
 printf("\n Nhap he so cua ham da thuc:\n"); 
 for (i=0;i<=*n; ++i) { 
 printf(" a[%d]=",i); 
 scanf("%f",a+i); 
 } 
} 
double f(double x) 
{ 
 float p=d[0]; int i; 
 for(i=1;i<=n;i++) p=p*x+d[i]; 
 return p; 
} 
main() 
{ float a,b; char tt; 
 63
 while (1) { 
 printf("\n Nhap can de tinh tich phan: "); scanf("%f%f",&a,&b); 
 /*printf("a= "); scanf("%f",&a); 
 printf("b= "); scanf("%f",&b);*/ 
 printf("\nS1=%.3f",tp(sin,0,PI)); 
 printf("\nS2=%.3f",tp(cos,0,PI/2)); 
 printf("\nS3=%.3f",tp(g,a,b)); 
 nhap(d,&n); 
 printf("\nS4=%.3f",tp(f,a,b)); 
 printf("\n\n Ban tiep tuc ko(c/k)?"); 
 tt=getch(); 
 if (tt!='c') break; 
 } 
} 
2. Tim nghiem gan dung cua phtrinh da thuc bac n bang PP chia doi 
# include 
# include "conio.h" 
# include "math.h" 
# define eps 1e-3 
float f(float); 
void nhap(float *, int ); 
float d[10]; int n; 
void main() 
{ float a,b,c; char tt; 
 while (1) { 
 printf("\n Nhap bac phuong trinh: ");scanf("%d",&n); 
 nhap(d,n); 
 printf("\n Nhap khoang nghiem: "); scanf("%f%f",&a,&b); 
/* printf("a= "); scanf("%f",&a); 
 printf("b= "); scanf("%f",&b);*/ 
 if (f(a)*f(b)<0) { 
 c=(a+b)/2; 
 while (fabs(a-b) >= 1e-3 && f(c)!=0) { 
 printf("\n%.3f %.3f %.3f",a,b,f(c)); 
 if (f(b)*f(c)>0) 
 b=c; 
 else a=c; 
 c=(a+b)/2; 
 64
 } 
 printf("\n\n Nghiem phtrinh: %.3f",c); 
 } 
 else 
 if (f(a)*f(b)>0) printf(" ( %f, %f) khong phai la khoang 
nghiem",a,b); 
 else 
 if (f(a)==0) printf(" \n Nghiem phtrinh: %.3f",a); 
 else printf(" \n Nghiem phtrinh: %.3f",b); 
 printf("\n\n Ban tiep tuc ko(c/k)?"); 
 tt=getch(); 
 if (tt!='c') break;} 
} 
void nhap(float *a, int n) 
{ int i; 
 printf("\n Nhap he so cua phuong trinh:\n"); 
 for (i=0;i<=n; ++i) { 
 printf(" a[%d]=",i); 
 scanf("%f",a+i); 
 } 
} 
/* ham tinh gia tri da thuc*/ 
float f(float x) 
{ 
 float p=d[0]; int i; 
 for(i=1;i<=n;i++) p=p*x+d[i]; 
 return p; 
} 
3. PP tiếp tuyến 
# include "conio.h" 
# include "math.h" 
# define eps 1e-3 
float f(float x); 
float fdh(float x); 
main() 
{ float a,b; char tt; 
 while (1) 
 { printf("\nNhap xap xi ban dau: "); scanf("%f",&a); 
 /*b=a-f(a)/fdh(a); 
 65
 printf("\n%.3f %.3f %f",a,-f(a)/fdh(a),b);*/ 
 do { 
 b=a; 
 a=b-f(b)/fdh(b); 
 printf("\n%.3f %.3f %f",b,-f(b)/fdh(b),a); 
 } 
 while (fabs(a-b) >= 1e-3 ); 
 printf("\nNghiem phtrinh: %.3f",a); 
 printf("\nTiep tuc ko(c/k)?"); 
 tt=getch(); 
 if (tt=='k' || tt=='K') break;} 
} 
float f(float x) 
{ 
 return exp(x)-10*x+7; 
} 
float fdh(float x) 
{ 
 return exp(x)-10; 
} 
4. Giải hệ phtrình đại số tuyến tính bằng PP Gauss 
# include 
# include "conio.h" 
# include "math.h" 
void nhap(float *a, int n,int m); 
void xuatmt(float *a, int n,int m); 
main() 
{ float a[10][10]; 
 float x[10],m,s; 
 char tt; 
 int n,i,j,k; 
 while (1) { 
 printf("\n Nhap n= "); scanf("%d",&n); 
 printf("\n Nhap he so cua he phuong trinh:\n"); 
 for (i=1;i<=n; ++i) 
 for (j=1;j<=n+1;++j) { 
 printf(" pt[%d%d]=",i,j); 
 scanf("%f",&m); 
 a[i][j]=m; 
 } 
 66
 for (i=1;i<=n; i++) { 
 printf("\n"); 
 for (j=1;j<=n+1;j++) printf("%.3f ",a[i][j]); 
 } 
 /* bien doi A ve ma tran tam giac tren */ 
 for(i=1;i<n;i++) 
 for(j=i+1;j<=n;j++) { 
 m=-a[j][i]/a[i][i]; 
 for(k=i;k<=n+1;k++) a[j][k]+=a[i][k]*m; 
 } 
 printf("\n"); 
 for (i=1;i<=n; i++) { 
 printf("\n"); 
 for (j=1;j<=n+1;j++) printf("%.3f ",a[i][j]); 
 } 
 /* tim nghiem theo qtrinh nguoc */ 
 for(i=n;i>=1;i--) { 
 s=a[i][n+1]; 
 for(k=i+1;k<=n;k++) s-=a[i][k]*x[k]; 
 x[i]=s/a[i][i]; 
 } 
 printf("\nNghiem he phtrinh:"); 
 for(i=1;i<=n;i++) printf("%.3f ",x[i]); 
 printf("\n\n Ban tiep tuc ko(c/k)?"); 
 tt=getch(); 
 if (tt!='c') break;} 
} 
/* Ham nhap mang a(m,n)*/ 
void nhap(float *a, int n,int m) 
{ int i,j; 
 printf("\n Nhap he so cua he phuong trinh:\n"); 
 for (i=1;i<=m; i++) 
 for (j=1;j<=n;j++) { 
 printf(" pt[%d%d]=",i,j); 
 scanf("%f",a+i*n+j); 
 } 
} 
/* Ham xuat mang a(m,n)*/ 
void xuatmt(float *a, int n,int m) 
{ int i,j; 
 67
 for (i=1;i<=m; i++) { 
 printf("\n"); 
 for (j=1;j<=n;j++) printf("%.3f ",*(a+i*n+j)); 
 } 
} 
 68
TÀI LI ỆU THAM KHẢO 
[1] Đặng Quốc Lương, Phương pháp tính trong kỹ thuật, Nhà xuất bản xây 
dựng Hà nội, 2001 
[2] Phan Văn Hạp, Giáo trình Cơ sở phương pháp tính tập I,II. Trường ĐH 
Tổng hợp Hà nội, 1990 
[3] Cao quyết Thắng, Phương pháp tính và Lập trình Turbo Pascal. Nhà XB 
giáo dục, 1998 
[4] Tạ Văn Đĩnh, Phương pháp tính. Nhà XB giáo dục, 1994 
[5] Dương Thủy Vỹ, Phương pháp tính. Nhà XB khoa học & kỹ thuật, 2001 
[6] Phan Văn Hạp, Bài tập phương pháp tính và lập chương trình cho máy tính 
điện tử. Nhà XB đại học và trung học chuyên nghiệp, 1978 
[7] Ralston A, A first course in numberical analysis. McGraw – Hill, NewYork, 
1965 

File đính kèm:

  • pdfgiao_trinh_phương pháp tính.pdf
Bài giảng liên quan