CGAL có vẻ tuyệt vời cho lập trình bậc hai. Thậm chí còn có a manual.
// by default, we have a nonnegative QP with Ax <= b
Program qp (CGAL::SMALLER, true, 0, false, 0);
// now set the non-default entries:
const int X = 0;
const int Y = 1;
qp.set_a(X, 0, 1); qp.set_a(Y, 0, 1); qp.set_b(0, 7); // x + y <= 7
qp.set_a(X, 1, -1); qp.set_a(Y, 1, 2); qp.set_b(1, 4); // -x + 2y <= 4
qp.set_u(Y, true, 4); // y <= 4
qp.set_d(X, X, 2); qp.set_d (Y, Y, 8); // !!specify 2D!! x^2 + 4 y^2
qp.set_c(Y, -32); // -32y
qp.set_c0(64); // +64
// solve the program, using ET as the exact type
Solution s = CGAL::solve_quadratic_program(qp, ET());
assert (s.solves_quadratic_program(qp));
Mã từ the first example.
Xin lỗi vì đã nói rõ ràng nhưng tôi phải kiểm tra Wikipedia để tìm hiểu lập trình bậc hai là gì và tôi thấy nó có chứa tham chiếu đến một vài triển khai, bạn đã kiểm tra chúng chưa? Hoặc có thể http://hqp.sourceforge.net/index.html hoặc http://www.gnu.org/s/gsl/ sẽ trợ giúp? – rve
@rve Tôi kiểm tra gsl, nó không có chức năng giải trình bậc hai. Tôi cũng đã kiểm tra wiki, hầu hết chúng không được viết bằng C/C++ hoặc rất khó để thiết lập .. Tôi sẽ kiểm tra xem nó có hoạt động không, nhờ –
Làm thế nào một ma trận có thể không áp dụng cho phân tích Cholesky? Bất kỳ ma trận dương-bán kết đối xứng nào đều có thể áp dụng (và phân tách mất ~ n^3/3 FLOP). Biểu thức $ x^TQx $ luôn có thể được viết lại với $ Q $ là đối xứng. Bạn có nghĩa là, rằng nó không phải là tích cực-semidefinite? – fiktor