У меня есть несколько сложный алгоритм, который требует подгонки квадрики к набору точек. Эта квадрика задается ее параметризацией (u, v, f(u,v))
, где f(u,v) = au^2+bv^2+cuv+du+ev+f
,
Коэффициенты f(u,v)
Функция должна быть найдена, так как у меня есть набор из 6 ограничений, которым должна подчиняться эта функция. Проблема в том, что этот набор ограничений, хотя и дает такую проблему, как A*x = b
, не совсем хорошо ведет себя, чтобы гарантировать уникальное решение.
Таким образом, чтобы сократить это, я хотел бы использовать возможности alglib, чтобы как-то определить A
псевдообратный или непосредственно найти наиболее подходящий для x
вектор.
Помимо вычисления SVD, в этой библиотеке реализован более прямой алгоритм, который может решить систему в смысле наименьших квадратов (опять же, кроме SVD или использования наивного inv(transpose(A)*A)*transpose(A)*b
формула для общих задач наименьших квадратов, где A не является квадратной матрицей?
Нашел ответ через некоторый тщательный просмотр документации:
rmatrixsolvels( A, noRows, noCols, b, singularValueThreshold, info, solverReport, x)
В документации говорится, что пороговое значение единственного значения является порогом ограничения, которое устанавливает любое сингулярное значение из матрицы S разложения SVD в 0
если это значение ниже его. Таким образом, это должен быть скаляр между 0 и 1.
Надеюсь, это поможет кому-то еще.
Других решений пока нет …