Re: Overdetermined Matrix Equation Subject to Constraints
- To: mathgroup at smc.vnet.net
 - Subject: [mg122410] Re: Overdetermined Matrix Equation Subject to Constraints
 - From: Ray Koopman <koopman at sfu.ca>
 - Date: Thu, 27 Oct 2011 06:34:24 -0400 (EDT)
 - Delivered-to: l-mathgroup@mail-archive0.wolfram.com
 - References: <j89uud$75$1@smc.vnet.net>
 
On Oct 26, 2:43 pm, Meaghan <freecaptive6... at gmail.com> wrote:
> Hi all,
>
> I have an overdetermined matrix equation that I have been solving with
> LeastSquares[].  However, LeastSquares[] gives me solutions that don't
> fit my constraints (that all components of x >= 0).
> I know that Minimize[] and NMinimize[] minimize equations subject to
> constraints, but I cannot determine if they will minimize a *matrix*
> equation.
> Any ideas?
>
> Here is some sample code:
>
> referenceData = {{1.022299535`, 1.01884186`}, {0.15627907`,
>     0.716793488`}, {0.014162791`, 0.087627628`}};
> testData = {0.546942055`, -0.126062557`, -0.338173002`};
> Print["LeastSquares soln: ", LeastSquares[referenceData, testData]];
>
> unknown = {x, y};
> Print["Minimize soln: ",
>   Minimize[{referenceData.unknown - testData,
>     unknown[[1]] >= 0 && unknown[[2]] >= 0}, unknown]];
You need to minimize the sum of squares:
Clear[x,y]; unknown = {x, y};
Minimize[{#.#&[referenceData.unknown - testData],
          unknown[[1]] >= 0 && unknown[[2]] >= 0}, unknown] //Chop
{0.16218, {x->0.499802, y->0}}
This does the same thing but is more general:
Clear[x]; unknown = Array[x, Length@First@referenceData];
Minimize[{#.#&[referenceData.unknown - testData],
          Thread[unknown >= 0]}, unknown] //Chop
{0.16218, {x[1] -> 0.499802, x[2] -> 0}}