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