2012-04-10 40 views
18

Có cách nào để R giải quyết nghịch đảo của một hàm biến duy nhất đã cho không? Động lực là cho tôi sau này yêu cầu R sử dụng một vectơ các giá trị làm đầu vào của hàm nghịch đảo để nó có thể nhổ ra các giá trị hàm nghịch đảo. Ví dụ: tôi có hàm y (x) = x^2, nghịch đảo là y = sqrt (x). Có cách nào R có thể giải quyết cho các chức năng nghịch đảo?Giải quyết cho nghịch đảo của một hàm trong R

Tôi tra cứu uniroot(), nhưng tôi không giải quyết cho số không của hàm.

Mọi đề xuất sẽ hữu ích.

Cảm ơn!

Trả lời

25

Bạn đang tìm thấy loại đảo ngược nào? Nếu bạn đang tìm kiếm một nghịch đảo tượng trưng (ví dụ: một hàm y giống hệt sqrt (x)) bạn sẽ phải sử dụng một hệ thống tượng trưng. Hãy xem ryacas để có thư viện R kết nối với hệ thống đại số máy tính có khả năng tính toán nghịch đảo, Yacas.

Bây giờ, nếu bạn chỉ cần phải tính toán ngược point-khôn ngoan, bạn có thể xác định chức năng của bạn về uniroot như bạn đã viết:

> inverse = function (f, lower = -100, upper = 100) { 
    function (y) uniroot((function (x) f(x) - y), lower = lower, upper = upper)[1] 
} 

> square_inverse = inverse(function (x) x^2, 0.1, 100) 

> square_inverse(4) 
[1] 1.999976 

Đối với một trao yf(x), điều này sẽ tính toán x sao cho f(x) = y, còn được gọi là nghịch đảo.

+1

rất đẹp, mặc dù dấu chấm phẩy là không cần thiết ... –

+1

Ah, R không phải là ngôn ngữ chính của tôi vì vậy tôi không bao giờ chắc chắn phong cách là gì ... Tôi sẽ sửa nó. –

+0

Tôi sẽ đề nghị tạo một vectơ lớn 'y <- f (seq (0,100, .001)' và sử dụng kết quả để xây dựng hàm phân phối của x theo y qua 'ecdf' hoặc các công cụ tương tự, nhưng phương thức của Mike –

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