2011-07-22 31 views
7

Tôi đang làm việc trên một dự án và đã tìm thấy chính mình trong một tình huống mà tôi cần một hàm để có thể nhận được ít nhất một giá trị xấp xỉ của giá trị W (x), Lambert W function, x có thể là bất kỳ số thực nào. Tôi đang làm việc trong Java. Tôi không thể tìm thấy bất kỳ triển khai W trong java khi tôi tìm kiếm. Tôi sẵn sàng tự viết mã cho bản triển khai nếu cần, nhưng tôi không chắc chắn về cách thực hiện điều đó ngay bây giờ. Bất kỳ cú đẩy nào đi đúng hướng sẽ được đánh giá cao.Thực hiện chức năng Lambert W trong Java

+0

Ngoài ra, nếu nó làm cho một sự khác biệt, tôi nghĩ rằng tôi chỉ cần W trên lĩnh vực [0, inf). – Graham

Trả lời

6

Hãy xem trang này: http://mathworld.wolfram.com/LambertW-Function.html

Nó liệt kê một xấp xỉ cho z>3 cũng như mở rộng loạt cho hàm.

Bạn cũng có thể sử dụng phương pháp của Newton và phương pháp Halley để xấp xỉ hàm: http://en.wikipedia.org/wiki/Lambert_W_function#Numerical_evaluation

+0

Nhìn vào xấp xỉ z> 3 trên liên kết đầu tiên bạn đăng, tôi hiểu hầu hết các công thức ngoại trừ bit kết thúc. Phần O [(L1/L2)^6] có nghĩa là gì? Ngoài ra khi nó nói một cái gì đó giống như L2 (-2 + L2) sẽ được lnlnz * (-2 + lnlnz) hoặc lnln (-2 + lnlnz)? – Graham

+0

'+ O (công cụ)' ở cuối chỉ là một thuật ngữ lỗi. Bạn có thể bỏ qua nó. Và 'L2 (-2 + L2) = lnlnz * (-2 + lnlnz)' – tskuzzy

+0

Cảm ơn! Điều đó làm rõ một số điều. Vì vậy, tôi có lẽ chỉ có thể sử dụng công thức đó cho đầu vào cho hàm lớn hơn 3 và tìm công thức xấp xỉ đơn giản hơn cho đầu vào trong khoảng từ 0 đến 3? – Graham

3

Chức năng lambert là hàm nghịch đảo của g(w) = w*exp(w) nó xác minh:

W(z)eW(z) = z. 

Một cách tốt để đánh giá W (z) trên một z đã cho sẽ sử dụng phương thức newton raphson:

để giải quyết: f(Y)= Yexp(Y) - z = 0.

bạn sẽ tìm thấy Y = W(z) với phương pháp

Bạn sẽ phải tự mình tìm và triển khai thực hiện trong phương thức java.

Hy vọng nó giúp

dưới đây minh họa từ wikipedia của phương pháp này:

enter image description here

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