NEC-LIST: Condition number in MOM.

From: Steve Inge <sringe_at_email.domain.hidden>
Date: Tue, 26 May 1998 11:51:36

In discussion with Ed Miller at ACES98, I mentioned that an estimate
of the condition number should be provided to the MOM user. It
doesn't need to be a good estimate to be useful (so what if its off by
an octave?).

The simplest technique I know, I have inserted in Phillip Warrens 1974
WRSMOM code.

1. Find the row sum of one row the filled matrix. I use row one, no
good reason. I use SUM( |Re(z(i))| + |Im(z(i))| ), i=1,2,...,n .

2. Factor the matrix (LU etc.)

3. Create a RHS vector (1,0,0,0,...,0) (the excitation vector array
hasn't been used yet, so is available).

4. Solve this by back-substitution. This is one row of the inverse
matrix. (this is the main extra cost.)

5. Find the row sum of the result vector, using the same method as in
1.

6. The condition number is SUM1 x SUM2.

7. Now do real excitation,and solve.

Its all from Forsythe, Malcolm & Moler, "Computer Methods for Mathematical
Computations", Pren. Hall, 1977.

FWIW, my old code:-
--------------------------------------------------------------------------
C CONDITION NUMBER VARIABLES
      REAL ROWN1,ROWN2,CONDNO

... fill matrix here

C FIND ROW NORM OF COL 1.
      ROWN1=0.
         DO 151 N=1,NN2
151 ROWN1=ROWN1 + ABS(REAL(ZIMPD(N))) + ABS(AIMAG(ZIMPD(N)))
C15 CALL LINEQ
      CALL ES01C(NN2,ZIMPD,ZIMPD,IPS,SCALES) ! factor matrix ZIMPD.
C FIND CONDITION NUMBER
      WRITE(*,*) 'Finding Condition Number ...'
      EXX(1)=(1.,0.)
         DO 152 N=2,NN2
152 EXX(N)=(0.,0.)
      CALL ES02C(NN2,ZIMPD,EXX,ZV,IPS) ! solve [ZIMPD]^-1 [zv] = [EXX]
C FIND ROW NORM OF COL 1 OF INVERSE, NOW IN ZV.
      ROWN2=0.
         DO 153 N=1,NN2
153 ROWN2=ROWN2 + ABS(REAL(ZV(N))) + ABS(AIMAG(ZV(N)))
      CONDNO=ROWN1*ROWN2
      WRITE(6,1510) CONDNO
      WRITE(*,1510) CONDNO
1510 FORMAT(' MATRIX CONDITION NUMBER =',G12.4)
      IF(CONDNO .GT. 999.) WRITE(6,1511)
      IF(CONDNO .GT. 999.) WRITE(*,1511)
1511 FORMAT(/10(' *'),' WARNING - CONDITION NUMBER GREATER THAN 1000.'/
     1 10(' *'),' RESULT ACCURACY DOUBTFUL.'/)

Thanks to Ed for a stimulating discussion. I'm sure this is all old
stuff to you, but it I'm sending it to NEC-LIST for others.

73,

sringe_at_actrix.gen.nz = Steve Inge, ZL2BDV. Engineering Analyst,
Broadcast Communications Ltd, PO Box 98, Wellington, New Zealand.
Home=9 High St, Island Bay, Wellington, New Zealand.
Received on Wed May 27 1998 - 09:42:17 EDT

This archive was generated by hypermail 2.2.0 : Sat Oct 02 2010 - 00:10:38 EDT