Đồ án Phương pháp sai phân giải gần đúng phương trình vi phân tuyến tính

Bài toán biên có phương trình vi phân cấp lớn hơn hoặc bằng hai và điều kiện bổ sung được cho tại nhiều hơn một điểm. Chẳng hạn bài toán biên đối với phương trình vi phân tuyến tính cấp hai có dạng: Bài toán trên được gọi là bài toán biên loại một. Nếu điều kiện biên được thay thế bởi điều kiện biên: thì ta có bài toán biên loại ba nếu . Còn nếu thì ta có bài toán biên loại hai. Trong thực tế ta còn gặp những bài toán mà tại và có điều kiện biên khác nhau (chẳng hạn tại ta có điều kiện biên loại 1 còn tại ta có điều kiện biên loại hai hoặc ba) khi đó ta có bài toán biên hỗn hợp. Sau đây ta sẽ xem xét các khái niệm về phương pháp sai phân thông qua bài toán biên loại một.

doc84 trang | Chia sẻ: oanh_nt | Lượt xem: 1415 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đồ án Phương pháp sai phân giải gần đúng phương trình vi phân tuyến tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Mục lục Lời nói đầu ……………………………………………………………….. 3 Chương 1. Khái niệm mở đầu về phương pháp sai phân …………….. 5 1.1. Mở đầu ………………………………………………………………… 5 1.2. Khái niệm về bài toán biên ……………………..…………………….. 5 1.3. Bài toán vi phân ………………………………………………………. 5 1.4. Lưới sai phân …………………………………………………………. 6 1.5. Hàm lưới …………………………………………………….………… 6 1.6. Đạo hàm lưới ………………………………………………………….. 6 1.7. Qui ước viết vô cùng bé ……………………………………………….. 7 1.8. Công thức Taylor ……………………………………………………… 7 1.9. Liên hệ giữa đạo hàm và đạo hàm lưới …………………………... 8 1.10. Phương pháp sai phân ………………………………………………... 9 1.11. Giải bài toán sai phân bằng phương pháp truy đuổi …. 9 1.11.1. Phương pháp truy đuổi từ phải ……………………...10 1.11.2. Phương pháp truy đuổi từ trái ………………………11 1.12. Sự ổn định của bài toán sai phân ………………………………… 12 1.13. Sự xấp xỉ ……………………………………………………………. 12 1.14. Sự hội tụ …………………………………………………………….. 13 1.15. Trường hợp điều kiện biên loại ba ……………………………… 14 Chương 2. Phương pháp sai phân giải gần đúng phương trình vi phân cấp bốn …… 18 2.1. Bài toán vi phân ……………………………………………………… 18 2.2. Lưới sai phân ………………………………………………………… 19 2.3. Hàm lưới …………………………………………………………….. 19 2.4. Đạo hàm lưới ………………………………………………………… 19 2.5. Phương pháp sai phân ………………………………………………... 20 2.6. Cách giải bài toán sai phân …………………………………………... 27 2.6.1. Phương pháp lặp Seidel co dãn ……………………………… 27 2.6.2. Phương pháp truy đuổi ……………………………………… 28 2.6.2.1. Phương pháp truy đuổi từ phải ……………………... 28 2.6.2.2. Phương pháp truy đuổi từ trái ………………………. 31 2.6.2.3. Sự ổn định ………………………………………….. 34 2.7. Sự xấp xỉ ……………………………………………………………... 37 2.8. Sự ổn định của bài toán sai phân …………………………………….. 37 2.9. Bài toán sai phân đối với sai số ……………………………………… 49 2.10. Sự hội tụ và sai số ………………………………………………….. 50 Phụ lục ……………………………………………………………….. … 58 Tài liệu tham khảo ……………………………………………………… 84 Lời nói đầu Trong lĩnh vực toán ứng dụng thường gặp rất nhiều bài toán có liên quan tới phương trình vi phân thường. Việc nghiên cứu phương trình vi phân thường vì vậy đóng một vai trò quan trọng trong lý thuyết toán học. Nhiều hiện tượng khoa học và kỹ thuật dẫn đến các bài toán biên của phương trình vật lý toán. Giải các bài toán đó đến đáp số bằng số là một yêu cầu quan trọng của thực tiễn. Trong một số ít trường hợp, thật đơn giản việc đó có thể làm được nhờ vào nghiệm tường minh của bài toán dưới dạng các công thức sơ cấp, các tích phân hoặc các chuỗi hàm. Còn trong đại đa số trường hợp khác, đặc biệt là đối với các bài toán có hệ số biến thiên, các bài toán phi tuyến, các bài toán trên miền bất kỳ thì nghiệm tường minh của bài toán không có hoặc có nhưng rất phức tạp. Chính vì vậy chúng ta phải nhờ tới các phương pháp xấp xỉ để tìm nghiệm gần đúng. Do nhu cầu của thực tiễn và của sự phát triển lý thuyết toán học, các nhà toán học đã tìm ra rất nhiều phương pháp để giải gần đúng các phương trình vi phân thường (các phương pháp giải tích như phương pháp chuỗi Taylo, phương pháp xấp xỉ liên tiếp Pica, các phương pháp số như phương pháp một bước, phương pháp Ađam, phương pháp Runghe-Kuta,…). Đề tài: "Phương pháp sai phân giải gần đúng phương trình vi phân tuyến tính" Trong phạm vi đồ án của mình, em xin trình bày một phương pháp gần đúng để giải phương trình vi phân cấp bốn tổng quát là phương pháp sai phân. Đây là một trong hai lớp phương pháp gần đúng quan trọng được nghiên cứu nhiều là phương pháp sai phân và phương pháp phần tử hữu hạn. Cả hai phương pháp đều tìm cách đưa bài toán đã cho về một bài toán đại số, thường là một hay nhiều hệ đại số tuyến tính. Trong phương pháp này miền trong đó ta tìm nghiệm của phương trình thường được phủ bằng một lưới gồm một số hữu hạn điểm (nút), còn các đạo hàm trong phương trình được thay bằng các sai phân tương ứng của các giá trị của hàm tại các nút lưới. Em xin cám ơn thầy Lê Trọng Vinh đã tận tình hướng dẫn em trong thời gian làm đồ án vừa qua. Hà nội 12 - 2003 Sinh viên thực hiện Nguyễn Đức Dũng Chương 1 Khái niệm mở đầu về phương pháp sai phân Mở đầu Trong chương này để trình bày những khái niệm cơ bản của phương pháp sai phân ta sẽ xét bài toán biên đối với phương trình vi phân cấp hai. Khái niệm về bài toán biên Bài toán biên có phương trình vi phân cấp lớn hơn hoặc bằng hai và điều kiện bổ sung được cho tại nhiều hơn một điểm. Chẳng hạn bài toán biên đối với phương trình vi phân tuyến tính cấp hai có dạng: Bài toán trên được gọi là bài toán biên loại một. Nếu điều kiện biên được thay thế bởi điều kiện biên: thì ta có bài toán biên loại ba nếu . Còn nếu thì ta có bài toán biên loại hai. Trong thực tế ta còn gặp những bài toán mà tại và có điều kiện biên khác nhau (chẳng hạn tại ta có điều kiện biên loại 1 còn tại ta có điều kiện biên loại hai hoặc ba) khi đó ta có bài toán biên hỗn hợp. Sau đây ta sẽ xem xét các khái niệm về phương pháp sai phân thông qua bài toán biên loại một. Bài toán vi phân Cho hai số và với . Tìm hàm xác định tại thỏa mãn: trong đó là những hàm số cho trước đủ trơn thỏa mãn: còn là những số cho trước. Giả sử bài toán có nghiệm duy nhất đủ trơn trên . 1.4 Lưới sai phân Ta chia đoạn thành đoạn con bằng nhau, mỗi đoạn con dài bởi các điểm . Mỗi điểm gọi là một nút lưới, gọi là bước lưới. Tập gọi là tập các nút trong. Tập gọi là tập các nút biên. Tập gọi là một lưới trên . Hàm lưới Đó là những hàm số xác định tại các nút của lưới . Giá trị của hàm lưới tại nút viết là . Một hàm số xác định tại mọi sẽ tạo ra hàm lưới có giá trị tại nút là . Đạo hàm lưới Xét hàm lưới . Đạo hàm lưới tiến cấp một của . Ký hiệu là , có giá trị tại nút là: Đạo hàm lưới lùi cấp một của , ký hiệu là , có giá trị tại nút là: Sau đây ta sẽ thấy rằng khi bé thì đạo hàm lưới “xấp xỉ” được đạo hàm thường (xem các công thức ). Do đó có đạo hàm lưới cấp hai : Nếu là một hàm lưới thì: 1.7 Qui ước viết vô cùng bé Khái niệm “xấp xỉ” liên quan đến khái niệm vô cùng bé. Để viết các vô cùng bé một cách đơn giản ta sẽ áp dụng qui ước sau đây: Giả sử đại lượng là một vô cùng bé khi . Nếu tồn tại số và hằng số không phụ thuộc sao cho: thì ta viết: Viết như trên có nghĩa là: khi nhỏ thì là một đại lượng nhỏ và khi thì tiến đến số không chậm hơn . Công thức Taylor Ta nhắc lại công thức Taylor ở đây vì nó là công thức quan trọng được sử dụng để xấp xỉ bài toán vi phân bởi bài toán sai phân. Giả sử là một hàm số xác định và có đạo hàm đến cấp trong một khoảng chứa , có thể dương hay âm. Khi đó theo công thức Taylor ta có: trong đó là một điểm ở trong khoảng từ đến . Có thể viết: . Ta giả thiết thêm: Khi đó là một vô cùng bé khi . Tức là tồn tại hằng số không phụ thuộc vào sao cho: Công thức Taylor ở trên có thể viết gọn hơn như sau: Liên hệ giữa đạo hàm và đạo hàm lưới Giả sử hàm đủ trơn. Theo công thức Taylor ta có: Ta suy ra Ngoài ra với qui ước: Ta còn có Ta suy ra Do đó Đồng thời Phương pháp sai phân Ta tìm cách tính gần đúng giá trị của nghiệm đúng tại các nút . Gọi các giá trị gần đúng đó là . Muốn có ta thay bài toán vi phân bởi bài toán sai phân: trong đó: Giải bài toán sai phân (1.9) – (1.10) bằng phương pháp truy đuổi Viết cụ thể bài toán ta có: Đó là một hệ đại số tuyến tính dạng ba đường chéo có thể giải bằng phương pháp truy đuổi. Xét hệ ba đường chéo tổng quát: trong đó: Như vậy hệ là trường hợp riêng của hệ khi: 1.11.1 Phương pháp truy đuổi từ phải Ta tìm nghiệm của hệ ở dạng: Khi đã biết các và thì cho phép tính các lùi từ phải sang trái. Vì lẽ đó phương pháp mang tên phương pháp truy đuổi từ phải. Để tính các ta viết trong đó thay bởi : Thay này vào , ta được: Do Điều kiện này được thỏa mãn nhờ giả thiết . Vì ta có: Theo giả thiết , ta có nên . Do đó: Một cách tương tự, giả sử . Ta chứng minh đúng với . Điều này rõ ràng vì Ta suy ra: Giả thiết cũng là điều kiện đảm bảo cho công thức truy đuổi ổn định. Với điều kiện thì cho: Đối chiếu với , ta suy ra: Tại , công thức viết: Đối chiếu với công thức thứ nhất của , ta suy ra: Sau đó từ cho phép tính tất cả các . Bây giờ công thức tại viết: Kết hợp với công thức thứ hai của , ta được: Do giả thiết và các đã được chỉ ra ở trên nên ta luôn có . Suy ra cho: Sau đó cho phép tính ra các . Vậy có thuật toán: 1.11.2 Phương pháp truy đuổi từ trái Ta tìm nghiệm ở dạng: Ta có thuật toán sau: Sự ổn định của bài toán sai phân Trước hết để đo độ lớn của hàm lưới và hàm lưới , ta sử dụng các chuẩn: Định nghĩa. Nói bài toán sai phân là bài toán ổn định nếu nó có nghiệm duy nhất với mọi vế phải và điều kiện biên, đồng thời nghiệm thỏa mãn: ý nghĩa của bài toán ổn định là: Bài toán sai phân có nghiệm duy nhất, đồng thời nghiệm đó phụ thuộc liên tục vào vế phải của phương trình sai phân và điều kiện biên, nghĩa là khi vế phải của phương trình sai phân và điều kiện biên thay đổi ít thì nghiệm cũng thay đổi ít. Bất đẳng thức nói lên ý nghĩa đó, ta gọi đó là bất đẳng thức ổn định của bài toán . Sự xấp xỉ Bằng công thức Taylor , ta có: Một cách tương tự: Ta suy ra: Do đó: Vì lẽ đó ta nói toán tử sai phân xấp xỉ toán tử vi phân tới cấp . Hơn nữa, vì và nên ta cũng nói: bài toán sai phân xấp xỉ bài toán vi phân . Sự hội tụ Định nghĩa. Gọi là nghiệm của bài toán vi phân và là nghiệm của bài toán sai phân . Nói phương pháp sai phân hội tụ nếu: khi tức là: khi hay: khi Nói phương pháp sai phân có cấp chính xác nếu: Định lý. Phương pháp sai phân là phương pháp hội tụ với cấp chính xác . Chứng minh. Đặt ta có: Theo : Theo và : Vậy thỏa mãn: Do đó, áp dụng bất đẳng thức ổn định ta được: Suy ra: Định lý được chứng minh. Trường hợp điều kiện biên loại ba - là những hằng số . Ta có: Như vậy, ta thấy nếu thay thì sai số địa phương tại biên chỉ đạt cấp do đó sẽ ảnh hưởng đến sai số trên toàn lưới. Để đạt được sai số tại biên cấp , ta sử dụng thêm chính phương trình tại . Thay đẳng thức này vào : Bỏ qua và thay hàm cần tìm bởi , ta nhận được đẳng thức xấp xỉ của điều kiện biên tại , đạt sai số : Hoàn toàn tương tự với biên , ta có: Vậy ta có hệ phương trình sau đối với bài toán biên loại ba: Đây là hệ đại số tuyến tính có ma trận hệ số dạng ba đường chéo, giải được bằng công thức truy đuổi. Thí dụ : Xét bài toán Giải : Ta chọn , nghĩa là chia đoạn làm 4 phần bằng nhau bởi các điểm chia. Ta có thể viết lại phương trình đã cho như sau: Suy ra: Nghiệm gần đúng là nghiệm của hệ phương trình sau: Tính các hệ số: Thay số vào ta được: Đây là hệ đại số tuyến tính dạng ba đường chéo được giải theo phương pháp truy đuổi đã nêu ở trên. Sau khi giải ra ta được kết quả: . Ta có thể tìm được nghiệm tổng quát của phương trình đã cho là: Dựa vào các điều kiện biên, ta tìm được . Suy ra nghiệm riêng tương ứng của phương trình là: So sánh với các nghiệm gần đúng tại các nút lưới, ta có bảng kết quả sau: Nghiệm gần đúng Nghiệm đúng 0 -0.5 0 0 1 -0.25 -0.19943 -0.21031 2 0 -0.26393 -0.27415 3 0.25 -0.20295 -0.21031 4 0.5 0 0 Sai số đạt: Chương 2 Phương pháp sai phân giải gần đúng phương trình vi phân cấp bốn Trong chương một ta đã xét các khái niệm của phương pháp sai phân thông qua bài toán biên đối với phương trình vi phân cấp hai nhằm hiểu được tư tưởng của phương pháp. Chương này sẽ đi vào nội dung chính của đồ án là dùng phương pháp sai phân để giải gần đúng phương trình vi phân cấp bốn tổng quát một cách chi tiết. Bài toán vi phân Cho hai số và với . Tìm hàm xác định tại thỏa mãn: trong đó: liên tục và các đạo hàm liên tục liên tục và đạo hàm liên tục là những hàm số liên tục đồng thời là những hàm số cho trước là những hàm số liên tục cho trước. Định lý về sự tồn tại và duy nhất nghiệm Phương trình có dạng: Nếu liên tục trong một miền nào đó trong và nếu là một điểm thuộc thì trong một lân cận nào đó của điểm , tồn tại một nghiệm duy nhất của phương trình thỏa mãn các điều kiện: Xem [5] phần tài liệu tham khảo. Lưới sai phân Ta chia đoạn thành đoạn con bằng nhau, mỗi đoạn con dài bởi các điểm . Mỗi điểm gọi là một nút lưới, gọi là bước lưới Tập gọi là tập các nút trong Tập gọi là tập các nút biên Tập gọi là một lưới trên Hàm lưới Đó là những hàm số xác định tại các nút của lưới . Giá trị của hàm lưới tại nút viết là . Một hàm số xác định tại mọi sẽ tạo ra hàm lưới có giá trị tại nút là . Đạo hàm lưới Giả sử hàm đủ trơn. Theo công thức Taylor, ta có Ta suy ra và như ta đã biết gọi là đạo hàm lưới tiến và lùi cấp một của . Qui ước: Ta còn có Ta suy ra Do đó Đồng thời Phương pháp sai phân Giả sử bài toán vi phân thỏa mãn định lý về sự tồn tại và duy nhất nghiệm, ta tìm cách tính gần đúng giá trị của nghiệm đúng tại các nút . Gọi các giá trị gần đúng đó là . Muốn có ta thay bài toán vi phân bởi bài toán sai phân tương ứng. Đặt Từ ta suy ra Theo ta có Ta có: Cộng vế với vế hai đẳng thức trên ta được: Suy ra Hay Thay vào ta được Thay vào ta được Đặt Cũng từ ta suy ra trong đó Thật vậy (giả thiết: ) Vậy: Tương tự, ta có thể chỉ ra rằng: Bằng cách khai triển các tới đạo hàm cấp 5 theo công thức Taylor, với giả thiết Đặt , coi là nghiệm gần đúng của và bỏ qua các vô cùng bé của ta được phương trình sau: Viết lại: trong đó: Có thể tính: Đặt Ta có phương trình sau: Kết hợp với các điều kiện biên , ta có: Bây giờ, ta cần xấp xỉ đạo hàm tại điểm : Nhân cả hai vế của đẳng thức với (-2) sau đó cộng với hai đẳng thức và ở trên, ta được: mà Vậy: trong đó: Thay vào, ta có: Thay bởi và bỏ qua sai số địa phương cấp 2 , ta được: Tương tự với điều kiện biên , ta có: Ta cần xấp xỉ đạo hàm cấp 2 tại : Nhân cả hai vế của đẳng thức ứng với với (-2) sau đó cộng với hai đẳng thức , ta được: mà Vậy: trong đó: Thay vào, ta có: Cũng thay bởi và bỏ qua sai số địa phương cấp 2 , ta được: Như vậy ta có hệ phương trình sau: Hệ cũng được gọi là lược đồ sai phân đối với bài toán biên đã cho. Thay cho bài toán vi phân đối với ẩn hàm ta có bài toán sai phân đối với ẩn hàm . là hệ phương trình đại số bậc nhất tuyến tính có dạng năm đường chéo. Cách giải bài toán sai phân (I) Phương pháp lặp Seidel co dãn Hệ có thể viết lại ở dạng ma trận Từ suy ra: Phương pháp lặp xuất phát từ xấp xỉ đầu cho trước Tăng cường tốc độ hội tụ bằng phép co dãn Quá trình lặp co dãn dừng khi sai số tương đối: trong đó là mức độ chính xác tương đối định trước. Phương pháp truy đuổi Bài toán sai phân có dạng: Đó là một hệ đại số tuyến tính năm đường chéo. Bây giờ ta sẽ xét phương pháp truy đuổi giải hệ năm đường chéo tổng quát sau: Phương pháp truy đuổi từ phải Ta tìm nghiệm của hệ ở dạng: Khi đã biết các hệ số thì cho phép tính các lùi từ phải sang trái. Vì lẽ đó phương pháp mang tên phương pháp truy đuổi từ phải. Từ các công thức và các hệ số là chưa biết. Để tính các hệ số . Từ ta thay bởi và ta được: Thay và vào phương trình , ta được: Đối chiếu với ta suy ra: trong đó: Từ ta thấy để xác định được và ta phải biết được và . Như vậy, trước hết ta cần xác định các và với . Sau đó từ ta tính được các và với . Từ ta suy ra: Từ với , ta có: Suy ra: Tương tự, từ với và ta có: Từ với , ta có: Suy ra: Như vậy, từ ta tính được các hệ số và với . Tiếp theo, ta cần xác định và theo công thức . Bây giờ, ta cần sử dụng các phương trình trong hệ. Từ và với kết hợp với phương trình và sử dụng công thức , ta có: Suy ra: Ta thấy rằng ở trên chính là giá trị được tính theo công thức ứng với , trong đó mẫu số chính là . Để tính , ta sử dụng với và với phương trình Với được tính từ tại . Như vậy, ta có thể tóm tắt lại qui trình giải hệ năm đường chéo theo phương pháp truy đuổi từ phải như sau: Tính các hệ số trong đó: Tính các theo công thức Phương pháp truy đuổi từ trái Ta tìm nghiệm hệ ở dạng: Từ và các hệ số là chưa biết. Từ thay , ta được: Từ thay , ta được: Thay vào : Đối chiếu với ta suy ra: trong đó: Từ ta thấy, để xác định được các hệ số ta phải biết được . Như vậy, trước hết ta cần xác định và với . Sau đó từ ta tính được các hệ số với . Từ , ta suy ra: Từ tại , ta có: Suy ra: Tương tự, từ và tại ta có: Từ tại , ta có: Suy ra: Như vậy, từ ta tính được các hệ số với Tiếp theo ta cần xác định và theo công thức . Từ với và : Thay ở trên vào cho ta: Đối chiếu với ta suy ra: Ta thấy rằng ở trên trùng với các giá trị suy ra từ công thức ứng với . Để tính , ta sử dụng tại và rồi thay vào phương trình ta có: Suy ra: Tóm lại, qui trình giải hệ theo phương pháp truy đuổi từ trái như sau: Tính các hệ số trong đó: Tính các theo công thức 2.6.2.3 Sự ổn định Nhận xét rằng, các công thức chỉ có nghĩa khi và chỉ khi: Để đảm bảo rằng việc giải hệ theo các công thức là ổn định thì các hệ số của hệ phương trình phải thỏa mãn các điều kiện của định lý sau: Định lý. Khi tìm nghiệm hệ theo công thức truy đuổi ta sẽ gặp phải sai số quy tròn, vì vậy có thể dẫn đến sự mất ổn định của công thức tính. Quá trình tính sẽ ổn định nếu các điều kiện sau đây được thỏa mãn: đồng thời có ít nhất một bất đẳng thức mạnh trong các bất đẳng thức dưới đây: Khi đó ta có: Chứng minh. Thật vậy, từ và ta có: (do giả thiết: ) Do vì (giả thiết) Mà Suy ra: Tương tự, ta có thể chứng minh được: Nếu thì Bây giờ, ta sẽ chỉ ra rằng: và Thật vậy, từ ta có: Từ , suy ra: ( do ) Tương tự, với dựa vào ta suy ra: (Sử dụng giả thiết và ) Do đó: Cuối cùng, ta cần chỉ ra rằng . Như vậy, với giả thiết đã cho cùng với các điều kiện và đã được chứng minh ở trên ta cần giả thiết thêm là các bất đẳng thức thứ này không đồng thời xảy ra dấu bằng. Khi đó, ta có . Định lý được chứng minh đầy đủ. Với cách đánh giá hoàn toàn tương tự như định lý trên, nếu các giả thiết của định lý được thỏa mãn thì ta cũng chỉ ra được rằng: . Sự xấp xỉ Ta có: với . Do đó: Vì lẽ đó ta nói toán tử sai phân xấp xỉ toán tử vi phân tới cấp . Sự ổn định của bài toán sai phân Định lý. Bài toán sai phân là bài toán ổn định: Chứng minh. ở trên, bài toán sai phân đã đưa về dạng với các hệ số thỏa mãn định lý về sự ổn định của hệ năm đường chéo. Để đánh giá ta đặt , trong đó: thỏa mãn thỏa mãn Khi đó thỏa mãn . Công thức truy đuổi từ phải áp dụng vào bài toán cho: Ta có: Do định lý về sự ổn định của hệ năm đường chéo, ta có nên suy ra sao cho thỏa mãn bất đẳng thức . trong đó các hệ số chính là số hạng thứ của dãy số Fibonacci Dãy số thể hiện ứng với các giá trị , có dạng: Viết lại: Ta có: trong đó: Với Xét quan hệ giữa các hệ số và . Suy ra: và ta có: (định lý về sự ổn định của hệ năm đường chéo). Bây giờ ta đánh giá Ta có: Do đó: Ta suy ra: Đặt: Suy ra: Cộng vế với vế các bất đẳng thức trên, ta được: Từ , ta có: Do đó: Đặt: Suy ra: Do giả thiết Ta có: Tương tự, ta có: Suy ra: Tiếp theo ta đánh giá các hệ số Nhận xét rằng: Do các nên ta có: Với mục đích đánh giá để thấy được nghiệm của bài toán phụ thuộc chặt vào vế phải của phương trình sai phân và điều kiện biên, do các hệ số đã chỉ ra ở trên chỉ phụ thuộc vào các hằng số ( và ) nên để đơn giản ta có thể đánh giá như sau: trong đó: Suy ra: Với Vậy: trong đó là số hạng thứ của dãy số Fibonacci ở trên. Ta có thể tính theo công thức sau: Ta nhận thấy, với mỗi xác định đánh giá ở trên chỉ phụ thuộc vào điều kiện đầu và vế phải của phương trình sai phân. Một cách tương tự đối với , áp dụng công thức truy đuổi từ trái ta có: do nên sao cho thỏa mãn ( với thì ). Ta có: trong đó: với Suy ra: trong đó: Ta có: Cộng vế với vế các bất đẳng thức trên ta được: Dựa vào điều kiện biên của bài toán , ta có: Suy ra: Do đó: trong đó: Tương tự như ở phần trên đối với ta sẽ chỉ ra được nên suy ra: Và cũng tương tự, ta cũng dễ dàng chứng tỏ rằng các . Khi đó có thể đánh giá như sau: Suy ra: Với Vậy: Rõ ràng ta thấy rằng tương tự bài toán nghiệm của bài toán cũng chỉ phụ thuộc vào vế phải của phương trình sai phân và điều kiện biên của nó. Như vậy từ ta suy ra: Tức là: . Trong đó: với . Định lý được chứng minh. Bài toán sai phân đối với sai số Gọi là nghiệm của bài toán vi phân và là nghiệm của bài toán sai phân . Đặt (- biểu thị sai số tại nút khi ta lấy ). Ta có bài toán sai phân đối với sai số . Suy ra: Vậy ta có hệ Sự hội tụ và sai số Định lý. Phương pháp sai phân là phương pháp hội tụ với cấp chính xác . Chứng minh. Với mọi hàm lưới xác định trên , ta định nghĩa chuẩn áp dụng định lý về sự ổn định vào bài toán sai phân đối với sai số, ta suy ra: Bất đẳng thức này chứng tỏ , tức là khi . Hơn nữa bất đẳng thức trên còn là một ước lượng của sai số . Cỡ của sai số là (tức là ). Định lý chứng minh xong. Chú ý: Từ chứng minh trên của định lý ta có thể phát biểu gọn: Xấp xỉ + ổn định = Hội tụ Xấp xỉ cấp 2 + ổn định = Hội tụ cấp 2 Thí dụ 1: Để kiểm tra sự đúng đắn của phương pháp, ta xét thí dụ sau: trong đó: chưa biết Bây giờ ta sẽ “mò” lấy một nghiệm và coi là nghiệm đúng của phương trình đã cho, sau đó tính các đạo hàm và thay vào phương trình để tính ra hàm . Khi đó áp dụng phương pháp sai phân đã trình bày ở trên để tính ra nghiệm gần đúng rồi so sánh với nghiệm đúng . Từ đó ta có thể đưa ra nhận xét về sự phù hợp của phương pháp. Nhận xét rằng phương trình đã cho là phương trình vi phân cấp 4 tuyến tính không thuần nhất hệ số hằng. Ta có thể tìm được nghiệm tổng quát của phương trình thuần nhất tương ứng là: Để tìm nghiệm tổng quát của phương trình không thuần nhất đã cho, ta sử dụng phương pháp biến thiên hằng số, nghĩa là coi các hắng số tùy ý là các hàm số. Ta tìm để cho nghiệm tìm được ở trên là một nghiệm của phương trình không thuần nhất. Sau khi tính các đạo hàm và thay vào phương trình đã cho, ta sẽ chọn các hệ số thỏa mãn hệ phương trình sau: trong đó: Giải ra ta có: Do là hàm chưa biết (cần tìm) nên các hệ số chưa xác định được Như vậy dựa vào dạng của nghiệm tìm được ở trên ta có thể chọn: và coi là nghiệm đúng của phương trình không thuần nhất. Sau khi tính các đạo hàm và thay vào phương trình đã cho, ta được: Bây giờ đã biết . Ta cần giải bài toán sau: Với các điều kiện biên: Chọn , nghĩa là chia đoạn làm 10 phần bằng nhau bởi các điểm chia: Dựa vào phương pháp sai phân đã nêu ở phần lý thuyết, ta đưa về hệ năm đường chéo sau đây để tính nghiệm gần đúng của phương trình vi phân đã cho trong đó: Giải ra ta được các , đồng thời so sánh với các nghiệm đúng cho trong bảng sau: Nghiệm gần đúng Nghiệm đúng 0 0 -0.9998 -1 1 0.025 -1.2589 -1.2588 2 0.05 -1.5362 -1.5361 3 0.075 -1.8327 -1.8326 4 0.1 -2.1493 -2.1494 5 0.125 -2.4871 -2.4873 6 0.15 -2.8470 -2.8474 7 0.175 -3.2303 -3.2307 8 0.2 -3.6380 -3.6384 9 0.225 -4.0714 -4.0716 10 0.25 -4.5317 -4.5316 Sai số đạt: Thí dụ 2. Giải gần đúng phương trình vi phân sau: ở đây: Do ta không thể tìm được dạng nghiệm tổng quát của phương trình đã cho nên ta phải lấy tùy ý và coi là nghiệm đúng của phương trình. Giả sử ta có dạng như sau: (Coi là nghiệm đúng) Sau khi tính các đạo hàm và thay vào phương trình đã cho, ta được: Tương tự như ở thí dụ 1, bây giờ đã biết các hàm ta dùng phương pháp sai phân để tìm nghiệm gần đúng của phương trình. Với các điều kiện biên: Ta chọn , tức là chia đoạn làm 25 phần bằng nhau bởi các điểm chia Như vậy ta có bài toán sai phân tương ứng với bài toán vi phân đã cho là: Tính các hệ số rồi thay vào hệ trên và giải ra được các nghiệm gần đúng đồng thời so sánh với các nghiệm đúng ta được bảng kết quả sau: 0 0 0.9998 1 1 0.02 1.0004 1.0006 2 0.04 1.0024 1.0025 3 0.06 1.0056 1.0058 4 0.08 1.0103 1.0105 5 0.1 1.0166 1.0167 6 0.12 1.0245 1.0246 7 0.14 1.034 1.0342 8 0.16 1.0454 1.0456 9 0.18 1.0587 1.0589 10 0.2 1.0741 1.0742 11 0.22 1.0915 1.0917 12 0.24 1.1111 1.1114 13 0.26 1.1331 1.1333 14 0.28 1.1575 1.1578 15 0.3 1.1845 1.1847 16 0.32 1.2141 1.2144 17 0.34 1.2466 1.2468 18 0.36 1.2819 1.2822 19 0.38 1.3203 1.3205 20 0.4 1.3618 1.3621 21 0.42 1.4067 1.4069 22 0.44 1.455 1.4552 23 0.46 1.5069 1.5071 24 0.48 1.5625 1.5627 25 0.5 1.6220 1.6221 Sai số đạt: Chú ý 1. Runge xem: (tồn tại nhưng chưa biết). Tính sai số: Chú ý 2. Xét bài toán Giả sử khi tính không được các giá trị đúng của mà chỉ được với ( là hai số dương bé) Khi đó thay cho bài toán ban đầu, ta có là bài toán mà vế phải và bị nhiễu một chút. Bài toán sai phân đối với sai số (tính toán): áp dụng bất đẳng thức ổn định Phụ lục Chương trình minh họa phương pháp sai phân giải gần đúng phương trình vi phân cấp bốn (Sử dụng ngôn ngữ Visual Basic) Tập tin PPSP.BAS Public a As Double Public b As Double Public N As Integer '---------------------------------------- ' Nhap ham p(x) '---------------------------------------- Public Function p(X As Double) As Double Dim a As Double Dim b As Double Dim c As Double a = Val(frmBTVP.txtAp.Text) b = Val(frmBTVP.txtBp.Text) c = Val(frmBTVP.txtCp.Text) p = a * X * X + b * X + c End Function '---------------------------------------- ' Nhap ham q(x) '---------------------------------------- Public Function q(X As Double) As Double Dim a As Double Dim b As Double Dim c As Double a = Val(frmBTVP.txtAq.Text) b = Val(frmBTVP.txtBq.Text) c = Val(frmBTVP.txtCq.Text) q = a * X * X + b * X + c End Function '---------------------------------------- ' Nhap ham g(x) '---------------------------------------- Public Function g(X As Double) As Double Dim a As Double Dim b As Double Dim c As Double a = Val(frmBTVP.txtAg.Text) b = Val(frmBTVP.txtBg.Text) c = Val(frmBTVP.txtCg.Text) g = a * X * X + b * X + c End Function '---------------------------------------- ' Nhap ham f(x) '---------------------------------------- Public Function f(X As Double) As Double Dim a As Double Dim b As Double Dim c As Double a = Val(frmBTVP.txtAf.Text) b = Val(frmBTVP.txtBf.Text) c = Val(frmBTVP.txtCf.Text) f = a * X * X + b * X + c End Function '----------------------------------------------------------------------- ' Phuong phap truy duoi tu phai giai he 5 duong cheo '----------------------------------------------------------------------- Public Sub TDP(Y() As Double, N As Integer) ReDim hsa(0 To N) As Double ReDim hsb(0 To N) As Double ReDim hsc(0 To N) As Double ReDim hsd(0 To N) As Double ReDim hse(0 To N) As Double ReDim fvp(0 To N) As Double ReDim Alpha(1 To N) As Double ReDim Beta(1 To N) As Double ReDim Gama(1 To N + 1) As Double ReDim Delta(1 To N) As Double Dim i As Integer Call Tinh_HS(hsa(), hsb(), hsc(), hsd(), hse(), fvp(),N) '1------ Tinh cac he so Alpha, Beta, Gama ------' Alpha(1) = hsd(0) / hsc(0) Delta(1) = hsc(1) - hsb(1) * Alpha(1) Beta(1) = hse(0) / hsc(0) Alpha(2) = (hsd(1) - Beta(1) * hsb(1)) / Delta(1) Beta(2) = hse(1) / Delta(1) Gama(1) = fvp(0) / hsc(0) Gama(2) = (fvp(1) + hsb(1) * Gama(1)) / Delta(1) For i = 2 To N - 2 Step 1 Delta(i) = hsc(i) - hsa(i) * Beta(i - 1) + Alpha(i) * (hsa(i) * Alpha(i - 1) - hsb(i)) Alpha(i + 1) = (hsd(i) + Beta(i) * (hsa(i) * Alpha(i - 1) - hsb(i))) / Delta(i) Beta(i + 1) = hse(i) / Delta(i) Gama(i + 1) = (fvp(i) - hsa(i) * Gama(i - 1) - Gama(i) * (hsa(i) * Alpha(i - 1) - hsb(i))) / Delta(i) Next i Delta(N - 1) = hsc(N - 1) - hsa(N - 1) * Beta(N - 2) + Alpha(N - 1) * (hsa(N - 1) * Alpha(N - 2) - hsb(N - 1)) Alpha(N) = (hsd(N - 1) + Beta(N - 1) * (hsa(N - 1) * Alpha(N - 2) - hsb(N - 1))) / Delta(N - 1) Gama(N) = (fvp(N - 1) - hsa(N - 1) * Gama(N - 2) - Gama(N - 1) * (hsa(N - 1) * Alpha(N - 2) - hsb(N - 1))) / Delta(N - 1) Delta(N) = hsc(N) - hsa(N) * Beta(N - 1) + Alpha(N) * (hsa(N) * Alpha(N - 1) - hsb(N)) Gama(N + 1) = (fvp(N) - hsa(N) * Gama(N - 1) - Gama(N) * (hsa(N) * Alpha(N - 1) - hsb(N))) / Delta(N) '2------ Tinh nghiem theo phuong phap truy duoi tu phai ------' Y(N) = Gama(N + 1) Y(N - 1) = Alpha(N) * Y(N) + Gama(N) For i = N - 2 To 0 Step -1 Y(i) = Alpha(i + 1) * Y(i + 1) - Beta(i + 1) * Y(i + 2) + Gama(i + 1) Next i End Sub '---------------------------------------------------------------- ' Phuong phap truy duoi tu trai giai he 5 duong cheo '---------------------------------------------------------------- Public Sub TDT(Y() As Double, N As Integer) ReDim hsa(0 To N) As Double ReDim hsb(0 To N) As Double ReDim hsc(0 To N) As Double ReDim hsd(0 To N) As Double ReDim hse(0 To N) As Double ReDim fvp(0 To N) As Double ReDim Delta(1 To N) As Double ReDim Gsi(1 To N) As Double ReDim Deta(1 To N) As Double ReDim T0(0 To N) As Double Dim i As Integer Call Tinh_HS(hsa(), hsb(), hsc(), hsd(), hse(), fvp(), N) '1---------- Tinh cac he so Gsi, Deta, T0 ----------' Gsi(N) = hsb(N) / hsc(N) Deta(N) = hsa(N) / hsc(N) T0(N) = fvp(N) / hsc(N) Delta(N) = hsc(N - 1) - hsd(N - 1) * Gsi(N) Gsi(N - 1) = (hsb(N - 1) - hsd(N - 1) * Deta(N)) / Delta(N) Deta(N - 1) = hsa(N - 1) / Delta(N) T0(N - 1) = (fvp(N - 1) + hsd(N - 1) * T0(N)) / Delta(N) For i = N - 2 To 1 Step -1 Delta(i + 1) = hsc(i) - hse(i) * Deta(i + 2) + Gsi(i + 1) * (hse(i) * Gsi(i + 2) - hsd(i)) Gsi(i) = (hsb(i) + Deta(i + 1) * (hse(i) * Gsi(i + 2) - hsd(i))) / Delta(i + 1) Deta(i) = hsa(i) / Delta(i + 1) T0(i) = (fvp(i) - hse(i) * T0(i + 2) - T0(i + 1) * (hse(i) * Gsi(i + 2) - hsd(i))) / Delta(i + 1) Next i Delta(1) = hsc(0) - hse(0) * Deta(2) + Gsi(1) * (hse(0) * Gsi(2) - hsd(0)) T0(0) = (fvp(0) - hse(0) * T0(2) - T0(1) * (hse(0) * Gsi(2) - hsd(0))) / Delta(1) '2---------- Tinh nghiem theo cong thuc truy duoi tu trai ----------' Y(0) = T0(0) Y(1) = Gsi(1) * Y(0) + T0(1) For i = 2 To N Step 1 Y(i) = Gsi(i) * Y(i - 1) - Deta(i) * Y(i - 2) + T0(i) Next i End Sub '----------------------------------------------------------------- ' Phuong phap truy duoi ket hop giai he 5 duong cheo '----------------------------------------------------------------- Public Sub TDKH(Y() As Double, N As Integer) ReDim U(0 To N) As Double ReDim V(0 To N) As Double Dim i As Integer Call TDT(U(), N) Call TDP(V(), N) For i = 0 To N Step 1 Y(i) = (U(i) + V(i)) / 2 Next i End Sub Public Sub Tinh_HS(hsa() As Double, hsb() As Double, hsc() As Double, hsd() As Double, hse() As Double, fvp() As Double, N As Integer) Dim h As Double Dim i As Integer ReDim X(0 To N) As Double X(0) = a h = (b - a) / N For i = 1 To N Step 1 X(i) = X(i - 1) + h Next i hsa(0) = 0: hsa(1) = 0 hsa(N - 1) = 0: hsa(N) = 0 hsb(0) = 0: hsb(1) = 3 hsb(N - 1) = 1: hsb(N) = 0 hsc(0) = 1: hsc(1) = 4 hsc(N - 1) = 4: hsc(N) = 1 hsd(0) = 0: hsd(1) = 1 hsd(N - 1) = 3: hsd(N) = 0 hse(0) = 0: hse(1) = 0 hse(N - 1) = 0: hse(N) = 0 fvp(0) = Val(frmBTVP.txtYa.Text): fvp(1) = 2 * h * Val(frmBTVP.txtYpa.Text) fvp(N - 1) = -2 * h * Val(frmBTVP.txtYpb.Text): fvp(N) = Val(frmBTVP.txtYb.Text) For i = 2 To N - 2 Step 1 hsa(i) = p(X(i - 1)) hsb(i) = 2 * p(X(i)) + 2 * p(X(i - 1)) - h * h * q(X(i) - h / 2) hsc(i) = p(X(i + 1)) + 4 * p(X(i)) + p(X(i - 1)) - h * h * (q(X(i) + h / 2) + q(X(i) - h / 2)) + h*h*h*h* g(X(i)) hsd(i) = 2 * p(X(i + 1)) + 2 * p(X(i)) - h * h * q(X(i) + h / 2) hse(i) = p(X(i + 1)) fvp(i) =h*h* h * h * f(X(i)) Next i End Sub '---------------------------------------------------------- 'Phuong phap lap co dan giai he 5 duong cheo '---------------------------------------------------------- Public Sub LCD(V() As Double, N As Integer) Dim i As Integer ReDim hsa(0 To N) As Double ReDim hsb(0 To N) As Double ReDim hsc(0 To N) As Double ReDim hsd(0 To N) As Double ReDim hse(0 To N) As Double ReDim fvp(0 To N) As Double ReDim Vt(0 To N) As Double Dim Ya As Double, Yb As Double Dim Ypa As Double, Ypb As Double Dim Delta As Double Dim max As Double Dim solan As Double Dim h As Double Call Tinh_HS(hsa(), hsb(), hsc(), hsd(), hse(), fvp(), N) Ya = Val(frmBTVP.txtYa.Text) Yb = Val(frmBTVP.txtYb.Text) Ypa = Val(frmBTVP.txtYpa.Text) Ypb = Val(frmBTVP.txtYpb.Text) '------ Cho xap xi dau V(i) buoc 0 ------' For i = 0 To N Step 1 Vt(i) = 0 Next i '------ Tinh V(i) buoc thu m theo cong thuc lap Seidel ------' If frmLCD.txtDelta "" Then Delta = Val(frmLCD.txtDelta.Text) Else Delta = 0.01 End If h = (b - a) / N w = 1.5 ' 1 < w < 2 solan = 1 Do V(0) = Ya V(2) = ((-hsa(2) + 0.75 * hsb(2)) * Ya + hsd(2) * Vt(3) - hse(2) * Vt(4) + fvp(2) + 0.5 * hsb(2) * h * Ypa) / (hsc(2) - 0.25 * hsb(2)) V(1) = 0.25 * (3 * Ya + V(2) + 2 * h * Ypa) V(2) = w * V(2) + (1 - w) * Vt(2) For i = 3 To N - 2 Step 1 V(i) = (-hsa(i) * V(i - 2) + hsb(i) * V(i - 1) + hsd(i) * Vt(i + 1) - hse(i) * Vt(i + 2) + fvp(i)) / hsc(i) V(i) = w * V(i) + (1 - w) * Vt(i) Next i V(N) = Yb V(N - 1) = 0.25 * (V(N - 2) + 3 * V(N) - 2 * h * Ypb) max = Abs((V(1) - Vt(1)) / V(1)) For i = 2 To N - 1 Step 1 If Abs((V(i) - Vt(i)) / V(i)) > max Then max = Abs((V(i) - Vt(i)) / V(i)) Next i Call BangLap For i = 1 To N - 1 Step 1 frmLCD.grdLcd.TextMatrix(solan, i) = Round(V(i), 5) Next i solan = solan + 1 If solan >= frmLCD.grdLcd.Rows Then frmLCD.grdLcd.Rows = solan + 1 End If For i = 0 To N Step 1 Vt(i) = V(i) Next i Loop While max > Delta And solan < 100 End Sub Public Sub BangLap() Dim i As Integer frmLCD.grdLcd.Cols = N frmLCD.grdLcd.FormatString = " Buoc lap " For i = 1 To frmLCD.grdLcd.Rows - 1 Step 1 frmLCD.grdLcd.TextMatrix(i, 0) = Str$(i) Next i For i = 1 To N - 1 frmLCD.grdLcd.TextMatrix(0, i) = " V(" & Str$(i) & ")" Next i End Sub Public Sub HienBangLap() ReDim V(0 To N) As Double Dim M As Integer frmLCD.Show Call BangLap M = N Call LCD(V(), M) End Sub Public Function SaiSo() As Double ReDim V(0 To N) As Double ReDim W(0 To 2 * N) As Double Dim Error As Double Dim M As Integer Dim i As Integer M = N Call TDP(V(), M) Call TDP(W(), 2 * M) Error = Abs(V(0) - W(0)) For i = 1 To N Step 1 If Abs(V(i) - W(2 * i)) > Error Then Error = Abs(V(i) - W(2 * i)) End If Next i SaiSo = 4 * Error / 3 End Function Tập tin BTVP.frm Thiết kế giao diện Mã lệnh Private Sub Form_Load() frmBTVP.Height = 6710 frmBTVP.Width = 7530 frmBTVP.Left = (Screen.Width - frmBTVP.Width) / 2 frmBTVP.Top = (Screen.Height - frmBTVP.Height) / 2 mnuDel.Enabled = False mnuPopupDel.Enabled = False cmdSph.Enabled = False End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then PopupMenu mnuPopup, vbPopupMenuLeftAlign End If End Sub Private Sub cmdExit_Click() End End Sub Private Sub cmdSph_Click() frmBTVP.Hide frmBTSP.Show End Sub Private Sub Frame1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Call Form_MouseUp(Button, Shift, X, Y) End Sub Private Sub lblbt_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Call Form_MouseUp(Button, Shift, X, Y) End Sub Private Sub mnuAbout_Click() frmDATN.Show End Sub Private Sub mnuDel_Click() txtAp.Text = "": txtBp.Text = "": txtCp.Text = "" txtAq.Text = "": txtBq.Text = "": txtCq.Text = "" txtAg.Text = "": txtBg.Text = "": txtCg.Text = "" txtAf.Text = "": txtBf.Text = "": txtCf.Text = "" txtYa.Text = "": txtYb.Text = "" txtYpa.Text = "": txtYpb.Text = "" End Sub Private Sub mnuExit_Click() End End Sub Private Sub mnuInput_Click() Dim i As Integer Dim NextLine As String Dim S() As Double CommonDialog1.Filter = "Text files(*.TXT)|*.TXT" CommonDialog1.ShowOpen If CommonDialog1.FileName "" Then Open CommonDialog1.FileName For Input As #1 i = 1 ReDim S(1) As Double Do While Not EOF(1) Line Input #1, NextLine If NextLine "" Then S(i) = Val(NextLine) i = i + 1 ReDim Preserve S(i) As Double End If Loop Close #1 '------ He so cua ham p(x) ------' txtAp.Text = S(1) txtBp.Text = S(2) txtCp.Text = S(3) '------ He so cua ham q(x) ------' txtAq.Text = S(4) txtBq.Text = S(5) txtCq.Text = S(6) '------ He so cua ham g(x) ------' txtAg.Text = S(7) txtBg.Text = S(8) txtCg.Text = S(9) '------ He so cua ham f(x) ------' txtAf.Text = S(10) txtBf.Text = S(11) txtCf.Text = S(12) '------ Dieu kien bien ya,yb,y'a,y'b ------' txtYa.Text = S(13) txtYb.Text = S(14) txtYpa.Text = S(15) txtYpb.Text = S(16) End If End Sub Private Sub mnuPopupAbout_Click() Call mnuAbout_Click End Sub Private Sub mnuPopupDel_Click() Call mnuDel_Click End Sub Private Sub mnuPopupExit_Click() End End Sub Private Sub mnuPopupInput_Click() Call mnuInput_Click End Sub Private Sub mnutContents_Click() frmContents.Show End Sub Private Sub picBt_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Call Form_MouseUp(Button, Shift, X, Y) End Sub Private Sub tmrTimer_Timer() Dim OK As Boolean Dim OK1 As Boolean Dim OK2 As Boolean Dim OK3 As Boolean Dim OK4 As Boolean If txtAp.Text "" And txtBp.Text "" And txtCp.Text "" Then OK1 = True Else: OK1 = False End If If txtAq.Text "" And txtBq.Text "" And txtCq.Text "" Then OK2 = True Else: OK2 = False End If If txtAg.Text "" And txtBg.Text "" And txtCg.Text "" Then OK3 = True Else: OK3 = False End If If txtAf.Text "" And txtBf.Text "" And txtCf.Text "" Then OK4 = True Else: OK4 = False End If If txtYa.Text "" And txtYb.Text "" And txtYpa.Text "" And txtYpb.Text "" Then OK = True Else: OK = False End If If OK1 = True And OK2 = True And OK3 = True And OK4 = True And OK = True Then cmdSph.Enabled = True mnuDel.Enabled = True mnuPopupDel.Enabled = True Else cmdSph.Enabled = False mnuDel.Enabled = False mnuPopupDel.Enabled = False End If End Sub Private Sub txtAf_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtAf.Text = "" End If Next i End Sub Private Sub txtAg_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtAg.Text = "" End If Next i End Sub Private Sub txtAp_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtAp.Text = "" End If Next i End Sub Private Sub txtAq_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtAq.Text = "" End If Next i End Sub Private Sub txtBf_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtBf.Text = "" End If Next i End Sub Private Sub txtBg_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtBg.Text = "" End If Next i End Sub Private Sub txtBp_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtBp.Text = "" End If Next i End Sub Private Sub txtBq_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtBq.Text = "" End If Next i End Sub Private Sub txtCf_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtCf.Text = "" End If Next i End Sub Private Sub txtCg_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtCg.Text = "" End If Next i End Sub Private Sub txtCp_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtCp.Text = "" End If Next i End Sub Private Sub txtCq_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtCq.Text = "" End If Next i End Sub Private Sub txtYa_Keypress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtYa.Text = "" End If Next i End Sub Private Sub txtYb_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtYb.Text = "" End If Next i End Sub Private Sub txtYpa_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtYpa.Text = "" End If Next i End Sub Private Sub txtYpb_KeyPress(KeyAscii As Integer) Dim i As Integer For i = 65 To 90 Step 1 If KeyAscii = i Or KeyAscii = i + 32 Then txtYpb.Text = "" End If Next i End Sub Tập tin BTSP.frm Thiết kế giao diện Mã lệnh Private Sub Form_Load() frmBTSP.Left = (Screen.Width - frmBTSP.Width) / 2 frmBTSP.Top = (Screen.Height - frmBTSP.Height) / 2 cmdCal.Enabled = False mnuSeidel.Enabled = False frmLCD.grdLCD.Rows = 10 End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then PopupMenu mnuRelaxtion, vbPopupMenuLeftAlign End If End Sub Private Sub cmdCal_Click() a = Val(frmBTSP.txtA.Text) b = Val(frmBTSP.txtB.Text) N = Val(frmBTSP.txtN.Text) Dim i As Integer, M As Integer ReDim Y(0 To N) As Double Dim Response as Integer grdTable.Rows = 2 grdTable.Cols = N + 2 M = N For i = 1 To N + 1 Step 1 grdTable.TextMatrix(0, i) = " V(" & Str$(i - 1) & ")" Next i If N >= 4 Then ' Call TDT(Y(),M) ' Call TDP(Y(), M) Call TDKH(Y(),M) For i = 0 To N Step 1 grdTable.TextMatrix(1, i + 1) = Round(Y(i), 8) Next i txtError.Text = Round(SaiSo, 9) Else Response = Msgbox (“Chú ý: Số đIểm chia của lưới phải không được nhỏ hơn bốn (N >= 4)!”, vbOkOnly + vbExclamation, “Thông báo”) If Response = vbYes then ' Call TDT(Y(),M) ' Call TDP(Y(), M) Call TDKH(Y(),M) End If End If End Sub Private Sub cmdQuit_Click() frmBTSP.Hide frmBTVP.Show End Sub Private Sub mnuExit_Click() frmBTSP.Hide frmBTVP.Show End Sub Private Sub mnuSeidel_Click() ReDim V(0 To N) As Double Dim M As Integer frmLCD.Show frmLCD.txtDelta = "" M = N Call LCD(V(), M) End Sub Private Sub tmrTimer_Timer() If txtA.Text "" And txtB.Text "" And txtN.Text "" Then cmdCal.Enabled = True mnuRelaxtion.Enabled = True mnuSeidel.Enabled = True Else cmdCal.Enabled = False mnuRelaxtion.Enabled = False mnuSeidel.Enabled = False End If End Sub Private Sub txtA_Change() Dim i As Integer grdTable.Cols = N + 2 If txtA.Text = "" Then For i = 1 To N + 1 Step 1 grdTable.TextMatrix(0, i) = "" Next i For i = 1 To N + 1 Step 1 grdTable.TextMatrix(1, i) = "" Next i End If grdTable.Rows = 5 grdTable.Cols = 5 End Sub Private Sub txtB_Change() 'Call txtA_Change Dim i As Integer grdTable.Cols = N + 2 If txtA.Text = "" Then For i = 1 To N + 1 Step 1 grdTable.TextMatrix(0, i) = "" Next i For i = 1 To N + 1 Step 1 grdTable.TextMatrix(1, i) = "" Next i End If grdTable.Rows = 5 grdTable.Cols = 5 End Sub Private Sub txtN_Change() Call txtA_Change End Sub Tập tin LCD.frm Thiết kế giao diện Mã lệnh Private Sub Form_Load() frmLCD.Height = 3990 frmLCD.Width = 6240 frmLCD.Left = (Screen.Width - frmLCD.Width) / 2 frmLCD.Top = (Screen.Height - frmLCD.Height) / 2 End Sub Private Sub cmdExit_Click() frmLCD.Hide End Sub Private Sub grdLcd_Click() Call HienBangLap End Sub Private Sub grdLcd_DblClick() Dim i As Integer Dim j As Integer For i = 0 To 100 Step 1 For j = 0 To N - 3 Step 1 grdLcd.TextMatrix(i, j) = "" Next j Next i End Sub Tập tin AboutDATN.frm Thiết kế giao diện Mã lệnh Private Sub Form_Load() frmDATN.Left = (Screen.Width - frmDATN.Width) / 2 frmDATN.Top = (Screen.Height - frmDATN.Height) / 2 frmDATN.Width = 7425 frmDATN.Height = 4545 End Sub Private Sub Form_Click() Call Frame1_Click End Sub Private Sub Frame1_Click() frmDATN.Hide End Sub Private Sub imgLogo_Click() Call Frame1_Click End Sub Private Sub lblCompany_Click() Call Frame1_Click End Sub Private Sub lblCompanyProduct_Click() Call Frame1_Click End Sub Private Sub lblCopyright_Click() Call Frame1_Click End Sub Private Sub lblDatn_Click() Call Frame1_Click End Sub Private Sub lblDt_Click() Call Frame1_Click End Sub Private Sub lblProductName_Click() Call Frame1_Click End Sub Private Sub lblSubject_Click() Call Frame1_Click End Sub Private Sub lblWarning_Click() Call Frame1_Click End Sub Tập tin ContentsDATN.frm Thiết kế giao diện Mã lệnh Private Sub Form_Load() frmContents.Left = (Screen.Width - frmContents.Width) / 2 frmContents.Top = (Screen.Height - frmContents.Height) / 2 frmContents.Width = 7920 frmContents.Height = 6630 End Sub Private Sub cmdTDP_Click() frmTDP.Show End Sub Tập tin ContentsTDP.frm Thiết kế giao diện Mã lệnh Private Sub Form_Load() frmTDT.Left = (Screen.Width - frmTDT.Width) / 2 frmTDT.Top = (Screen.Height - frmTDT.Height) / 2 End Sub Private Sub cmdExit_Click() Unload Me End Sub Tập tin ContentsTDT.frm Thiết kế giao diện Mã lệnh Private Sub Form_Load() frmTDT.Left = (Screen.Width - frmTDT.Width) / 2 frmTDT.Top = (Screen.Height - frmTDT.Height) / 2 End Sub Private Sub cmdExit_Click() Unload Me End Sub Ví Dụ minh họa TàI liệu tham khảo [1] Phan Văn Hạp, Lê Đình Thịnh Phương pháp tính và các thuật toán. NXB GD – 2000. [2] Tạ Văn Đĩnh Phương pháp sai phân và phương pháp phần tử hữu hạn. NXB KHKT Hà nội – 2002. [3] Lê Trọng Vinh Giải tích số. NXB KHKT Hà nội – 2000. [4] Phạm Phú Triêm, Nguyễn Bường Giải tích số. NXB ĐHQG Hà nội – 2000. [5] Nguyễn Đình Trí, Tạ Văn Đĩnh, Nguyễn Hồ Quỳnh Toán học cao cấp. Tập III – Phép tính giải tích nhiều biến số. NXB GD – 1998. [6] Edwin F. Beckenbach Toán học hiện đại cho kỹ sư. Tập I - Hồ Thuần, Nguyễn Lãm, Lê Thiện Phố, Phạm Văn ất dịch. NXB ĐH và THCN Hà nội – 1987. [7] Michael D. Greenberg Advanced Engineering Mathematics.

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

  • docDAN310.doc