MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Problem with Minimize function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg71940] Re: [mg71925] Re: Problem with Minimize function
  • From: Ray Koopman <koopman at sfu.ca>
  • Date: Tue, 5 Dec 2006 06:04:38 -0500 (EST)
  • Reply-to: koopman at sfu.ca

On Mon, 04 Dec 2006 09:01:39 -0600 danl at wolfram.com wrote:
> Ray Koopman wrote:
>> amitsoni.1984 at gmail.com wrote:
>> 
>>> I am using following program:
>>> A = {{2, 4, 5}, {6, 7, 3}, {3, 7, 3}}
>>> Minimize[-Abs[
>>>      A[[1, 1]]*q11 + A[[1, 2]]*q21 + A[[1, 3]]*q31 + A[[2, 1]]*q12 +
>>>      A[[2, 2]]*q22 + A[[2, 3]]*q32 + A[[3, 1]]*q13 + A[[3, 2]]*q23 +
>>>      A[[3, 3]]*q33],
>>>  q11^2 + q12^2 + q13^2 == 1 && q11*q21 + q12*q22 + q13*q23 == 0 &&
>>>  q11*q31 + q12*q32 + q13*q33 == 0 && q21^2 + q22^2 + q23^2 == 1 &&
>>>  q21*q31 + q22*q32 + q23*q33 == 0 && q31^2 + q32^2 + q33^2 == 1,
>>> {q11, q12, q13, q21, q22, q23, q31, q32, q33}]
>>>
>>> I tried using NMinimize function and it worked fine with it. But I
>>> could not figure out what is the difference between these two
>>> functions(Minimize and NMinimize) from their definitions on the
>>> mathematica website.
>>>
>>> Thanks
>>> Amit
>> 
>> 
>> In matrix terms, you're maximizing Tr[A.Q], subject to
>> Q.Transpose@Q == I. The -Abs wrapper in an unnecessary complication
>> that makes -Q a solution if Q is a solution.
>> You want Q = Transpose[First at #.Last@#]&[SingluarValueDecomposition@A]
> 
> Seems a bit off.
> 
> A = {{2,4,5}, {6,7,3}, {3,7,3}};
> qmat = Array[q, {3,3}];
> qvars = Flatten[qmat];
> obj = Tr[A.qmat];
> 
> In[16]:= InputForm[{nmax,vals} = NMaximize[{obj, constraints}, qvars] ]
> Out[16]//InputForm=
> {18.604296495558675, {q[1, 1] -> -0.012055111538764663,
>    q[1, 2] -> 0.9577478811414728, q[1, 3] -> -0.287356348495888,
>    q[2, 1] -> 0.02333138205014669, q[2, 2] -> 0.2875684102368304,
>    q[2, 3] -> 0.9574758780624395, q[3, 1] -> 0.9996551012738198,
>    q[3, 2] -> 0.004838058445076696, q[3, 3] -> -0.02581225024159173}}
> 
> In[17]:= InputForm[Q =
>    Transpose[First at #.Last@#]&[SingularValueDecomposition@N[A]]]
> Out[17]//InputForm=
> {{-0.3105080321836895, 0.9492864199199935, -0.04939691189633988},
>   {-0.15290065052613921, 0.0014106929655585687, 0.988240558272145},
>   {0.9381930254580325, 0.3144094510361273, 0.14470847964464584}}
> 
> In[18]:= max1 = obj /. vals
> Out[18]= 18.6043
> 
> In[19]:= max2 = Tr[A.Q]
> Out[19]= 17.3108
> 
> After playing with a bunch of permutations of this, I think this next 
> one gives the right result.
> 
> In[34]:= InputForm[Q2 =
>    (Last at #.Transpose[First@#])&[SingularValueDecomposition@N[A]]]
> Out[34]//InputForm=
> {{-0.01205441069899682, 0.9577474301383769, -0.2873578800834159},
>   {0.023331710012777895, 0.2875699237830144, 0.9574754149550322},
>   {0.9996551017678946, 0.004837251158067629, -0.02581237127143146}}
> 
> In[35]:= max2 = Tr[A.Q2]
> Out[35]= 18.6043
> 
> Daniel

You're right. If the svd of A is UDV' then Q = VU'. I was treating 
the last result from SingularValueDecomposition as if it were V', 
when in fact it is V. (I also wrote "I" where I should have written 
IdentityMatrix@3.)


  • Prev by Date: Re: Re: NETLink:
  • Next by Date: Mathematica question
  • Previous by thread: Re: Problem with Minimize function
  • Next by thread: Re: funny question