       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)

```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:= InputForm[{nmax,vals} = NMaximize[{obj, constraints}, qvars] ]
> Out//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:= InputForm[Q =
>    Transpose[First at #.Last@#]&[SingularValueDecomposition@N[A]]]
> Out//InputForm=
> {{-0.3105080321836895, 0.9492864199199935, -0.04939691189633988},
>   {-0.15290065052613921, 0.0014106929655585687, 0.988240558272145},
>   {0.9381930254580325, 0.3144094510361273, 0.14470847964464584}}
>
> In:= max1 = obj /. vals
> Out= 18.6043
>
> In:= max2 = Tr[A.Q]
> Out= 17.3108
>
> After playing with a bunch of permutations of this, I think this next
> one gives the right result.
>
> In:= InputForm[Q2 =
>    (Last at #.Transpose[First@#])&[SingularValueDecomposition@N[A]]]
> Out//InputForm=
> {{-0.01205441069899682, 0.9577474301383769, -0.2873578800834159},
>   {0.023331710012777895, 0.2875699237830144, 0.9574754149550322},
>   {0.9996551017678946, 0.004837251158067629, -0.02581237127143146}}
>
> In:= max2 = Tr[A.Q2]
> Out= 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