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.
84 trang |
Chia sẻ: oanh_nt | Lượt xem: 1415 | Lượt tải: 0
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:
- DAN310.doc