Least squares (scipy.linalg.lstsq
) is guaranteed to converge. In fact, there is a closed form analytical solution (given by (A^T A)^-1 A^Tb
(where ^T
is matrix transpose and ^-1
is matrix inversion)
The standard optimization problem, however, is not generally solvable - we are not guaranteed to find a minimizing value. However, for the given equation, find some a, b, c
such that z = a*x + b*y + c
, we have a linear optimization problem (the constraints and objective are linear in the variables that we're trying to optimize for). Linear optimization problems are generally solvable, so scipy.optimize.minimize
should converge to the optimal value.
Note: this is linear in our constraints even if we do z = a*x + b*y + d*x^2 + e*y^2 + f
-- we don't have to restrict ourselves to a linear space of (x,y)
, since we will have these points (x, y, x^2, y^2)
already. To our algorithm, these just look like points in the matrix A
. So we can actually get a higher order polynomial using least squares!
A brief aside: In reality, all of the solvers which don't use an exact analytical solution generally stop within some acceptable range of the actual answer, so it is rarely the case that we get the exact solution, but it tends to be so close that we accept it as exact in practice. Additionally, even least-squares solvers rarely use the analytical solution and instead resort to something quicker like Newton's Method.
If you were to change the optimization problem, this would not be true. There are certain classes of problems for which we can generally find an optimal value (the largest class of these are called convex optimization problems -- although there are many non-convex problems which we can find an optimal value for under certain conditions).
If you're interested in learning more, take a look at Convex Optimization by Boyd and Vandenberghe. The first chapter doesn't require much mathematical background and it overviews the general optimization problem and how it relates to solvable optimization problems like linear and convex programming.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…