Tôi cần giải quyết các vấn đề giảm thiểu phi tuyến (ít nhất là ô vuông còn lại của N chưa biết) trong chương trình Java của tôi. Cách thông thường để giải quyết chúng là thuật toán Levenberg-Marquardt. Tôi có một vài câu hỏiGiải phương trình phi tuyến số
Có ai có kinh nghiệm về các triển khai LM khác nhau không? Có tồn tại hơi hương vị khác nhau của LM, và tôi đã nghe nói rằng việc thực hiện chính xác của thuật toán có ảnh hưởng lớn đến sự ổn định số của nó. Chức năng của tôi khá tốt, vì vậy điều này có thể không phải là một vấn đề, nhưng tất nhiên tôi muốn chọn một trong những lựa chọn thay thế tốt hơn. Dưới đây là một số lựa chọn thay thế tôi đã tìm thấy:
FPL Statistics Group's Nonlinear Optimization Java Package. Điều này bao gồm một bản dịch Java của các thói quen Fortran MINPACK cổ điển.
JLAPACK, một bản dịch khác của Fortran.
Một số triển khai Python. Pure Python sẽ ổn, vì nó có thể được biên dịch sang Java với jythonc.
Có bất kỳ chẩn đoán thường được sử dụng nào để thực hiện dự đoán ban đầu mà LM yêu cầu không? Trong ứng dụng của tôi, tôi cần phải thiết lập một số ràng buộc về giải pháp, nhưng may mắn là chúng đơn giản: tôi chỉ yêu cầu các giải pháp (để trở thành giải pháp vật lý) không mang tính âm tính. Các giải pháp tiêu cực hơi là kết quả đo lường sự thiếu chính xác trong dữ liệu và rõ ràng là bằng không. Tôi đã suy nghĩ để sử dụng "thường xuyên" LM nhưng lặp lại để nếu một số ẩn số trở thành tiêu cực, tôi đặt nó bằng không và giải quyết phần còn lại từ đó. Nhà toán học thực sự có thể sẽ cười tôi, nhưng bạn có nghĩ rằng điều này có thể làm việc?
Cảm ơn mọi ý kiến!
Cập nhật: Đây không phải là khoa học tên lửa, số lượng tham số để giải quyết (N) tối đa là 5 và tập dữ liệu đủ lớn để giải quyết khả thi, vì vậy tôi tin rằng Java khá hiệu quả. điều này. Và tôi tin rằng vấn đề này đã được giải quyết nhiều lần bởi các nhà toán học được áp dụng thông minh, vì vậy tôi chỉ tìm kiếm một số giải pháp sẵn sàng hơn là tự nấu ăn của mình. Ví dụ. Scipy.optimize.minpack.leastsq có lẽ sẽ ổn nếu nó là tinh khiết Python ..
Bạn có cho rằng nhiều thuật toán phi tuyến chỉ hoạt động nếu được khởi tạo đúng cách? Và khởi tạo đó thường xuất phát từ một thuật toán tuyến tính đơn giản hơn (thường tối ưu hóa các số liệu tối ưu)? – Vlad