Thử nghiệm dự báo trong tính toán khoa học

Một phần của tài liệu Ngoại suy trong phân tích dự báo và ứng dụng (Trang 25 - 32)

Trong mục này chúng tôi trình bày một số bài toán thử nghiệm áp dụng các phương pháp ngoại suy được trình bày ở chương trước để dự báo trong tính toán khoa học.

Bài toán 2.1.1. Một số giá trị của tích phân xác suất Φ(x) = 2

√π Z x

0

e−t2dt được cho trong Bảng 2.1

x 1.0 1.1 1.2 1.3 1.4

y 0.8427 0.8802 0.9103 0.934 0.9523

1.5 1.6 1.7 1.8 1.9 2.0

0.9661 0.9763 0.9838 0.9891 0.9928 0.9953 Bảng 2.1: Bảng một số giá trị của tích phân Φ(x) = 2

√π Z x

0

e−t2dt.

Hãy tính gần đúng Φ(1.43),Φ(2.01). Đánh giá sai số.

Giải. Chúng ta dùng phần mềm Maple để tìm đa thức nội suy bằng lệnh PolynomialInterpolation trong thư viện CurveFitting như sau

with(CurveFitting):

PolynomialInterpolation([[1, 0.8427], [1.1, 0.8802], [1.2, 0.9103], [1.3, 0.934], [1.4, 0.9523], [1.5, 0.9661], [1.6, 0.9763], [1.7, 0.9838], [1.8, 0.9891], [1.9, 0.9928], [2, 0.9953]], x) Kết quả thu được là đa thức nội suy bậc 10

f(x) =−17.08554894∗x10+ 252.1496330∗x9 −1665.014296∗x8 + 6477.930741∗x7−16444.29642∗x6+ 28459.11025∗x5

−34005.14284∗x4 + 27700.82140∗x3−14723.56714∗x2 + 4611.999034∗x−646.0621154.

Ta có giá trị gần đúng

Φ(1.43)≈ f(1.43) = 0.9568743987 Φ(2.01)≈ f(2.01) = 0.9952421349.

Dựa vào kết quả trên ta thấy 1.4 < 1.43 < 1.5 nên giá trị f(1.4) = 0.9523 <

f(1.43) = 0.9568743987 < f(1.5) = 0.9661 là hoàn toàn phù hợp. Tuy nhiên, 2.01 > 2.0 nhưng f(2.01) = 0.9952421349 lại nhỏ hơn f(2.0) = 0.9953. Từ đó ta thấy đa thức nội suy có thể được dùng để tính gần đúng giá trị nằm trong khoảng nội suy rất chính xác, tuy nhiên dùng đa thức nội suy để tính giá trị nằm ngoài khoảng nội suy có thể không chính xác bằng. Trong trường hợp này, chúng tôi dùng phần mềm Maple để tính Φ(2.01) và được kết quả như sau Phi := (x) -> 2*(int(exp(-t^2), t = 0 .. x))/sqrt(Pi)

evalf(Phi(2.01))

0.9955248493

Vậy Φ(2.01) = 0.9955248493> f(2.01) = 0.9952421349. Đồ thị của hàm Φ(x) và đa thứcf(x) trong đoạn u[1,2] được vẽ trong Hình 2.1-2.2 dưới đây. Chúng ta nhận thấy rằng hình dáng của hai đồ thị là tương tự nhau. Điều này cho thấy với kiểu dữ liệu đã cho phương pháp ngoại suy được suy ra từ nội suy là khá chính xác.

Để so sánh với phương pháp ngoại suy được suy ra từ nội suy với phương pháp hồi quy tuyến tính và hồi quy tam thức chúng tôi vẫn sử dụng bộ số liệu của Bài toán 2.1.1 để tính toán thử nghiệm.

Bài toán 2.1.2. Vẫn những dữ liệu như ở Bài toán 2.1.1, dùng hồi quy tuyến tính và hồi quy tam thức để tính gần đúng Φ(1.43),Φ(2.01)

Hình 2.1: Đồ thị của đa thức f(x) (Bài toán 2.1.1).

Hình 2.2: Đồ thị của hàm Φ(x) (Bài toán 2.1.1).

Giải. Ta dùng phần mềm Maple để tìm mô hình hồi quy tuyến tính.

with(Statistics):

X := Vector([1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0], datatype = float):

Y := Vector([.8427, .8802, .9103, .934, .9523, .9661,

.9763, .9838, .9891, .9928, .9953], datatype = float):

f := (t) -> LinearFit([1, t], X, Y, t):

f(t)

0.732981818181818845 + 0.143036363636363351*t Vậy mô hình hồi quy tuyến tính là

f(t) = 0.732981818181818845 + 0.143036363636363351t.

Ta có f(1.43) = 0.9375238181, f(2.01) = 1.020484909. Trong khi đó, ta có Φ(1.43) = 0.9568572530,Φ(2.01) = 0.9955248493. Như vậy, dùng mô hình hồi quy tuyến tính trong trường hợp này có độ lệch nhiều hơn so với ngoại suy đa thức trong Bài toán 2.1.1. Đồ thị so sánh dữ liệu trong Bảng 2.1 và mô hình hồi quy tuyến tính f(t) được vẽ trong Hình 2.3.

with(plots):

F := plot(f(t), t = 1 .. 2):

G := plot(X, Y, style = point):

display({F, G})

Hình 2.3: Đồ thị so sánh dữ liệu trong Bảng 2.1 và mô hình hồi quy tuyến tính của nó.

Dựa vào hình minh họa trên ta thấy dữ liệu điểm có dáng điệu của một parabol, tuy nhiên dáng điệu của hàm cho bởi phương pháp hồi quy tuyến tính được cho bởi một đường thẳng của hàm bậc nhất.

