5

Tôi đang bối rối về điều gì đó. Tôi muốn tạo ra một ví dụ (trong Clojure) cho thấy một bộ kết hợp điểm cố định có thể được sử dụng như thế nào để đánh giá điểm cố định của một chuỗi mà hội tụ toán học sau một số lượng ứng dụng vô hạn nhưng trên thực tế, hội tụ sau một số bước hữu hạn đến độ chính xác hữu hạn của các điểm nổi. Tôi dường như thiếu một cái gì đó ở đây.Sử dụng bộ kết hợp điểm cố định? Tại sao tràn ngăn xếp ở đây?

(defn Y [r] 
    ((fn [f] (f f)) 
    (fn [f] 
    (r (fn [x] ((f f) x)))))) 

(defn simple-convergent [func] 
    (fn [x] 
    (if (zero? x) 
     0.0 
     (* 0.5 (func x))))) 

Sau đó tôi có thể nhận được

user=> ((Y simple-convergent) 0.) 
0.0 
user=> ((Y simple-convergent) 0.2) 
java.lang.StackOverflowError (NO_SOURCE_FILE:0) 

Tôi không hiểu chồng tràn này. Nói chung, liên quan đến bài trước của tôi, tôi tự hỏi nếu ai đó có thể trình bày một phiên bản "chính xác" của một bộ kết hợp điểm cố định có thể được sử dụng để ước tính các điểm cố định của chuỗi trong thời trang này.

+3

Dòng cuối cùng có lẽ là '(func (* 0.5 x))' không? Dường như nó lặp lại với cùng một x mãi mãi. –

Trả lời

2

Nhờ Brian Carper cho câu trả lời (chính xác) của mình làm nhận xét. Mã được sửa chữa

(defn simple-convergent [func] 
    (fn [x] 
    (if (zero? x) 
     0.0 
     (func (* 0.5 x))))) 

hoạt động như tôi mong đợi. Dự án tiếp theo của tôi là cố gắng xây dựng một bộ kết hợp điểm cố định tìm các điểm cố định không ổn định. Tôi không tin rằng tổ hợp Y được thực hiện ở trên có thể làm được điều này.

Các vấn đề liên quan