Re: [eigen] Fast method for computing Gramian Matrix |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] Fast method for computing Gramian Matrix
- From: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>
- Date: Fri, 30 Mar 2012 23:50:44 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type:content-transfer-encoding; bh=dfSjiV5IkUVOc0FWqqBI3tJkBuaOJw5OTvuOWZLTZ1o=; b=XDjErS4lC5BUoV37ZBce3Xy0I+ntJr06Q9ZpWVbJJMFvakCL+Tt8JLcC7l64awJsRK lnptfsSyPTGAGa59uurffjbuj2gzgMTZJt1DvBlwasAh3SgLbHqRwaZV2FsBSDkdu520 XaqTPjoDqbW82Ux5BR4cUiQUqGFsBMcM7tOpaQIk1wjFauiBOmuawMdNLcilR7Od+UPN XSi5dGtwdoaMpVQKh4pJUQ8IaO9VwOG2HNZuB0bdx6YJq4FvHfWZ5vN/yIPLfnI/aZu6 Dpg5tqAIfiGazMswGdF66X+OWLyzPHRiMKab+jzTD9qUXjvhlvhw4NMD8hOsdCbwyrZn 6yxw==
SelfAdjointEigenSolver uses the lower triangular part only. Unlike LLT
or LDLT, it is not possible to choose to use the upper part.
gael
On Fri, Mar 30, 2012 at 11:20 PM, Jim Bosch <talljimbo@xxxxxxxxx> wrote:
> Is it necessary to do something like this to form the full dense matrix when
> using SelfAdjointEigenSolver? I noticed that it doesn't have a UpLo
> template parameter to tell it which triangle to use.
>
> Thanks!
>
> Jim
>
>
>
>
> On 03/29/2012 06:55 PM, Gael Guennebaud wrote:
>>
>> with a copy:
>>
>> C = B.selfadjointView<Upper>();
>>
>> or in-place using triangularView as a writing mask:
>>
>> B.triangularView<StrictlyLower>() = B.adjoint();
>>
>> cheers,
>> gael
>>
>> On Fri, Mar 30, 2012 at 12:18 AM, Mark Borgerding<mark@xxxxxxxxxxxxxx>
>> wrote:
>>>
>>> On 03/29/2012 01:18 AM, Douglas Bates wrote:
>>>>
>>>>
>>>> On Thu, Mar 29, 2012 at 3:50 AM, Mark Borgerding<mark@xxxxxxxxxxxxxx>
>>>> wrote:
>>>>>
>>>>>
>>>>> (sorry for hitting send too soon)
>>>>>
>>>>> http://en.wikipedia.org/wiki/Gramian_matrix
>>>>>
>>>>> What is the fastest way to compute MM' when M is wide?
>>>>> The diagonal elements are the norm-squared of the rows of M. The result
>>>>> is
>>>>> Hermitian.
>>>>>
>>>>> Is there an optimized method in Eigen or otherwise?
>>>>
>>>>
>>>> I have used the rankUpdate method for a selfadjoint view to calculate
>>>> this. I assume that it is an efficient way to calculate the result
>>>> but I haven't done any timings.
>>>>
>>>>
>>>> MatrixXcd MMt(M.rows(), M.rows();
>>>> MMt.setZero().selfadjointView<Eigen::Upper>().rankUpdate(M);
>>>>
>>> Thanks. That cut the time to about 80% of the full matrix product..
>>>
>>> Is there an elegant way to recover the full, square self-adjoint matrix
>>> from
>>> a SelfAdjointView ?
>>> I've been adding the SA view to its own adjoint and then subtracting the
>>> original diagonal.
>>>
>>>
>>>
>>
>>
>
>
>