Nhưng bằng một cách nào đó ta thu được một bảng số có gồm các điểm xi thuộc đoạn [a;b] tương ứng với giá trị yi của hàm số tại điểm đó, vậy làm thế nào để từ các điểm trên ta có thể tí
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
BÁO CÁO GIỮA KỲ MÔN HỌC
Phương Pháp Số
Tên đề tài :
Nội suy trung tâm với thuật toán Bessel
Nhóm 12
Hà Nội – 1 Tháng 1 - 2021
Trang 2Bài toán chung:Hàm số y= f(x) xác định trên đoạn [a;b] nào đó, ta chưa biết biểu
thức cụ thể của f(x) Nhưng bằng một cách nào đó ta thu được một bảng số có gồm
các điểm xi thuộc đoạn [a;b] tương ứng với giá trị yi của hàm số tại điểm đó, vậy
làm thế nào để từ các điểm trên ta có thể tính được giá trị tại một điểm bất kỳ
x xi Hoặc cũng có thể ta đã xác định được việc biên đổi quy luật của hàm
y=f(x) nhưng quy luật quá phức tạp nên ta cũng không thể tính giá trị tại x một cách
dễ dàng được Do vậy, ta tìm cách xây dựng hàm F(x) đơn giản hơn f(x) mà khi tính
giá trị của F(x) và f(x) thì sự sai lệch là không lớn Hàm F(x) tìm được thỏa mãn điều
trên thường sẽ là đa thức và gọi là đa thức nội suy
Ta đã được làm quen với đa thức nội suy tiến, lùi Đa thức nội suy tiến hoặc lùi đều có
tính chất một phía Vậy tại sao ta không đưa ra đa thức nào đó có thể sử dụng cả tiến
và lùi để hiệu quả đạt được cao hơn
Đa thức mà có thể khai thác được cả 2 vấn đề tiến và lùi gọi là đa thức nội suy trung
tâm (công thức nội suy trung tâm)
I – Công thức nội suy trung tâm được xây dựng
Trang 3II – Những vấn đề khởi đầu
- Các công thức nội suy trung tâm nêu trên sẽ chỉ dùng cho việc các mốc nội suy là
cách đều với bước là h>0
- Công thức nội suy trung tâm được xây dựng dựa trên công thức nội suy Newton có
mốc cách đều
- Về bản chất công thức nội suy trung tâm cũng được xây dựng dựa trên khai triển Taylor – Maclaurin
- Từ n+1 mốc ban đầu thì đa thức nội suy F(x) tìm được là duy nhất!!!
Trang 41 – Sai phân
Cho hàm số f(x) xác định trên đoạn [a;b]
x là số gia của đối số , x = h : bước nhảy
x = xi+1 − xi
Biểu thức y = y( x+h) − y gọi là sai phân cấp một của hàm y=f(x) tại x
Sai phân của sai phân cấp một là sai phân cấp hai ,
Sai phân của sai phân cấp m-1 gọi là sai phân cấp m ,
2 - Nhắc lại một số tính chất của sai phân
• Delta là toán tử tuyến tính
• Giá trị của hàm f(x) được biểu diễn qua sai phân các cấp của nó
• Sai phân cấp m của hàm f(x) được biểu diễn qua các giá trị liên tiếp của nó
• Nếu f(x) có đạo hàm liên tục đến cấp m trên đoạn [x,x+mh] thì ta có:
m f (x) = hm f (m) (x + mh) với 0 1
3 – Bảng sai phân
Trang 5III – Lý thuyết xây dựng công thức nội suy trung tâm Bessel và ưu điểm
1 Ý tưởng xây dựng công thức và lý thuyết
Xuất phát từ hai công thức Gauss I và Gauss II :
- Gauss I :
Khi đó , Gauss I sẽ kết nạp các mốc nội suy theo quy tắc tiến trước lùi sau, tức là : x0 -> x1 -> x(-1) - > x2 -> x(-2)
- Và Gauss II :
Còn Gauss II sẽ kết nạp các mốc nội suy theo quy tắc lùi trước tiến sau, tức là : x0 -> x(-1) -> x1 - > x(-2) -> x2
Kết hợp 2 công thức này lại và lấy trung bình ta sẽ được công thức nội suy trung tâm Bessel
Trang 6( )
Trước tiên, ta có :
Cho 2n + 2 mốc nội suy các đều sau:
x−n , x−(n−1) , , x−1, x0 , x1, , xn−1, xn , xn+1
Xuất phát từ mốc x0 sử dụng công thức nội suy Gauss II vừa ghi ở trên :
y− 2 y 3 y p(x) = p(x0 + ht) = y0 +
4 y
1 t + −1( t +1 ) t + −2( t +1 ) t ( t −1 )
(2n−1)
y
+ −2( t + 2 )( t +1 ) t ( t −1 ) + + −n( t + n −1 ) ( t − n +1 ) (1)
4!
+ 2n y − n
(2n)!
( 2n −1 ) ! (t + n)(t + n −1) (t − n +1)
Xuất phát từ mốc x1 , với x − x0 = ht thì
x − x1 = ( x − x0 ) + ( x0 − x1 ) = h ( t −1 )
Viết lại công thức (1) với mốc
được:
x1 , nghĩa là thay t bởi t −1 trong công thức (1) ta
p(x) = p(x0 + ht) = y1 + 0( t −1 ) + 0 t ( t −1 ) + −1 t ( t −1 )( t − 2 )
4 y (2n−1)
y
+−1(t +1)t (t −1)(t − 2) + +−(n−1)(t + n − 2) (t − n)
4!
2n
y
(2n −1)!
+− (n−1) (t + n −1) (t − n)
Trung bình cộng giữa công thức (2) và công thức nội suy Gauss thứ I như đã ghi ở
trên ta được:
= y + y 1 t ( t −1 ) 2 y + 2 y
p(x) p(x0 + ht) = 0 1 + t −
2 2 y0 +
−1 0
Trang 72
2
t − 1
t ( t −1 )
3! 3 y− + ( t +1 ) t ( t −1 )( t − 2 ) 4
y−
4!
+ 4 y−
2
t − 1 (t +1) t (t −1)(t − 2)
2
5! 5 y− + +
+ ( t + n −1 )( t + n − 2 ) ( t + 2 )( t +1 ) t ( t −1 )( t − 2 ) ( t − n ) 2n
y−n + 2n
y−n+1
t − 1 (t + n −1) (t + 2)(t +1)t (t −1)(t − 2)(t − n)
(12)
+
(2n +1)! 2n+1
y−
Trong đó: x = x0 + ht
Gọi các hệ số
sau:
ai , i = 0, 2 n+1 lần lượt là hệ số của p(x) tức là ta viết lại p(x) như
p(x) = p(x + ht) = a + a (t − 1 ) + a t(t −1)
+a (t − 1 )t(t −1) + a (t +1)t(t −1)(t − 2) + a (t − 1 )(t +1)t(t −1)(t − 2)
3
+ +2n ( t + n −1 )( t + n − 2 ) ( t + 2 )( t +1 ) t ( t −1 )( t − 2 ) ( t − n )
+a t − 1 ( t + n −1 ) ( t + 2 )( t +1 ) t ( t −1 )( t − 2 ) ( t − n )
2n+1
2
Như vậy, các hệ số sẽ được tính theo công thức tổng quát sau:
0
2
1
2
n
Trang 82i+1
y + 2i y
(2i +1)! a2i = −i −i+1
2(2i)! i = 1, n
Có thể nói: công thức nội suy Bessel chính là trung bình cộng cả về “hình thức” và
“tính toán” của 2 công thức Gauss I và Gauss II
2 Ưu điểm của công thức nội suy trung tâm Bessel
- Công thức nội suy Bessel chỉ cần tính sai phân cấp chẵn
- Và các sai phân cấp “chẵn” đều có thể biến đổi về các sai phân cấp “chẵn” - thấp hơn nó một cách “hệ thống”
- Do đó, trong việc tính toán các hệ số của đa thức nội suy thì: “Ta chỉ cần tính các sai phân cấp chẵn của hàm số f(x) ” là ta có thể tính được toàn bộ các hệ số của đa thức nội suy và xây dựng được đa thức
Và ngay từ ý tưởng xây dựng công thức nội suy Sterling ta có thể thấy, công thức này đã tích hợp lại được cả 2 công thức Gauss I và Gauss II vào bên trong
nó Từ đó, ta thấy được khi sử dụng công thức nội suy Bessel trong việc tính toán giá trị sẽ không cần phải xem sét việc điểm cần tính là nằm phía bên nào
so với mốc nằm ở trung tâm là x0
Trang 9III Lưu đồ thuật toán lập trình công thức Bessel , Input , Output
- Input: + Nhập hàm f(x) cần xây dựng đa thức nội suy để có bảng giá trị ban
đầu
+ Nhập điểm xuất phát của x + Nhập bước nhảy giữa các giá trị x (cách đều) + Nhập giá trị cần tính x* để tính giá trị đa thức tại x*
+ Nhập số mốc nội suy mong muốn sẽ được trích xuất ra từ bảng giá trị ban đầu để tính x*
- Output: + hàm F(x) sau khi đã rút gọn
+ Giá trị của hàm tại điểm x*
- Lưu Đồ Thuật Toán:
Em co gửi kèm file PDF lưu đồ thuật toán
- Lưu đồ thuật toán Bessel theo ý tưởng xây dựng thuật toán Bessel ở phần
II :
Trang 12Lưu đồ lập bảng sai phân :
Trang 13Lưu đồ thuật toán trích xuất mong nội suy từ bảng giá trị ban đầu:
- Với I là giá trị trung tâm cần xác định, từ đó sẽ đi sang 2 phía ở bảng giá
trị
- Với N là số mốc sẽ lấy ở bảng giá trị và tổng số mốc là 2N+2 mốc còn tuy
theo I lệch về bên trái hay bên phải của bảng giá trị
Trang 14IV Lập trình
Phần lập trình em có gửi file Code và file PDF hướng dẫn sử dụng
Với phần code nhập số hàm, số liệu là ở file PhuongPhap và phần code lập bảng sai phân là ở file MocCachDeu ạ
Dưới đây em xin gửi lại một phần code thuật toán Bessel ở file Bessel :
class Bessel : MocCachDeu
{
public static void bessel()
{
//nhap();
NhapTuDong();
LapBangSaiPhan();
double h = x[1] - x[0];
Trang 15int I = (int)((a - x[0]) / h);
if (I >= 5 && n - I - 1 >= 10)
N = 5;
else if (I < n / 2)
N = I;
else
N = n - I - 1;
DaThuc T = new DaThuc(); T += 1; // T = (t+n-1) (t+2)(t+1)t(t-1)(t-2) (t-n) DaThuc p = new DaThuc();
DaThuc t = new DaThuc(1);t.Heso[1] = 1 / h; t.Heso[0] = -x[I] / h;
p += saiphan[1, I] * (t - 0.5) + (y[I] + y[I + 1]) / 2;
for (int m = 1; m <= N; m++)
{
T *= (t - m) * (t + m - 1);
double SaiPhanTB = (saiphan[2 * m, I - m] + saiphan[2 * m, I - m + 1]) / 2;
p += (SaiPhanTB / giaithua(2 * m)) * T;
p += (saiphan[2 * m + 1, I - m] / giaithua(2 * m + 1)) * (T * (t - 0.5));
}
Console.WriteLine("f(x) = {0}", p);
Test(p, I - N, I + N + 1);
}
}
Trang 16V Ví dụ chạy test kết quả
Trang 17- Xong em chạy chương trình và nhập số mốc mong muốn từ bảng giá trị ban đầu là
50
Trang 18- Em nhập tương tự như ví dụ 1 với h = 10, temp = 1000, hàm y = x^(1/2) và chạy chương trình