Tiếp theo ta dùng mô hình hồi quy tam thức để ngoại suy.

with(Statistics):

X := Vector([1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0], datatype = float):

Y := Vector([.8427, .8802, .9103, .934, .9523, .9661,

.9763, .9838, .9891, .9928, .9953], datatype = float):

g := (t) -> LinearFit([1, t, t^2], X, Y, t):

g(t)

0.327889743589744820 + 0.708281118881117222*t - 0.188414918414917836*t^2

Vậy mô hình hồi quy tam thức là

g(t) = 0.327889743589744820+0.708281118881117222t−0.188414918414917836t2. Ta có g(1.43) = 0.9554420774, g(2.01) = 0.9903196812. Trong khi đó, ta có Φ(1.43) = 0.9568572530,Φ(2.01) = 0.9955248493. Rõ ràng trong bài toán cụ thể này, mô hình hồi quy tam thức có lệch ít hơn mô hình hồi quy tuyến tính.

Điều này là dễ hiểu vì phương pháp hồi quy tam thức cho hàm dạng bậc hai, gần với kiểu dữ liệu hơn phương pháp hồi quy tuyến tính đơn.

with(plots):

G := plot(g(t), t = 1 .. 2):

H := plot(X, Y, style = point):

display({G,H})

Hình 2.4: Đồ thị so sánh dữ liệu trong Bảng 2.1 và mô hình hồi quy tam thức của nó.

Như vây, qua hai ví dụ này ta có thể thấy rằng với cùng một bộ dữ liệu mà sửa dụng các phương pháp ngoại suy khác nhau thì sẽ cho các kết quả khác nhau, kéo theo sai số cũng khác nhau. Do đó, với mỗi kiểu dữ liệu chúng ta nên xem xét để chọn một phương pháp ngoại suy phù hợp để giảm sai số.

Bài toán 2.1.3. Xét hàm số sau f(x) =

Z x2 cosx

(x+t)32 et + sintxdt.

Đây là một hàm số rất phức tạp và cồng kềnh. Ta dựng một đa thức xấp xỉ hàm số trên để tính toán dễ dàng hơn. Trước tiên chúng tôi tính được giá trị của hàm số tại một số nút được cho bởi bảng số sau (Bảng 2.2):

Ta sẽ nội suy hàm số này từ nút 1.0 đến nút 2.7, sau đó ngoại suy tại nút 2.8 để so sánh.

f := (x) -> PolynomialInterpolation([[1, .31756], [1.1, .53803], [1.2, .79312], [1.5, 1.92854], [1.7, 3.16591], [2.0, 4.59149], [2.3, 6.34470], [2.5, 7.26794], [2.7, 8.41721]], x):

x 1.0 1.1 1.2 1.5 1.7 y 0.31756 0.53803 0.79312 1.92854 3.16591

2.0 2.3 2.5 2.7 2.8

4.59149 6.34470 7.26794 8.41721 8.84086

Bảng 2.2: Bảng một số giá trị của tích phân f(x) = Rx2 cosx

(x+t)32 et+ sintxdt.

f(x)

44.09910357x^8-625.9740065x^7+3818.706874x^6-13066.60249x^5 +27412.00750x^4-36089.40000x^3+29118.74360x^2-13166.69770x +2555.434680

Do đó, đa thức nội suy là

f(x) = 44.09910357x8−625.9740065x7 + 3818.706874x6 −13066.60249x5 + 27412.00750x4−36089.40000x3+ 29118.74360x2−13166.69770x + 2555.434680

Tính toán ta được

f(2.8) = 13.09485293

Sai số của phép ngoại suy so với giá trị đúng của hàm số tại nút 2.8 là 4.25399.

Rõ ràng với bộ dữ liệu này khi sử dụng phương pháp nội suy để suy ra ngoại suy cho sai số rất lớn. Chúng ta tiếp tục kiểm tra với phương pháp hồi quy tuyến tính trong Bài toán 2.1.4.

Hình 2.5: Phân bố các điểm dữ liệu Bảng 2.2.

Hình 2.6: Đồ thị của đa thức f(x) (Bài toán 2.1.3).

Bài toán 2.1.4. Áp dụng phương pháp hồi quy tuyến tính cho hàm số ở Bài toán 2.1.3 sử dụng các quan sát trong Bảng 2.2.

Sử dụng phần mềm Maple để tính toán thu được with(Statistics):

X := Vector([1, 1.1, 1.2, 1.5, 1.7, 2.0, 2.3, 2.5, 2.7], datatype = float):

Y := Vector([.31756, .53803, .79312, 1.92854, 3.16591,

4.59149, 6.34470, 7.26794, 8.41721], datatype = float):

h:= (t) -> LinearFit([1, t], X, Y, t):

h(t)

-4.96655444366690180+4.87896812456263262*t with(plots):

G := plot(h(t), t = 1 .. 2.7):

H := plot(X, Y, style = point):

display({G, H}) Ta có hàm số

h(t) = 4.87896812456263262t−4.96655444366690180,

ngoại suy tai mút 2.8 ta được h(2.8) = 8.694556306. Sai số của phương pháp này tại nút 2.8 là 0.14630. Như vậy rõ ràng sử dụng phương pháp hồi quy tuyến tính đơn tốt hơn rất nhiều so với phương pháp sử dụng trong Bài toán 2.1.3.

Hình 2.7: Đồ thị so sánh dữ liệu trong Bảng 2.2 và mô hình hồi quy tuyến tính của nó.

Một phần của tài liệu Ngoại suy trong phân tích dự báo và ứng dụng (Trang 25 - 32)

Tải bản đầy đủ (PDF)

(64 trang)