[petsc-users] Finding determinant and inverse matrix

Barry Smith bsmith at mcs.anl.gov
Sun Aug 8 13:08:34 CDT 2010


   The source code for forming the factorization and doing triangular solves is in src/mat/impls/aij/seq  There are a couple of different data structures and hence algorithms depending on the use. You need to dig around in the code for details.  Only the diagonal is inverted because that is the only one that needs to be inverted.

   Barry



On Aug 8, 2010, at 12:12 PM, Немања Илић (Nemanja Ilic) wrote:

> Hello,
> 
> Thank you for your reply, it was of great help. I managed to get determinant correctly. Could you direct me to the algorithm for producing upper/lower triangular matrices from petsc's LUFactor result? Are values in all columns inverted or just on the diagonal? What exactly is the result of LUFactor?
> 
> Thank you,
> Regards,
> Nemanja
> 
> 
> On Friday 06 August 2010 19:46:38 Barry Smith wrote:
>> 
>>  Sorry for the confusion. PETSc stores the inverse of the diagonal entries (so in the triangular solves it does not need to do divides). Note that 1/26 = .0384615 so all you need to do is invert your result and you'll get the determinant.
>> 
>>   Barry
>> 
>> On Aug 6, 2010, at 9:00 AM, Немања Илић (Nemanja Ilic) wrote:
>> 
>>> On Friday 06 August 2010 12:55:19 Немања Илић (Nemanja Ilic) wrote:
>>>> Hello,
>>>> 
>>>> For the matrix:		 2  -2  0
>>>> 				-1   5  1
>>>> 				 3   4  5
>>>> I get determinant = 0.0384615. The correct answer is 26.
>>>> Maybe I am doing LU Factorization wrong?
>>>> This is how I do LU Factoring:
>>>> 	ierr = MatGetOrdering(Ap,  MATORDERING_1WD,  &perm,  &iperm); CHKERRQ(ierr);
>>>> 	ierr = MatFactorInfoInitialize(&info); CHKERRQ(ierr);
>>>> 	ierr = MatLUFactor(Ap, perm, iperm, &info); CHKERRQ(ierr);
>>>> 
>>>> This is the correct LU upper factotrization:  3.000  4.000  5.000
>>>> 								 0.000  6.333  2.667
>>>> 								 0.000  0.000 -1.368
>>>> This is what I get:	row 0: (0, 0.5)  (1, -2)  (2, 0)
>>>> 				row 1: (0, -0.5)  (1, 0.25)  (2, 1)
>>>> 				row 2: (0, 1.5)  (1, 1.75)  (2, 0.307692)
>>>> 
>>>> Thank you,
>>>> regards,
>>>> Nemanja
>>>> 
>>>> 
>>>> On Wednesday 04 August 2010 23:19:37 you wrote:
>>>>> On Wed, Aug 4, 2010 at 12:18 PM, Немања Илић (Nemanja Ilic) <
>>>>> nemanja.ilic.81 at gmail.com> wrote:
>>>>> 
>>>>>> Hello,
>>>>>> 
>>>>>> Thank you for you previous help. I wrote the code for calculating matrix
>>>>>> determinant and inverse matrix and they don't break anymore. Still I have
>>>>>> problems. I try to find determinant in the following way: First get LU
>>>>>> factor of a matrix and then multiply it's diagonal elements. I don't get
>>>>>> correct results. Could you tell me wheather the problem
>>>>> 
>>>>> 
>>>>> That description does not help. What do you get? What is the correct answer?
>>>>> Did you try it on a small
>>>>> problem that you can factor by hand?
>>>>> 
>>>>> 
>>>>>> is maybe in info structure? What information do you need to be able to help
>>>>>> me? I find the inverse matrix in the following way: I create linear problem
>>>>>> A * X = B where A is the input matrix, X is the inverse matrix, and B is
>>>>>> identity matrix. I solve it using MatMatSolve. Could you possibly help me
>>>>>> and what info do you need?
>>>>>> 
>>>>> 
>>>>> That should work.
>>>>> 
>>>>>  Matt
>>>>> 
>>>>> 
>>>>>> Thank you in advance,
>>>>>> Best regards,
>>>>>> Nemanja
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
> 
> 



More information about the petsc-users mailing list