Bây giờ chúng ta giả sử rằng cỡ bước là không lớn hơn để các công thức chúng ta vừa xem xét chỉ là ẩn tuyến tính. Có những bài toán phát sinh và nếu xử lý thông qua cỡ bước thì quả thật sẽ không thực tế chút nào và độ trơn của nghiệm cũng không đòi hỏi điều đó. Với trường hợp ở mục 2.7.1 về sự lan truyền chúng ta thảo luận các ví dụ choppy, có 0.0001 và Tf 5. Nếu chúng ta giới hạn cỡ bước đến , chúng ta sẽ cần ít nhất 50.000 bước để giải bài toán này, nhưng code ddaeresp giải được nó trong 343 bước. Khi lấy một bước dài hơn trễ ngắn nhất, ít nhất một trong các thành phần z tj( j) có đối số của nó trong t tn, n1. Chúng ta chưa tính z tj( ) trên khoảng này, do đó nghiệm dạng số chỉ được xác định ẩn. Điều này là đúng ngay cả khi bản thân phương pháp Runge- Kutta đã tường minh rồi.
Để thực hiện một cách đơn giản chúng ta sử dụng các bước lặp dài hơn .
thuộc trong tn1,tn. Trong đoạn này, một hàm được sử dụng để tính các giá trị của z t( ) tại ba điểm mới, được sử dụng để xác định xấp xỉ đa thức bậc 3 cho
( )
z t trên bước hiện tại, cụ thể là
1, L t 3, L t tn1. Sử dụng các giá trị này, một hàm khác đánh giá w t( ) tại các đối số cần để tính các bậc của công thức Runge-Kutta. Với những giai đoạn này, chúng ta tính xn1, xn1
và sau đó tính zn1. Một hàm nội suy Hermite bậc 3 cho x t( ) được đánh giá để nhận được xấp xỉ x t( ) và x t( ) tại các nút của công thức cầu phương Lobatto nhằm đánh giá sai số. Một xấp xỉ cho w t( ) được đánh giá tại những điểm tương tự. Những giá trị này và giá trị
( )
u t và x t( ) sau đó được sử dụng để làm tròn xấp xỉ tới z t( ) tại
1, L t 3 L t . Nếu cỡ bước là không lớn hơn thì một bước được hoàn thành và chương trình tiếp tục để đánh giá sai số. Nếu không, chương trình sẽ kiểm tra sự thay đổi tương đối zn1. Nếu nó lớn hơn 103 việc tính toán được lặp đi lặp lại lên đến 5 lần. Rõ
ràng sẽ rất thuận lợi khi đánh giá u t( ) ở bên ngoài vòng lặp. Các khoản tiết kiệm
hữu ích là hoàn toàn có thể với những cỡ bước tương đương với khi ước lượng một gián đoạn của công thức bằng cách kiểm tra xem một gián đoạn được ngầm định hay chưa, do đó liệu rằng gián đoạn đó phải được ước lượng trong mỗi lần lặp.
Bởi vì thời gian chạy là rất quan trọng trong ứng dụng, chúng ta phải thường xuyên sử dụng phần mềm MATLAB để xác định nơi mà tích phân tự động đã ưu tiên tham số chi phí thời gian của chúng. Thường thì những nơi này không phải là nơi dễ thấy. Với trường hợp hàm giá trị w t( ) là một cổ chai. Bởi vì các đối số w tj( )z tj( j) phụ thuộc vào j, giá trị của w t( ) không là vectơ. Các biến đại số z t( ) được sắp xếp dưới dạng một hàm đa thức bậc 3 từng khúc, do đó cần phải tìm vị trí của khúc đại diện cho các thành phần đang được quan
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
tâm và sau đó nội suy Lagrange để đánh giá hàm Hermite bậc 3. Bài toán trở nên phức tạp hơn bởi sự xuất hiện của các bước nhảy gián đoạn. Mặc dù chúng ta đã mã hóa hàm này một cách cẩn thận, nó vẫn là một ứng viên sáng giá cho việc mã hóa trong .C