Bài giảng Phương pháp số - Bài 6: Nghiệm của các phương trình Vi phân - Nguyễn Thị Vinh

1. Bài tập tính toán: 8.1-1 (a, b, d), 8.1-2, 8.3-3, 8.4-1 (b và d), 8.5-1, 8.12-1. Dùng phƣơng pháp Runge –Kutta bậc 4 giải lại bài tập 8.1-2 (a, c) trên [0; 0.3] với h = 0.1 2. Bài tập lập trình: Phƣơng pháp Runge –Kutta bậc 2 và bậc 4 giải BT Côsi của hệ 2 PTVP cấp 1

pdf27 trang | Chia sẻ: HoaNT3298 | Lượt xem: 727 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Phương pháp số - Bài 6: Nghiệm của các phương trình Vi phân - Nguyễn Thị Vinh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BÀI 6 NGHIỆM CỦA CÁC PHƢƠNG TRÌNH VI PHÂN MỘT SỐ KHÁI NIỆM CƠ SỞ (1) 1. PHƢƠNG TRÌNH VI PHÂN (PTVP) CẤP n y(n)(x) = f(x, y(x), y´(x) , , y(n–1)(x)) 2. NGHIỆM CỦA PTVP CẤP n: Nghiệm của PTVP cấp n là một hàm Φ(x) khả vi liên tục đến cấp n trên khoảng đang xét và Φ(n)(x) = f(x, Φ(x), Φ’(x), Φ’’(x), , Φ(n-1)(x)) Nghiệm tổng quát của PTVP cấp n thƣờng chứa n hằng số tùy ý, và do vậy tồn tại một họ n tham số của các nghiệm Nghiệm của bài toán giá trị đầu: Tìm nghiệm riêng suy từ nghiệm tổng quát của PTVP sao cho nó thỏa mãn n giá trị đầu đã biết y(x0), y’(x0), , y (n–1)(x0) PHƢƠNG PHÁP SỐ-Bài 6 2 MỘT SỐ KHÁI NIỆM CƠ SỞ (2) 3. NGHIỆM CỦA PTVP TUYẾN TÍNH CẤP n: • PTVP là tuyến tính cấp n y(n)(x) + p1(x)y (n–1)(x) + + pn-1(x)y´(x) + pn(x)y(x) = q(x) • PTVP tuyến tính thuần nhất cấp n (khi vế phải q(x) = 0) i> Nếu y1(x), y2(x), . . . , ym(x) là các nghiệm bất kì của PTVP tuyến tính thuần nhất thì tổ hợp tuyến tính của chúng C1y1(x) + C2y2(x) + · · · + Cmym(x) cũng là một nghiệm Ii> Các nghiệm y1(x), y2(x), . . . , ym(x) này đƣợc gọi là độc lập tuyến tính nếu định thức hàm 0 yyy yyy yyy 1m mmm 1m 222 1m 111     )(' )(' )(' ... ............ ... ... PHƢƠNG PHÁP SỐ-Bài 6 3 MỘT SỐ KHÁI NIỆM CƠ SỞ (3) 3. NGHIỆM CỦA PTVP TUYẾN TÍNH CẤP n: • PTVP tuyến tính thuần nhất cấp n (tiếp) iii> Nếu y1(x), y2(x), . . . , yn(x) là n nghiệm độc lập tuyến tính của PTVP thuần nhất cấp n, thì tổ hợp tuyến tính của chúng Y(x) = C1y1(x) + C2y2(x) + · · · + Cnyn(x) đƣợc gọi là nghiệm tổng quát. • PTVP tuyến tính thuần nhất cấp n với các hệ số hằng y(n) + an–1y (n–1) + · · · + a0y = 0 (*) có nghiệm dạng eβx với β thỏa mãn PT đặc tính βn + an–1β n–1 + · · · + a0 = 0 (**) PHƢƠNG PHÁP SỐ-Bài 6 4 MỘT SỐ KHÁI NIỆM CƠ SỞ (4) 3. NGHIỆM CỦA PTVP TUYẾN TÍNH CẤP n: • PTVP tuyến tính thuần nhất cấp n với các hệ số hằng: - Nếu phƣơng trình (**) có n nghiệm thực phân biệt βi thì là nghiệm tổng quát của của PTVP thuần nhất cấp n (*) - Nếu β1 = α + iβ là một nghiệm phức của (**), thì β2 = α – iβ cũng là một nghiệm của PT đặc tính (**) - Nếu β là một nghiệm kép của PT đặc tính (**), thì cũng là các nghiệm độc lập tuyến tính của PT thuần nhất (*) xnβ n xβ 2 xβ 1 eC...eCeCY(x) 21  βx 2 βx 1 xeyvàey  PHƢƠNG PHÁP SỐ-Bài 6 5 MỘT SỐ KHÁI NIỆM CƠ SỞ (5) 3. NGHIỆM CỦA PTVP TUYẾN TÍNH CẤP n: • PTVP tuyến tính không thuần nhất cấp n hệ số hằng: y(n) + an–1y (n–1) + · · · + a0y = q(x) (***) Nếu PTVP (***) có một nghiệm riêng ζ(x), thì nghiệm tổng quát của PTVP tuyến tính không thuần nhất là với giả thiết rằng βi là các nghiệm thực phân biệt của PTVP đặc tính (**) tƣơng ứng xnβ n xβ 2 xβ 1 eC...eCeCζ(x) xYζ(x)xy 21   )()( PHƢƠNG PHÁP SỐ-Bài 6 6 MỘT SỐ KHÁI NIỆM CƠ SỞ (6) 3. NGHIỆM CỦA PTVP TUYẾN TÍNH CẤP n: • PTVP tuyến tính không thuần nhất cấp n hệ số hằng: Ví dụ: Tìm nghiệm tổng quát của phƣơng trình sau y´´ – 4y´ + 3y = x Giải: Từ PT đặc tính β2 - 4β + 3 = 0  β1 = 1, β2 = 3  nghiệm tổng quát của PT thuần nhất là Ta tìm một nghiệm riêng y1(x) = ax + b của PT ban đầu  a = 1/3, b = 4/9 Vậy nghiệm tổng quát của PT không thuần nhất là x3 2 x 1 eCeCxY )( PHƢƠNG PHÁP SỐ-Bài 6 7 x3 2 x 11 eCeC 9 4 x 3 1 xYxyxy  )()()( MỘT SỐ KHÁI NIỆM CƠ SỞ (7) 4. BÀI TOÁN CÔ SI CỦA PTVP CẤP n Tìm nghiệm riêng của PTVP (phi tuyến) cấp n y(n) = f(x, y, y’, , y(n-1)) thỏa mãn các giá trị đầu PHƢƠNG PHÁP SỐ-Bài 6 8 )()( )(,,')(',)( 1n 00 1n 0000 yxyyxyyxy    Ví dụ 1: Tìm nghiệm riêng của PTVP y’ = xy thỏa mãn đ/k giá trị đầu y(0) = 1 Giải: . dxx y dy xy dx dy  tích phân 2 vế ta có nghiệm TQ 2 2x AeyC 2 x |y|lndxx y dy 2   Từ đ/k y(0) = 1 ta tìm đƣợc nghiệm riêng 2 2x ey  MỘT SỐ KHÁI NIỆM CƠ SỞ (8) 5. THUẬT TOÁN TAYLOR Giải BT Côsi: Tìm nghiệm của PTVP cấp một y´ = f(x,y) biết giá trị đầu y(x0) = y0 (****) • Giả sử f là đủ khả vi theo cả x và y, (****) có nghiệm duy nhất nếu ∂f/∂y liên tục trên miền đang xét. Khai triển nghiệm y(x) thành chuỗi Taylor xung quanh điểm x0: • Tính các đạo hàm bằng cách lấy đạo hàm toàn phần của (****) theo x: y´ = f(x,y) y´´ = f´ = fx + fyy´ = fx + fyf y´´´ = f´´ = fxx + fxyf + fyxf + fyyf 2 + fyfx + fy 2f = fxx + 2fxyf + fyyf 2 + fxfy + fy 2f    )('' ! )( )(')()( 0 2 0 000 xy 2 xx xyxxyxy PHƢƠNG PHÁP SỐ-Bài 6 9 MỘT SỐ KHÁI NIỆM CƠ SỞ (9) 5. THUẬT TOÁN TAYLOR (tiếp) Thuật toán Taylor bậc k tìm một nghiệm xấp xỉ của BT Côsi y´ = f(x,y) thỏa mãn đ/k đầu y(a) = y0 trên [a, b] 1. Chọn bƣớc h = (b – a) / N, đặt xn = a + nh, n = 0, 1, . . . , N 2. Tạo ra các xấp xỉ yn cho y(xn) từ phép đệ quy yn+1 = yn + hTk(xn,yn ) n = 0, l, . . . , N – 1 trong đó Tk(x, y) đƣợc định nghĩa bởi Sai số địa phƣơng của thuật toán Taylor bậc k là ...,,),,( ! ),(' ! ),(),( )( 21kyxf k h yxf 2 h yxfyxT 1k 1k k     hxxy 1k h 1k yfh E nn 1k 1kk1k          , )( )!()!( ))(,( )( )( PHƢƠNG PHÁP SỐ-Bài 6 10 MỘT SỐ KHÁI NIỆM CƠ SỞ (10) 5. THUẬT TOÁN TAYLOR (tiếp) Ví dụ: tìm một nghiệm xấp xỉ của BT Côsi trên [1, 2] bằng thuật toán Taylor bậc 2 với h = 0.1 Đặt xi = a + ih, i = 0, 1, . . . , 10 do đó và  thuật toán Taylor bậc cao hơn khó đƣợc chấp nhận 11ykđmãnathy x y x 1 y 2 2  )(/' á ' ' ),(',),( yy2 x y x y x 2 yxfy x y x 1 yxf 23 2 2    '),( f 2 h fyxT2         ),('),( iiiii1i yxf 2 h yxfhyy PHƢƠNG PHÁP SỐ-Bài 6 11 MỘT SỐ KHÁI NIỆM CƠ SỞ (11) 5. THUẬT TOÁN TAYLOR (tiếp) Ví dụ: (tiếp) i xi yi y'=f(xi,yi) hf(xi,yi) f'(xi,yi) h^2*f'(x,y)/2 0 1 -1 1 0.1 -2 -0.010000 1 1.1 -0.910000 0.825619 0.082562 -1.502632 -0.007513 2 1.2 -0.834951 0.693094 0.069309 -1.157414 -0.005787 3 1.3 -0.771429 0.590020 0.059002 -0.910343 -0.004552 4 1.4 -0.716979 0.508273 0.050827 -0.728879 -0.003644 5 1.5 -0.669796 0.442349 0.044235 -0.592612 -0.002963 6 1.6 -0.628524 0.388410 0.038841 -0.488305 -0.002442 7 1.7 -0.592124 0.343718 0.034372 -0.407110 -0.002036 8 1.8 -0.559788 0.306273 0.030627 -0.342966 -0.001715 9 1.9 -0.530876 0.274588 0.027459 -0.291621 -0.001458 10 2 -0.504875 0.247539 0.024754 -0.250036 -0.001250 PHƢƠNG PHÁP SỐ-Bài 6 12 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (1) 1. PHƢƠNG PHÁP EULER GIẢI BT CÔSI CẤP 1 • Áp dụng thuật toán Taylor với k = 1 trên [a, b] có sai số địa phƣơng  sai số toàn cục trên [a, b] cùng bậc với h  cần h rất nhỏ • Ví dụ, giải BT Côsi y´ = y biết giá trị đầu y(0) = 1, h = 0.01 ),( iii1i yxhfyy  )('' y 2 h E 2  i xi yi f(x,y) hf(x,y) 0 0 1 1.000000 0.010000 1 0.01 1.010000 1.010000 0.010100 2 0.02 1.020100 1.020100 0.010201 3 0.03 1.030301 1.030301 0.010303 4 0.04 1.040604 1.040604 0.010406 5 0.05 1.051010 1.051010 0.010510 PHƢƠNG PHÁP SỐ-Bài 6 13 void Euler (double a, double b, double h, double y0) { int n = ceil((b-a)/h); vector x(n+1,0), y(n+1,0); x[0] = a; y[0] = y0; for (int i = 1; i <= n; i++) { x[i] = x[i-1] + h; y[i] = y[i-1] + h * f(x[i-1], y[i-1]); } cout << "Nghiem gan dung tren doan [" << x[0] << "," << x[n] << "]" << endl; cout << "\t i \t x \t y \t f(x,y) \t hf(x,y)" << endl; for (int i = 0; i <= n; i++) { cout << "\t "<< i << "\t " << x[i] << "\t " << y[i] << "\t " << f(x[i], y[i]) << "\t " << h*f(x[i], y[i]) << endl; } } PHƢƠNG PHÁP SỐ-Bài 6 14 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (2) 2. PHƢƠNG PHÁP RUNGE-KUTTA BẬC 2 • Đặt vấn đề: Đối với nghiệm của BT Côsi của PTVP cấp 1 y’ = f(x, y), y(x0) = y0 Ƣớc lƣợng hàm f(x, y) tại các điểm đƣợc lựa chọn trên mỗi khoảng con. yi+l = yi + ak1(h) + bk2(h) trong đó a = b = 1/2 k1 = hf(xi, yi) k2 = hf(xi + h, yi + k1) Sử dụng CT Euler, tính độ nghiêng ở xi+1 yi+l = yi + 1/2(k1 + k2) • Sai số địa phƣơng )()()( 42 yyx 2 yyxyxx 3 1i1i hOffff2ffff2f 12 h yxy   PHƢƠNG PHÁP SỐ-Bài 6 15 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (3) 2. PHƢƠNG PHÁP RUNGE-KUTTA BẬC 2 • Ví dụ: giải PTVP y'=1-y/x biết y(2) = 2, h=0.01trên [2; 2.1] i xi yi f(xi,yi) hf(xi,yi) zi f(xi+1,zi) hf(xi+1,zi) 0 2.00 2.000000 0.000000 0.000000 2.000000 0.004975 4.9751E-05 1 2.01 2.000025 0.004963 0.000050 2.000075 0.009864 9.8641E-05 2 2.02 2.000099 0.009852 0.000099 2.000198 0.014681 0.00014681 3 2.03 2.000222 0.014669 0.000147 2.000368 0.019427 0.00019427 4 2.04 2.000392 0.019416 0.000194 2.000586 0.024104 0.00024104 5 2.05 2.000610 0.024093 0.000241 2.000851 0.028713 0.00028713 6 2.06 2.000874 0.028702 0.000287 2.001161 0.033256 0.00033256 7 2.07 2.001184 0.033245 0.000332 2.001516 0.037733 0.00037733 8 2.08 2.001538 0.037722 0.000377 2.001916 0.042146 0.00042146 9 2.09 2.001938 0.042135 0.000421 2.002359 0.046496 0.00046496 10 2.10 2.002381 0.046485 0.000465 2.002846 PHƢƠNG PHÁP SỐ-Bài 6 16 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (4) void Runge_Kutta2 (double h, double x, double y, unsigned n) { double xs, z; cout << "Nghiem cua phuong trinh " << endl; cout << "i x y f(x,y) f(x,z)"; for (unsigned i = 0; i <= n; i++) { z = y + h * f(x, y); xs = x + h; cout << "\n“ << i << "\t “ << xs << "\t “ << y << "\t “ << f(x, y) << "\t “ << f(xs, z) << endl; y = y + h * (f(x, y) + f(xs, z)) / 2; x = xs; } } PHƢƠNG PHÁP SỐ-Bài 6 17 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (5) 3. PHƢƠNG PHÁP RUNGE-KUTTA BẬC 4 Đối với PTVP y’ = f(x, y), y(x0) = y0, tạo xấp xỉ cho y(x0+h) y(x0+h) = y(x0) + r1k1(h) + r2k2(h) + r3k3(h) + r4k4(h) + φ4(h) hay y(x0+h) = y0 + ∆y0 + φ4(h) trong đó ∆y0 = r1k1(h) + r2k2(h) + r3k3(h) + r4k4(h) ki(h) = hf(ξi, ૪i); ξi = x0 + ai h, a1 = 0 ૪i = y0 + bi1k1(h) + + bi, i-1 ki-1(h), i = 1, 2, 3, 4 φ4(h) = y(x0+h) - y0 - ∆y0 là sai số (địa phƣơng ) Các hệ số ai, bij, ri đƣợc chọn sao cho các đạo hàm cấp i của φ4(h) thoả mãn điều kiện 4i0)0( và )4,0 (i0)0( )1(i 4 (i) 4    PHƢƠNG PHÁP SỐ-Bài 6 18 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (6) 19 trong đó  4321i1i kk2k2k 6 1 yy  )kyh,hf(xk k 2 1 yh, 2 1 xhfk k 2 1 yh, 2 1 xhfk )y,hf(xk 3ii4 2ii3 1ii2 ii1                 3. PHƢƠNG PHÁP RUNGE-KUTTA BẬC 4  hệ 11 phƣơng trình, 13 ẩn a2, a3, a4, b21, b31, b32, b41, b42, b43, r1, r2, r3, r4. • Công thức Runge – Kutta bậc 4 : PHƢƠNG PHÁP SỐ-Bài 6 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (7) 20 yi+1 xi yi xi+1 y xxi+1/2 k1 k4ktổ hợp k3 k2 3. PHƢƠNG PHÁP RUNGE-KUTTA BẬC 4 • Sai số địa phƣơng của công thức là O(h4) • Ƣu điểm: Tự bắt đầu (chỉ đòi hỏi giá trị y(x0) = y0) • Nhƣợc điểm: Mỗi bƣớc đòi hỏi 4 ƣớc lƣợng hàm PHƢƠNG PHÁP SỐ-Bài 6 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (8) i xi yi k1=hf(xi,yi) k2=hf(xi+h/2,yi+k1/2) k3=hf(xi+h/2,yi+k2/2) k4=hf(xi+h,yi+k3) Delta 0 1 2 0.1 1.1 2.050000 0.122439 1.1 2.061220 0.122970 1.2 2.122970 0.145792 0.122768 3. PHƢƠNG PHÁP RUNGE-KUTTA BẬC 4 Ví dụ: Tìm nghiệm của BT Côsi y´ = x – 1/y với điều kiện đầu y(1) = 2 trên [1; 1.4], h = 0.2  y2 = y(1.4) ≈ y(1.2) + Δy1 = 2.291957 PHƢƠNG PHÁP SỐ-Bài 6 21  y1 = y(1.2) ≈ y(1) + Δy0 = 2.122768 1 1.2 2.122768 0.145783 1.3 2.195660 0.168911 1.3 2.207224 0.169388 1.4 2.292157 0.192746 0.169188 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (9) void Runge_Kutta4 (double h, double x, double y, unsigned n) { double k1, k2, k3, k4, delta; cout << " Nghiem cua phuong trinh y'= 1+y/x" << endl; cout << "\t i x y delta“ << endl; for (unsigned i = 1; i <= n; i++) { k1 = h * f(x, y); k2 = h * f(x + h / 2, y + k1 / 2); k3 = h * f(x + h / 2, y + k2 / 2); k4 = h * f(x+h, y+k3); delta= (k1 + 2 * k2 + 2 * k3 + k4) / 6; x += h; y += delta; cout << "\t " << i << "\t " << x << "\t " << y << "\t " << delta << endl; } } PHƢƠNG PHÁP SỐ-Bài 6 22 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (10) 4. BÀI TOÁN CÔSI CỦA HỆ PTVP CẤP 1 Các phƣơng pháp trên có thể áp dụng đƣợc cho hệ PTVP cấp một. Chẳng hạn giải bài toán Côsi sau đây: Cho hệ hai PTVP      )z,y,x(g'z )z,y,x(f'y với điều kiện đầu y(x0) = y0 và z(x0) = z0, bằng phƣơng pháp Runge – Kutta bậc 4. Khi đó công thức Runge – Kutta bậc 4 có dạng yi+1≈yi+(k1+2k2+2k3+k4) / 6 zi+1≈zi+(l1+2l2+2l3+l4) / 6 PHƢƠNG PHÁP SỐ-Bài 6 23 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (11) k1 = hf(xi, yi, zi) k2= hf(xi+h/2, yi+k1/2, zi+l1/2) k3 = hf(xi+h/2, yi+k2/2, zi+l2/2) k4 = hf(xi+1, yi+k3, zi+l3) l1 = hg(xi, yi, zi) l2= hg(xi+h/2, yi+k1/2, zi+l1/2) l3 = hg(xi+h/2, yi+k2/2, zi+l2/2) l4 = hg(xi+1, yi+k3, zi+l3) 4. BÀI TOÁN CÔSI CỦA HỆ PTVP CẤP 1 Các hệ số ki và li đƣợc tính nhƣ sau Ví dụ: Giải BT Côsi của hệ dƣới đây trên [0; 0,4] với h = 0,1 với các điều kiện đầu y(0) = 0 và z(0) = 1      yzxx'z z'y PHƢƠNG PHÁP SỐ-Bài 6 24 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (12) 4. BÀI TOÁN CÔSI CỦA HỆ PTVP CẤP 1 PHƢƠNG PHÁP SỐ-Bài 6 25 i x y z k=hz l = h(x+xz−y) 0 0 0 1 0,1 0 0,05 0,05 1 0,1 0.005 0,05 0,05 0,0025 0,10025 0.005013 0,1 0.10025 1.005013 0,100501 0.010025 y1 = y0 + ∆y0 = 0 + 0,100167 = 0.100167 z1 = z0 + ∆z0 = 1 + 0.005008 = 1.005008 1 0,1 0,100167 1.005008 0,100501 0.010033 0,15 0,150167 1.010025 0,101003 0.015134 0,15 0,150668 1.012575 0,101258 0.015122 0,20 0,201424 1.020130 0,102013 0.020260 y2 = y1 + ∆y1 = 0.100167 + 0.101172 = 0.201339 z2 = z1 + ∆z1 = 1.005008 + 0.015134 = 1.020142 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (13) 5. BÀI TOÁN CÔSI CỦA PTVP CẤP CAO Đƣa về bài toán Cô si của hệ PTVP cấp một Ví dụ: Giải BT Côsi của phƣơng trình cấp 2 y´´ – y´x + y = x thỏa mãn các điều kiện đầu y(0) = 0 và y´(0) = 1 Cách giải: Đƣa về BT Côsi của hệ 2 PTVP cấp một tƣơng đƣơng với các đ/k đầu y(0) = 0 và z(0) = 1. Giải hệ này tìm được y      yzxx'z z'y PHƢƠNG PHÁP SỐ-Bài 6 26 CÁC PHƢƠNG PHÁP SỐ GIẢI BT CÔSI (14) BÀI TẬP 1. Bài tập tính toán: 8.1-1 (a, b, d), 8.1-2, 8.3-3, 8.4-1 (b và d), 8.5-1, 8.12-1. Dùng phƣơng pháp Runge –Kutta bậc 4 giải lại bài tập 8.1-2 (a, c) trên [0; 0.3] với h = 0.1 2. Bài tập lập trình: Phƣơng pháp Runge –Kutta bậc 2 và bậc 4 giải BT Côsi của hệ 2 PTVP cấp 1 PHƢƠNG PHÁP SỐ-Bài 6 27

Các file đính kèm theo tài liệu này:

  • pdfphuong_phap_so_bai6_765_1999404.pdf