Tải bản đầy đủ (.docx) (21 trang)

Tiểu luận môn TOÁN CHO KHOA HỌC MÁY TÍNH Một vài phương pháp tính gần đung ứng dụng cho đạo ham và tích phân

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (380.95 KB, 21 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Bài thu hoạch môn: Toán cho Khoa học máy tính

Giảng viên hướng dẫn: PGS. TS. Nguyễn Phi Khứ
Học viên: Hà Siu
Mã số học viên: CH1301051
Lớp: Cao học Khóa 8 (đợt 1)
MỤC LỤC
1
TP.HCM, Tháng 12 - 2013
Lời nói đầu
Phương pháp tính là một môn học đã có từ lâu, nhưng từ khi máy tính điện tử ra
đời, môn học này phát triển rất nhanh, nhằm xây dựng những thuật toán đơn giản, có
hiệu lực, giải đến kết quả bằng số những bài toán của khoa học kỹ thuật trên máy tính.
Vì vậy, ngày nay với việc sử dụng rộng rãi máy tính trong các cơ quan, xí nghiệp, các
kiến thức của môn phương pháp tính càng trở nên hết sức cần thiết đối với người học
khoa học máy tính.
Trong nhiều bài toán kỹ thuật, ví dụ khi cần tính tích phân trong phương pháp số
phần tử hữu hạn, phần tử biên… thường chúng không nhận được kết quả bởi giải tích;
lúc đó người ta hay sử dụng các phương pháp tính gần đúng.
Bài thu hoạch này em xin trình bày hai phần sau đây:
Chương 1: Tính gần đúng đạo hàm.
Chương 2: Tính gần đúng tích phân xác định.
Với những kiến thức toán học hạn chế của em nên mục tiêu của bài thu hoạch này
chỉ nhằm mục đích học tập và tìm hiểu một vài phương pháp tính gần đúng ứng dụng
cho việc tính đạo hàm và tích phân, báo cáo mang tính chất học tập và minh họa là
chính.
Em xin chân thành cảm ơn PGS. TS. Nguyễn Phi Khứ đã có những bài giảng súc
tích và sâu sắc để tạo cảm hứng cho sự ra đời của bài thu hoạch này.
2


CHƯƠNG 1: TÍNH GẦN ĐÚNG ĐẠO HÀM
1.1. Đạo hàm ROMBERG
Ta biểu diễn hàm f(x) bằng đa thức nội suy: f(x) = P(x), với P(x) là đa thức nội suy
(đa thức nội suy tiện lợi là spline bậc 3); tiếp theo ta tính gần đúng đạo hàm f’(x) ở đa
thức này:
f’(x) = P’(x)
Ta cũng có thể áp dụng khai triển Taylor:
( ) ( ) ( ) ( )
2
h
f x h f x h.f x .f c
2!
′ ′′
+ = + +
, với
c x h,0 1
= + θ < θ <
Từ đó ta tính được:
( )
( ) ( )
f x h f x
f x
h
+ −


Đạo hàm ROMBERG là một phương pháp ngoại suy để xác định đạo hàm với độ
chính xác cao theo mong muốn.
Để nhận được đạo hàm theo phương pháp này, ta sử dụng khai triển Taylor hàm
f(x) tại (x + h) và (x – h):

( ) ( ) ( ) ( ) ( )
( )
( )
2 3 4
4
h h h
f x h f x h.f x .f x .f x .f x
2! 3! 4!
′ ′′ ′′′
+ = + + + + +
(1.1)
( ) ( ) ( ) ( ) ( )
( )
( )
2 3 4
4
h h h
f x h f x h.f x .f x .f x .f x
2! 3! 4!
′ ′′ ′′′
− = − + − + +
(1.2)
Trừ vế cho vế, ta được:
( ) ( ) ( ) ( )
( )
( )
3 5
5
h h
f x h f x h 2h.f x 2 .f x 2 .f x

3! 5!
′ ′′′
+ − − = + + +
(1.3)
Từ biểu thức trên ta rút ra f’(x):
( )
( ) ( )
( )
( )
( )
2 4
5
f x h f x h
h h
f x .f x .f x
2h 3! 5!
+ − −
′ ′′′
= − − +
(1.4)
Hay ta có thể viết lại:
( ) ( ) ( )
2 4 6
2 4 6
1
f x f x h f x h a h a h a h
2h

 
= + − − + + + +

 
(1.5)
Trong biểu thức trên, các hệ số a
i
phụ thuộc vào f và x.
Ta đặt:
( ) ( ) ( )
1
h f x h f x h
2h
 
φ = + − −
 
(1.6)
Như vậy, từ hai biểu thức trên ta được:
3
( ) ( ) ( )
2 4 6
2 4 6
D 1,1 h f x a h a h a h

= φ = − − − −
(1.7)
Thay
h
h
2
=
, ta có:
( ) ( )

2 4 6
2 4 6
h h h h
D 2,1 f x a a a
2 4 16 64
 

= φ = − − − −
 ÷
 
(1.8)
Tổng quát, nếu thay h bằng
i
i 1
h
h h
2

= =
, ta được:
( ) ( ) ( )
2 4 6
i 2 i 4 i 6 i
D i,1 h f x a h a h a h

= φ = − − − −
(1.9)
Để tạo ra sai phân có độ chính xác cao hơn, ta lấy D(1,1) – 4.D(2,1), được:
( ) ( )
4 6

4 6
h 3 15
h 4 3f x a h a h
2 4 16
 

φ − φ = − − − −
 ÷
 
(1.10)
Chia hai vế của (1.10) cho -3, ta được:
( )
( ) ( )
( )
4 6
4 6
4D 2,1 D 1,1
1 5
D 2,2 f x a h a h
3 4 16


= = + + +
(1.11)
Đối chiếu các biểu thức (1.7), (1.8), (1.9) với biểu thức (1.11), ta nhận thấy:
D(i, 1) sai khác với f’(x) bậc h
2
, trong khi D(2, 2) sai khác với f’(x) bậc 0(h)
4
.

Bây giờ, nếu chia đôi bậc h, ta sẽ nhận được:
( ) ( )
4 6
4 6
1 h 5 h
D 3,2 f x a a
4 2 16 2
   

= + + +
 ÷  ÷
   
(1.12)
Và để khử số hạng h
4
, ta lấy (1.11) – 16.(1.12), được:
( ) ( ) ( )
6
6
15
D 2,2 16D 3,2 15f x a h
64

− = − + +
(1.13)
Ta đi chia hai vế của (1.13) cho -15, được:
( )
( ) ( )
( )
6

6
16D 3,2 D 2,2
1
D 3,3 f x a h
15 64


= = − +
(1.14)
Với (1.14), ta thấy sai số bậc 0(h)
6
.
Nếu ta tiếp tục chia đôi bậc h và tính D(4, 4) thì sai số của đạo hàm f’(x) là bậc
0(h)
8
.
Một cách truy hồi, ta có sơ đồ tính đạo hàm theo phương pháp ROMBERG như
sau:
4
Trong đó, mỗi giá trị sau có được bằng cách ngoại suy các giá trị trước nó ở hàng
trên.
Với : 2 ≤ j ≤ i ≤ n ; ta có công thức tổng quát:
( )
( ) ( )
j i
j i
4 D i, j 1 D i 1, j 1
D i, j
4 1



− − − −
=

(1.15)
Và giá trị khởi đầu là:
( ) ( ) ( ) ( )
i i i
i
1
D i, j h f x h f x h
2h
 
= φ = + − −
 
(1.16)
Với
i
i 1
h
h
2

=
.
Như vậy phương pháp ROMBERG có thể cho phép tính đạo hàm với độ chính
xác tùy ý; trong thực hành khi hai lần tính đạo hàm liên tiếp, nếu sai số nhỏ hơn sai số
cho phép, thì chương trình tính sẽ dừng lại.
Ví dụ. Tìm đạo hàm của hàm f(x) = x
2

+ arctan(x) tại x = 2 với bước tính h = 0.5.
Trị chính xác của đạo hàm là 4.2.
( ) ( ) ( )
1
D 1,1 f 2,5 f 1,5 4.207496266
2x0,5
 
= − =
 
( ) ( ) ( )
1
D 2,1 f 2,25 f 1,75 4.201843569
2x0,25
 
= − =
 
( ) ( ) ( )
1
D 3,1 f 2,125 f 1,875 4.200458976
2x0,125
 
= − =
 
( )
( ) ( )
4D 2,1 D 1,1
D 2,2 4.19995935
4 1

= =


( )
( ) ( )
4D 3,1 D 2,1
D 3,2 4.200458976
4 1

= =

( )
( ) ( )
2
2
4 D 3,2 D 2,1
D 3,3 4.200492284
4 1

= =

5
Chương trình tính đạo hàm như dưới đây. Dùng chương trình tính đạo hàm của
hàm cho trong function với bước h = 0.25 tại x
0
= 0 ta nhận được giá trị đạo hàm là
1.000000001.
1.2. Ứng dụng lập trình
1.2.1. Dùng C++
//Daoham_Romberg;
#include <conio.h>
#include <stdio.h>

#include <math.h>
#define max 11
float h;
void main()
{
float d[max];
int j,k,n;
float x,p;
float y(float),dy(float);
clrscr();
printf("Cho diem can tim dao ham x = ");
scanf("%f",&x);
printf("Tinh dao ham theo phuong phap Romberg\n");
printf("cua ham f(x) = th(x) tai x = %4.2f\n",x);
n=10;
h=0.2;
d[0]=dy(x);
for (k=2;k<=n;k++)
{
h=h/2;
d[k]=dy(x);
p=1.0;
for (j=k-1;j>=1;j )
{
p=4*p;
d[j]=(p*d[j+1]-d[j])/(p-1);
}
}
printf("y'= %10.5f\n",d[1]);
getch();

}
float y(float x)
{
float a=(exp(x)-exp(-x))/(exp(x)+exp(-x));
return(a);
}
6
float dy(float x)
{
float b=(y(x+h)-y(x-h))/(2*h);
return(b);
}
1.2.2. Dùng Matlab
Xây dựng hàm:
function df = diffromberg(f, x, h, maxiter, tol)
%Tinh dao ham bang phuong phap Romberg
D(1, 1) = (feval(f,x+h) - feval(f, x-h))/(2*h);
for i = 1:maxiter
h = h/2;
D(i + 1, 1) = (feval(f,x+h) - feval(f, x-h))/(2*h);
for j = 1:i
D(i + 1, j + 1) = (4^j*D(i + 1, j) - D(i, j))/(4^j - 1);
end
if (abs( D(i + 1, i + 1) - D(i, i) ) < tol)
df = D(i+1, i+1);
break;
elseif ( i == maxiter )
error( 'Ngoai suy Richardson khong hoi tu' );
end
end

Áp dụng. Tìm đạo hàm của hàm f(x) = x
2
+ 2xe
x
+ 1 tại x = 2 với bước tính h =
0.5.
Kết quả tính đạo hàm là 48.334.
Để tính đạo hàm của hàm cho trước ta dùng chương trình:
clear all, clc
format long;
f = inline('x^2 + 2*x*exp(x) + 1');
x = 2;
h = 0.5;
tol = 1e-6;
maxiter = 10;
df = diffromberg(f, x, h, maxiter, tol)
7
CHƯƠNG 2: TÍNH GẦN ĐÚNG TÍCH PHÂN XÁC ĐỊNH
2.1. Công thức hình thang
Trong từng khoảng chia (i, i+1), đường cong M
i
, M
i+1
được xấp xỉ thành đường
thẳng.
Đối với tích phân thứ (i + 1), ta có:
( )
i 1
i
x

i i 1
x
y y
f x dx h
2
+
+
+
=

Với
i
b a
x a ih,h
n

= + =
0 n
i 1, 2, ,n;a x ,b x= = =
( ) ( ) ( ) ( )
1 2 n
0 1 n 1
b x x x
a x x x
I f x dx f x dx f x dx f x dx

= = + + +
∫ ∫ ∫ ∫
(2.1)
( ) ( ) ( )

T 0 1 1 2 n 1 n
h
I y y y y y y
2

 
≅ + + + + + +
 
0 n
T 1 2 n 1
y y
I h y y y
2

+
 
≅ + + + +
 
 
(2.2)
Sai số
( )
2
T
M
I I h b a
12
− ≤ −
, với
( )

M max f x ,a x b
′′
= ≤ ≤
.
Ví dụ. Dùng công thức hình thang tổng quát với n=10 để tính gần đúng:
1
0
dx
I
1 x
=
+

Đánh giá những sai số của những giá trị gần đúng nhận được.
8
Giải:
Ta có:
1 0
h 0,1
10

= =
Kết quả tính toán trong bảng sau:
Theo công thức hình thang tổng quát ta có:
1,0000 0,50000
I 0,1( 0,90909 0,83333 0,76923 0,71429 0,66667
2
0,62500 0,58824 0,55556 0,52632) 0,69377

≈ + + + + + +

+ + + + =
Sai số R được xác định như sau:
( )
2
T
M
I I h b a
12
− = −
(2.3)
Với
( )
M max f x ,0 x 1
′′
= < <
( ) ( )
1
1
f x 1 x
1 x

= = +
+
( ) ( )
2
f x 1 x


= − +
9

( ) ( ) ( ) ( )
( )
3
3
2
f x 1 2 1 x
1 x

′′
= − − + =
+
Trong đó
( )
M max f x 2
′′
= =
( )
( )
2
2. 0.1
R 1 0 0,00167
12
≤ − =
(2.4)
2.2. Ứng dụng lập trình
2.2.1. Dùng C++
//tinh tich phan bang phuong phap hinh_thang;
#include <conio.h>
#include <stdio.h>
#include <math.h>

float f(float x)
{
float a=exp(-x)*sin(x);
return(a);
};
void main()
{
int i,n;
float a,b,x,y,h,s,tp;
clrscr();
printf("Tinh tich phan theo phuong phap hinh thang\n");
printf("Cho can duoi a = ");
scanf("%f",&a);
printf("Cho can tren b = ");
scanf("%f",&b);
printf("Cho so buoc n = ");
scanf("%d",&n);
h=(b-a)/n;
x=a;
s=(f(a)+f(b))/2;
for (i=1;i<=n;i++)
{
x=x+h;
s=s+f(x);
}
tp=s*h;
printf("Gia tri cua tich phan la : %10.6f\n",tp);
getch();
}
10

2.2.2. Dùng Matlab
Xây dựng hàm:
function J = trapezoid(f, a, b, maxiter, tol)
% Quy tac hinh thang lap.
% Cu phap: J = trapezoid(f, a, b, k)
fa = feval(f, a);
fb = feval(f, b);
J1 = (fa + fb)*(b - a)/2;
for k = 2:maxiter
n = 2^(k -2 ); % so diem moi
h = (b - a)/n ; % khoang chia moi
x = a + h/2.0; % toa do diem moi thu nhat
sum = 0.0;
for i = 1:n
fx = feval(f, x);
sum = sum + fx;
x = x + h;
end
J = (J1 + h*sum)/2;
if abs(J1 - J) < tol
break;
end
J1 = J;
end
Áp dụng. Tính tích phân
( )
1
3
0
J x 1 sin xdx= +


Để tính tích phân ta dùng chương trình:
clear all, clc
f = inline('(x^3+1)*sin(x)','x');
a = 0;
b = 1;
maxiter = 50;
tol = 1e-6;
J = trapezoid(f, a, b, maxiter, tol)
Kết quả J = 0.63679
2.3. Công thức Simpson
Bây giờ cứ mỗi đoạn cong M
i
, M
i+1
được xấp xỉ bằng đường cong bậc hai, đi qua
ba giá trị y
i
, y
i+1
và giá trị y tại
i i 1
x x
x
2
+
+
=
, có nghĩa chia [a, b] thành 2n đoạn bằng
nhau, bởi các điểm chia x

i
:
a = x
0
< x
1
< x
2
< < x
2n
= b, nghĩa là: x
i
= a + ih
Với
b a
h
2n

=
, với: i = 0, 1, 2,…,2n
11
Dùng đa thức nội suy bậc 2 xấp xỉ theo Newton, ta có công thức tính gần đúng
tích phân theo Simpson:
( ) ( )
( )
2 2
0 0
x x
2
2

2 0 0 0
x x 0
t t 1
f x dx p x dx h y t y y dt
2
 
+
≈ = + ∆ + ∆
 ÷
 
∫ ∫ ∫
(2.5)
( ) ( )
2
0
x
0 0 2
x
h
f x dx y 4y y
3
≈ + +

(2.6)
Tổng quát:
( ) ( )
2i 2
2i
x
2i 2i 1 2i 2

x
h
f x dx y 4y y
3
+
+ +
≈ + +

(2.7)
Vậy:
( ) ( ) ( ) ( )
2i 2
2i
x
0 1 2 2 3 4 2n 2 2n 1 2n
x
h
f x dx y 4y y y 4y y y 4y y
3
+
− −
 
≈ + + + + + + + + +
 ∫
( ) ( ) ( )
0 2n 1 3 2n 1 2 4 2n 2
h
I y y 4 y y y 2 y y y
3
− −

 
≈ + + + + + + + + +
 
(2.8)
Sai số:
( )
4
S
h
I I M b a
180
− ≤ −
(2.9)
Với:
( )
4
M max f x ,a x b
= ≤ ≤
2.4. Ứng dụng lập trình
2.4.1. Dùng C++
//Phuong phap Simpson;
#include <conio.h>
#include <stdio.h>
#include <math.h>
float y(float x)
{
float a=4/(1+x*x);
return(a);
}
void main()

{
int i,n;
float a,b,e,x,h,x2,y2,x4,y4,tp;
clrscr();
12
printf("Tinh tich phan theo phuong phap Simpson\n");
printf("Cho can duoi a = ");
scanf("%f",&a);
printf("Cho can tren b = ");
scanf("%f",&b);
printf("Cho so diem tinh n = ");
scanf("%d",&n);
h=(b-a)/n;
x2=a+h;
x4=a+h/2;
y4=y(x4);
y2=y(x2);
for (i=1;i<=n-2;i++)
{
x2+=h;
x4+=h;
y4+=y(x4);
y2+=y(x2);
}
y2=2*y2;
y4=4*(y4+y(x4+h));
tp=h*(y4+y2+y(a)+y(b))/6;
printf("Gia tri cua tich phan la : %10.8f\n",tp);
getch();
}

2.4.2. Dùng Matlab
Xây dựng hàm:
function s = simpson(f, a, b, n)
%n so khoang chia
%neu f chua trong mot file dung ki hieu @ de goi
% s = simpson(@f, a, b, n).
%neu f la ham inline
% s = simpson(f, a, b, n).
if mod(n, 2) ~= 0
n = n + 1
end
h = (b - a)/(2*n);
s1 = 0;
s2 = 0;
for k = 1:n
x = a + h*(2*k-1);
s1 = s1+ f(x);
end
for k = 1:(n-1)
x = a + h*2*k;
s2 = s2 + f(x);
13
end
s = h*(f(a) + f(b) + 4*s1 + 2*s2)/3;
clc
Áp dụng. Tính tích phân
1
x
0
J e sin xdx=


Để tính tích phân ta dùng chương trình:
clear all, clc
f = inline('exp(x).*sin(x)','x');
a = 0;
b = 1;
n = 6;
s = simpson(f, a, b, n)
Kết quả là J = 0.9093
2.5. Công thức của Gauss
2.5.1. Liên hệ giữa các hệ toạ độ tổng thể và hệ toạ độ địa phương
Trong nhiều trường hợp ta cần tính tích phân số với độ chính xác rất cao, như
trong phương pháp phần tử hữu hạn (PTHH), miền tính toán

được chia nhỏ thành
nhiều miền con, phương pháp biến phân trọng số xây dựng trên các miền con này. Do
đó dẫn đến tích phân hàm dạng trên miền con.
3
i i 1 1 2 2 3 3
i 1
x N x N x N x N x
=
= = + +

Nếu tích phân hàm dạng bậc cao với sử dụng hệ toạ độ tổng thể (x,y,z, global
coordinate) thì thông thường sẽ xuất hiện các biểu thức đại số rất phức tạp khi phần tử
là hai, ba chiều.
Thay vào đó nếu chúng ta thực hiện chúng trong hệ toạ độ địa phương (
, ,
ξ η ς

local coordinate) hay còn gọi là toạ độ chuẩn hay toạ độ tự nhiên (normal coordinate
hay natural coordinate) thì sẽ đơn giản hơn rất nhiều; bởi lẽ nó thuận lợi trong việc
xây dựng hàm nội suy, tích phân số dùng được cách thiết lập của Gauss-Legendre
(phổ biến nhất).
14
Hình 2.1: Biểu thị phần tử chiếu V
r
vào phần tử thực V
e
Với phần tử đẳng tham số (isoparametric), ta có thể viết công thức biến đổi toạ độ
cho phần tử tứ giác tuyến tính có bốn điểm nút như sau:
Với phần tử tam giác tuyến tính có ba điểm nút:
3
i i 1 1 2 2 3 3
i 1
y N y N y N y N y
=
= = + +

(2.10)
Ở đây N
i
, N
j
là hàm dạng hay còn gọi là hàm nội suy (shape function hay
interpolation function).
Từ luật đạo hàm đạo hàm riêng phần, ta có:
x y
x x
J

x y
y y
∂ ∂ ∂
   
∂ ∂
   
   
   
∂ξ ∂ξ ∂ξ
∂ ∂
     
 
= =
     
∂ ∂
∂ ∂ ∂
 
     
 
∂ ∂
     
∂η ∂η ∂η
   
   
(2.11)
Hay:
1
x
J
y



 

 
 
 
∂ξ

   
=
   


   

   
∂η
 
 
(2.12)
Ở đây J là ma trận Jacobian biến đổi toạ độ. Định thức của ma trận này, det J ,
cũng phải được ước lượng bởi lẽ nó được dùng trong các tích phân biến đổi như sau:
Cho phần tử tứ giác tuyến tính:
1
1
1
1
dxdy det J d d


ω −
ξ η
∫∫ ∫ ∫
(2.13)
Cho phần tử tam giác tuyến tính:
15
1
1
0
0
dxdy det J d d
−ξ
ω
η ξ
∫∫ ∫ ∫
(2.14)
Hình 2.2: Phần tử tứ giác có ma trận Jacobian không xác định
Trong một số trường hợp, ví dụ như ở Hình 2.1, phần tử tứ giác có 4 điểm nút,
nếu dạng hình học như vậy, ma trận Jacobian trở nên không xác định; để nó có giá trị
tốt, các hình dạng phần tử như cạnh và góc của nó cần phải đều đặn hơn (ví dụ tam
giác đều, tứ giác đều hình vuông, đây là các dạng phần tử lý tưởng).
2.5.2 Ứng dụng lập trình
Xây dựng hàm:
function [x, w] = gaussjacobi(n, alfa, beta)
%tinh cac trong so va hoanh do trong tich phan Gauss-
Jacobi
p = [0.5*(alfa + beta + 2) 0.5*(alfa - beta)];
a = 1;
b = p;
for i = 2:n+1

b1 = 2*i*(i + alfa + beta)*(2*i + alfa + beta -2);
b2 = (2*i + alfa + beta -1)*(alfa^2 - beta^2)/b1;
b3 = ((2*i + alfa + beta -2)*(2*i + alfa + beta -1 )*(2*i
+ alfa + beta))/b1;
b4= (2*(i + alfa -1)*(i + beta - 1)*(2*i + alfa +
beta))/b1;
s = [b3 b2];
if i == n+1
pn1 = conv(s, b) - [0 0 b4*a];
break;
else
p = conv(s, b) - [0 0 b4*a];
end
a = b;
b = p;
end
x = roots(p);
16
w = zeros(n, 1);
dv = polyder(p);
if mod(n, 2) == 1
86
sign = -1;
else
sign = 1;
end
dv = dv*(2^n)*factorial(n)/sign;
pn1 = -pn1*(2^(n+1))*factorial(n+1)/sign;
for i = 1:n
num = (2*n + alfa + beta +

2)*gamma(n+alfa+1)*gamma(n+beta+1)*(2^(2*n+alfa+beta+1))*
factorial(n);
den = (n + alfa + beta +
1)*gamma(n+alfa+beta+1)*polyval(dv,
x(i))*polyval(pn1, x(i));
w(i) = num/den;
end
Áp dụng. Tính tích phân
1
x
0
J e sin xdx=

Để tính tích phân ta dùng chương trình:
clear al, clc
f = inline('exp(x).*sin(x)','x');
n = 6;%n <= 40
alfa = 1;
beta = 0;
J = intgaussjacobi(f, n, alfa, beta)
Kết quả J = -0,1266
2.5.3. Tích phân số
Một số tích phân của các loại bài toán hai chiều (2D), ba chiều (3D), theo phương
pháp PTHH có thể được ước lượng bằng giải tích, nhưng nó không thực dụng cho các
hàm số phức tạp, đặc biệt trong trường hợp tổng quát khi
( )
,ξ η
là toạ độ cong. Trong
thực hành (2.13), (2.14) được ước lượng bằng số, gọi là tích phân số (numerical
integration hay còn gọi là numerical quadrature). Dùng tích phân số của Gauss, với

phần tử tứ giác, miền hai chiều ta có:
( )
( )
1 1
n n
i j i j
i 1 j 1
1 1
f , d d w w f ,
= =
− −
ξ η ξ η≅ ξ η
∑∑
∫ ∫
(2.15)
Với phần tử tam giác:
17
( )
( )
1
1
n
i i
i
i 1
0 0
1
f , d d w f ,
2
−ξ

=
ξ η η ξ ≅ ξ η

∫ ∫
(2.16)
Với phần tử tứ giác thì w
i
, w
j
là hệ số trọng số và i j
( )
i j
,ξ η
là các vị trí tọa độ bên
trong phần tử, cho ở Bảng 2.2; còn với phần tử tam giác, tương tự như phần tử tứ giác,
nhưng các điểm tích phân là các điểm mẫu (Sampling Points), Bảng 2.1.
Thông thường người ta muốn các tích phân số đạt độ chính xác cao, nhưng có
những trường hợp đặc biệt lại không cần thiết. Ở tích phân Gauss (3.31), với n = 2, sẽ
chính xác khi hàm f là cubic (bậc 3), còn ở tích phân (2.15), n = 1, sẽ chính xác khi đa
thức f bậc nhất, còn n = 3, sẽ chính xác khi đa thức f bậc hai.
Bảng 2.1: Điểm tích phân cho phần tử tam giác theo công thức (2.16)
18
Bảng 2.2: Trọng số và điểm tích phân Gauss – Legendre theo công thức (2.15)
Ví dụ 1. Tính tích phân:
1
3
2
1
x 2x dx


+

Tính tích phân Gauss với n = 3
Giải:
n = 3 tra bảng ta được:
a
1
= 0,774 W
1
≡ H
1
= 0,555
a
2
= -0,774 W
2
≡ H
2
= + 0,555
a
3
= 0,000 W
3
≡ H
3
= 0,888
( ) ( ) ( ) ( )
1
1 1 2 2 3 3
1

I f d H f a H f a H f a

= ξ ξ = + +

( ) ( ) ( )
2 2 2
3 3 3
I 0,555 0,774 2. 0,774 0,555 0,774 2. 0,774 0,888 0,000 2. 0,000 1,113= + + − + − + + =
Ví dụ 2. Dùng chương trình matlab
Tính tích phân:
1
x
0
J e sin xdx=

clc, clear all
% tinh tich phan ham f(x) tren doan [a, b]
19
% n <= 25;
f = inline('exp(x).*sin(x)','x');
a = 0;
b = 1;
n = 20;
J = intglegendre(f, a, b, n)
Kết quả: J = 0,9093
2.6. Kết luận
Trong nhiều bài toán kỹ thuật, ví dụ khi cần tính tích phân trong phương pháp số
phần tử hữu hạn, phần tử biên… thường chúng không nhận được kết quả bởi giải tích;
lúc đó người ta hay sử dụng các phương pháp tính gần đúng.
Giải tích số là một ngành của Toán học quan tâm đến các kết quả biểu diễn bằng

số; công việc của nó nhằm chuyển đổi các lời giải toán học chính xác về dạng các
công thức đơn giản sao cho các công thức này có thể tính được bằng các phép tính cơ
bản của số học, hoặc tìm các lời giải gần đúng khi không thể tìm lời giải chính xác sao
cho sự khác biệt giữa hai lời giải là nhỏ nhất. Do đó, có thể nói đây là một ngành kết
hợp giữa hai ngành Toán học và Khoa học máy tính và nó được đã và đang được sử
dụng rộng rãi trong các ngành khoa học và kỹ thuật.
Phép tính đạo hàm bằng số (đạo hàm gần đúng) được dùng để tính giá trị đạo hàm
của một hàm số khi biết giá trị cho sẵn của hàm số tại một số điểm nhất định. Việc
tính đạo hàm bằng số giữ vai trò quan trọng trong việc tính đạo hàm thường và
phương trình đạo hàm riêng.
Phương pháp tính tich phân bằng số được áp dụng cho các hàm số không có biểu
thức giải tích nhưng có các giá trị tại một số điểm và cho cả các hàm có biểu thức giải
tích; nó tiện lợi khi chỉ cần tính giá trị của tích phân. Giống như phép tính đạo hàm
bằng số, cơ sở để tính tích phân bằng số là đa thức nội suy.
20
Tài liệu tham khảo
[1] PGS. TS. Đặng Văn Liệt, Giải tích số, Nhà xuất bản Đại học Quốc gia Thành phố
Hồ Chí Minh, 2004.
[2] Nguyễn Chí Long, Phương pháp tính, Nhà xuất bản Đại học Quốc gia Thành phố
Hồ Chí Minh, 2002.
[3] GS. Tạ Văn Đĩnh, Phương pháp tính, Nhà xuất bản Giáo dục, 2003.
[4] PGS. TS. Dương Thủy Vỹ, Giáo trình Phương pháp tính, Nhà xuất bản Khoa học
và Kỹ thuật, 2005.
[5] PGS. TS. Đặng Văn Liệt, Vật lý tính toán, Nhà xuất bản Đại học Quốc gia Thành
phố Hồ Chí Minh, 2006.
21

×