public class AbelianFunction extends Object
Let a,b,c,d ∈ Cg with
a+b=c+d mod 2πiZg, then
θ(z+a|B)·θ(z+b|B)
f(z) =
θ(z+c|B)·θ(z+d|B)
defines an Abelian function, which is represented by this class.
To evaluate it you only need to envoke applyTo(ComplexVector) or
#applyTo(ComplexVector,Field.Complex). Below the implementation of the last:
public void applyTo( ComplexVector z, Field.Complex result ) {
zPlusA.assignPlus( z, a );
zPlusB.assignPlus( z, b );
zPlusC.assignPlus( z, c );
zPlusD.assignPlus( z, d );
theta.theta( zPlusA, factorOfZPlusA, thetaSumOfZPlusA );
theta.theta( zPlusB, factorOfZPlusB, thetaSumOfZPlusB );
theta.theta( zPlusC, factorOfZPlusC, thetaSumOfZPlusC );
theta.theta( zPlusD, factorOfZPlusD, thetaSumOfZPlusD );
factor.assign( factorOfZPlusA );
factor.assignPlus( factorOfZPlusB );
factor.assignMinus( factorOfZPlusC );
factor.assignMinus( factorOfZPlusD );
expOfFactor.assignExp( factor );
result.assign( expOfFactor );
result.assignTimes( thetaSumOfZPlusA );
result.assignTimes( thetaSumOfZPlusB );
result.assignDivide( thetaSumOfZPlusC );
result.assignDivide( thetaSumOfZPlusD );
}
AbelianFunction is executable. Its main(String[]) performs
a periodicity test by envoking
testPeriodicity(ComplexVector,boolean) on a 100 different random arguments.
Theta| Constructor and Description |
|---|
AbelianFunction(de.jtem.blas.ComplexMatrix periodMatrix,
de.jtem.blas.ComplexVector a,
de.jtem.blas.ComplexVector b,
de.jtem.blas.ComplexVector c,
de.jtem.blas.ComplexVector d,
double tol)
Creates Abelean function with prescribed
periodMatrix,
vectors a,b,c,d and, error tolerance tol. |
| Modifier and Type | Method and Description |
|---|---|
de.jtem.mfc.field.Complex |
applyTo(de.jtem.blas.ComplexVector z)
Applies Abelian function to
z. |
void |
applyTo(de.jtem.blas.ComplexVector z,
de.jtem.mfc.field.Complex result)
Applies Abelian function to
z. |
double |
getErrorOfLastEvaluation()
Returns error of last Evaluation.
|
static void |
main(String[] argv)
Performs a periodicity test for a 2-dimensional example by envoking
testPeriodicity(ComplexVector,boolean) on a 100 different random arguments. |
void |
testPeriodicity(de.jtem.blas.ComplexVector Z,
boolean verbose)
Performs periodicity test.
|
public AbelianFunction(de.jtem.blas.ComplexMatrix periodMatrix,
de.jtem.blas.ComplexVector a,
de.jtem.blas.ComplexVector b,
de.jtem.blas.ComplexVector c,
de.jtem.blas.ComplexVector d,
double tol)
periodMatrix,
vectors a,b,c,d and, error tolerance tol.
The vectors a,b,c,d e Cg have to fill:
a+b=c+d mod 2πiZg
Unfortunately tol is only the error tolerance for the four
individual theta sums. Use getErrorOfLastEvaluation() to recieve
an error estimate for the Abelian function, which depends on the argument.
See the description of Theta for a more detailed discussion.
periodMatrix - symmetric complex matrix with negative definite real parta - vector compatible with periodMatrixb - vector compatible with periodMatrixc - vector compatible with periodMatrixd - vector compatible with periodMatrixtol - positive numberpublic de.jtem.mfc.field.Complex applyTo(de.jtem.blas.ComplexVector z)
z.z - agrument vectorzpublic void applyTo(de.jtem.blas.ComplexVector z,
de.jtem.mfc.field.Complex result)
z.z - agrument vectorresult - value of Abelian function at zpublic double getErrorOfLastEvaluation()
public static void main(String[] argv)
testPeriodicity(ComplexVector,boolean) on a 100 different random arguments.argv - has no effectpublic void testPeriodicity(de.jtem.blas.ComplexVector Z,
boolean verbose)
2g vectors of the basis
of the lattice to the argument Z and checks if all these
results coincide.Z - argument vectorverbose - controles wheter the check is done verbose or silent.