58 lines
2.4 KiB
Plaintext
58 lines
2.4 KiB
Plaintext
The method is used for simulation with a time-and-voltage-dependent
|
|
current source. But it is simpler to describe with a linear driver.
|
|
Suppose we are given:
|
|
voltage nodes 1,..n initialized to V[j]=1.0
|
|
a resistor network described by a conductance matrix G[j,k]
|
|
a drive resistance from node 1 to ground, Rdrv
|
|
capacitance of the nodes, c[j], also written as a
|
|
diagonal matrix C[j,k]
|
|
The node voltages will fall to zero with time.
|
|
Matrix equation:
|
|
GV+CdV/dt = -(V[0]/Rdrv)e0
|
|
where e0 is the unit vector (1,0,0,..0).
|
|
Let G' be the matrix formed by taking G and adding 1/Rdrv in the
|
|
[0,0] position. Then we are solving G'V + CdV/dt = 0.
|
|
Let R be the inverse of G'. (In implementation, R may not actually
|
|
be formed as a matrix, instead some method of producing RV given V).
|
|
The exact solution would diagonalize sqrt(C) R sqrt(C).
|
|
|
|
The Arnoldi method takes a matrix M and a vector of interest V, and
|
|
considers the subspace of vectors near V in terms of the action of M,
|
|
that is, the space spanned by V, MV, MMV, etc, for a small number of
|
|
powers. We do this here, but instead of finding the part of MV orthogonal
|
|
to V, we find the part of RCV that is C-orthogonal of V. We use C
|
|
as the metric, so the basis vectors U0, U1, U2 that we generate satisfy
|
|
Ui.CUj = (i==j?1:0)
|
|
|
|
U0 = (1,1,..1)/sqrt(sum C)
|
|
representing the initial value of V, V[j] = sqrt(n)U0[j] at t=0.
|
|
sum(C) = C[0]+..C[n-1], so U0.C U0 = 1.
|
|
Let:
|
|
W = R C U0
|
|
d0 = U0.C W
|
|
W' = W - d0 U0
|
|
e0 = sqrt(W'.C W')
|
|
U1 = W'/e0
|
|
Then: U0.C U0 = U1.C U1 = 1, U0.C U1 = 0, and
|
|
R C U0 = d0 U0 + e0 U1
|
|
Next step:
|
|
W = R C U1
|
|
d1 = U1.C W
|
|
W' = W - d1 U1 - e0 U0
|
|
e1 = sqrt(W'.C W')
|
|
U2 = W'/e1
|
|
and we have U2.C U2 = 1, U2.C U1 = U2.C U0 = 0, and
|
|
RC U1 = e0 U0 + d1 U1 + e1 U2
|
|
In this way, RC, which in nonsymmetric in the original basis,
|
|
becomes a symmetric tridiagonal matrix in the U0,U1,.. basis.
|
|
We stop at, say, U3. The resulting 4x4 tridiagonal matrix is
|
|
positive definite, because it is the projection of sqrt(C)R sqrt(C)
|
|
to a subspace. So the eigenvalues of this small tridiagonal matrix
|
|
are guaranteed to be positive. This is the advantage over AWE.
|
|
|
|
In the actual implementation, I remember there was some way of
|
|
isolating the node 0 where drive resistance is attached, so that the
|
|
tridiagonal matrix (d,e) can be recalculated without knowing Rdrv,
|
|
and then just the first d0,e0 updated when the Rdrv is known, or
|
|
when Rdrv changes in a simulation.
|