public class ThetaWithChar extends Object implements Serializable, Cloneable
θ[α,β](z|B) = exp( ½ ( z + πiβ + ¼Bα , α ) )
θ( z + πiβ + ½B&alpha |B)
,
z∈Cg,
α,β∈Zg
and
B∈Cgxg
where B
is symmetric and has strictly negative definite real part.
The pair [α,β]
is called characteristic. As follows
from the definition of the Riemann theta function with characteristics,
that there are only 4dim
different characteristics which result
in different Riemann theta functions. These can be divided into odd and even ones. A
Characteristic is called even, iff
( α,β ) = 0 mod 2
,
2dim-1( 2dim-1 + 1 )
even and
2dim-1( 2dim-1 - 1 )
odd characteristics.
Each instance of ThetaWithChar
is associated to an
instance of Theta
. These associated Riemann theta function
can be shared by different Riemann theta functions with characteristics.
Suppose you want to evaluate
θ[&alpha,&beta](z+a|B)
θ[&gamma,&delta](z+b|B) .
The most efficient way to implement this is to create two instances of
ThetaWithChar
sharing one instance of Theta
:
Theta associatedTheta = new Theta( B, tol );
ThetaWithChar thetaAlphaBeta = new ThetaWithChar( associatedTheta );
ThetaWithChar thetaGammaDelta = new ThetaWithChar( associatedTheta );
thetaAlphaBeta .setAlpha( alpha );
thetaAlphaBeta .setBeta( beta );
thetaGammaDelta.setAlpha( gamma );
thetaGammaDelta.setBeta( delta );
The benefit of this is that you only have to initialze one Riemann theta function, and
the initialization can be several orders more "expensive" than its evaluation.
But be aware that the three objects thetaAlphaBeta, thetaGammaDelta
, and
associatedTheta
are dependend.
Theta
,
Serialized FormConstructor and Description |
---|
ThetaWithChar(de.jtem.blas.ComplexMatrix periodMatrix)
Creates a Riemann theta function with characteristics zero
and with prescribed
periodMatrix . |
ThetaWithChar(de.jtem.blas.ComplexMatrix periodMatrix,
double tol)
Creates a Riemann theta function with characteristics zero
and with prescribed
periodMatrix
and error tolerance tol . |
ThetaWithChar(de.jtem.blas.ComplexMatrix periodMatrix,
double tol,
boolean performSiegelReduction)
Creates a Riemann theta function with characteristics zero
and with prescribed
periodMatrix
and error tolerance tol . |
ThetaWithChar(de.jtem.blas.ComplexMatrix periodMatrix,
double tol,
boolean performSiegelReduction,
boolean useFillFactorError)
Creates a Riemann theta function with characteristics zero and
with prescribed
periodMatrix
and error tolerance tol . |
ThetaWithChar(de.jtem.blas.ComplexMatrix periodMatrix,
double tol,
boolean performSiegelReduction,
boolean useFillFactorError,
boolean uniformApproximation)
Creates a Riemann theta function with characteristics zero and
with prescribed
periodMatrix
and error tolerance tol . |
ThetaWithChar(Theta theta)
Creates a Riemann theta function with characteristics zero which
is associated to
theta . |
ThetaWithChar(ThetaWithChar thetaWithChar)
Creates a Riemann theta function with characteristics zero which
shares with
thetaWithChar its associated Riemann theta function. |
Modifier and Type | Method and Description |
---|---|
de.jtem.mfc.field.Complex |
ddLogTheta(de.jtem.blas.ComplexVector Z,
de.jtem.blas.ComplexVector X,
de.jtem.blas.ComplexVector Y)
Evaluates the first logarythmic derivative of the Riemann theta funciton
in the
X and Y direction at Z . |
void |
ddLogTheta(de.jtem.blas.ComplexVector Z,
de.jtem.blas.ComplexVector X,
de.jtem.blas.ComplexVector Y,
de.jtem.mfc.field.Complex DXDYLogThetaAtZ)
Evaluates the second logarythmic derivative of the Riemann theta funciton
in the
X and the Y direction at Z . |
de.jtem.mfc.field.Complex |
ddTheta(de.jtem.blas.ComplexVector Z,
de.jtem.blas.ComplexVector X,
de.jtem.blas.ComplexVector Y)
Evaluates the Riemann theta function, its first derivative
in the
X and Y direction and,
its second derivative into the same direction at Z . |
void |
ddTheta(de.jtem.blas.ComplexVector Z,
de.jtem.blas.ComplexVector X,
de.jtem.blas.ComplexVector Y,
de.jtem.mfc.field.Complex thetaAtZ,
de.jtem.mfc.field.Complex DXThetaAtZ,
de.jtem.mfc.field.Complex DYThetaAtZ,
de.jtem.mfc.field.Complex DXDYThetaAtZ)
Evaluates the Riemann theta function, its first derivative
in the
X and Y direction and,
its second derivative into the same direction at Z . |
void |
ddTheta(de.jtem.blas.ComplexVector Z,
de.jtem.blas.ComplexVector X,
de.jtem.blas.ComplexVector Y,
de.jtem.mfc.field.Complex factor,
de.jtem.mfc.field.Complex thetaSumZ,
de.jtem.mfc.field.Complex thetaSumY,
de.jtem.mfc.field.Complex thetaSumX,
de.jtem.mfc.field.Complex thetaSumXY)
Evaluates the Riemann theta function with characteristics, its first derivatives
in the
X and Y direction and,
its second derivative into the same direction at Z . |
de.jtem.mfc.field.Complex |
dLogTheta(de.jtem.blas.ComplexVector Z,
de.jtem.blas.ComplexVector X)
Returns the first logarythmic derivative of the Riemann theta function
in the
X direction at Z . |
void |
dLogTheta(de.jtem.blas.ComplexVector Z,
de.jtem.blas.ComplexVector X,
de.jtem.mfc.field.Complex DXLogThetaAtZ)
Evaluates the first logarythmic derivative of the Riemann theta funciton
in the
X direction at Z . |
de.jtem.mfc.field.Complex |
dTheta(de.jtem.blas.ComplexVector Z,
de.jtem.blas.ComplexVector X)
Returns the first derivative of the Riemann theta function
in the
X direction at Z . |
void |
dTheta(de.jtem.blas.ComplexVector Z,
de.jtem.blas.ComplexVector X,
de.jtem.mfc.field.Complex thetaAtZ,
de.jtem.mfc.field.Complex DXThetaAtZ)
Evaluates the Riemann theta function and its first derivative
in the
X direction at Z . |
void |
dTheta(de.jtem.blas.ComplexVector Z,
de.jtem.blas.ComplexVector X,
de.jtem.mfc.field.Complex factor,
de.jtem.mfc.field.Complex thetaSumZ,
de.jtem.mfc.field.Complex thetaSumX)
Evaluates the Riemann theta function with characteristics and its first derivative
in the
X direction at Z . |
de.jtem.blas.IntegerVector |
getAlpha()
Returns
alpha charateristic. |
int |
getAlpha(int ith)
Returns the
ith -component of
the alpha charateristic. |
Theta |
getAssociatedTheta()
Returns the associated Riemann theta function.
|
de.jtem.blas.IntegerVector |
getBeta()
Returns
beta charateristic. |
int |
getBeta(int ith)
Returns the
ith -component of
the beta charateristic. |
int |
getDim()
Returns the dimension of the complex vector space on which the Riemann theta
functions operates.
|
double |
getFillFactor()
Returns the fill factor.
|
int |
getNumOfCharacteristics()
Returns number of characteristics.
|
int |
getNumOfEvenCharacteristics()
Returns number of even characteristics.
|
int |
getNumOfOddCharacteristics()
Returns number of odd characteristics.
|
int |
getParityOfSpinStructure() |
de.jtem.blas.ComplexMatrix |
getPeriodMatrix()
Returns period matrix on which the Riemann theta function with characteristics operates.
|
boolean |
getUseFillFactorError()
Returns whether the heuristic of the fill factor error is used or not.
|
boolean |
isEvenCharacteristic()
Retunrs
true if this has an even characteristic. |
boolean |
isOddCharacteristic()
Retunrs
true if this has an odd characteristic. |
void |
setAlpha(de.jtem.blas.IntegerVector alpha)
Sets the
alpha charateristic to alpha . |
void |
setAlpha(int ith,
int value)
Sets the
ith -component of
the alpha charateristic with value . |
void |
setBeta(de.jtem.blas.IntegerVector beta)
Sets the
beta charateristic to beta . |
void |
setBeta(int ith,
int value)
Sets the
ith -component of
the beta charateristic with value . |
void |
setPeriodMatrix(de.jtem.blas.ComplexMatrix periodMatrix)
Sets periodMatrix on which the Riemann theta function with characteristics operates.
|
void |
setUseFillFactorError(boolean useFillFactorError)
Switches the heuristic fill factor error on or off.
|
de.jtem.mfc.field.Complex |
theta(de.jtem.blas.ComplexVector Z)
Returns the Riemann theta function at
Z . |
void |
theta(de.jtem.blas.ComplexVector Z,
de.jtem.mfc.field.Complex thetaAtZ)
Evaluates the Riemann theta function at
Z . |
void |
theta(de.jtem.blas.ComplexVector Z,
de.jtem.mfc.field.Complex factor,
de.jtem.mfc.field.Complex thetaSumZ)
Evaluates the Riemann theta function with characteristics at
Z . |
public ThetaWithChar(de.jtem.blas.ComplexMatrix periodMatrix)
periodMatrix
.
The error tolerance is by default e-7
, the fill factor error
and Siegel`s reduction is used.periodMatrix
- symmetric complex matrix with negative definite real partpublic ThetaWithChar(de.jtem.blas.ComplexMatrix periodMatrix, double tol)
periodMatrix
and error tolerance tol
.
Both, fill factor error and Siegel`s reduction is used.periodMatrix
- symmetric complex matrix with negative definite real parttol
- positive numberpublic ThetaWithChar(de.jtem.blas.ComplexMatrix periodMatrix, double tol, boolean performSiegelReduction)
periodMatrix
and error tolerance tol
.
It further enables the user to switch off the Siegel`s Reduction.periodMatrix
- symmetric complex matrix with negative definite real parttol
- positive numberperformSiegelReduction
- controles whether or not Siegel`s reduction is performedpublic ThetaWithChar(de.jtem.blas.ComplexMatrix periodMatrix, double tol, boolean performSiegelReduction, boolean useFillFactorError)
periodMatrix
and error tolerance tol
.
It further enables the user to switch off the Siegel`s Reduction and the
heuristic of the fill factor error.periodMatrix
- symmetric complex matrix with negative definite real parttol
- positive numberperformSiegelReduction
- controles whether or not Siegel`s reduction is performeduseFillFactorError
- controles whether the fill factor or the 100% error is used.public ThetaWithChar(de.jtem.blas.ComplexMatrix periodMatrix, double tol, boolean performSiegelReduction, boolean useFillFactorError, boolean uniformApproximation)
periodMatrix
and error tolerance tol
.
It further enables the user to switch off the Siegel`s Reduction and the
heuristic of the fill factor error.periodMatrix
- symmetric complex matrix with negative definite real parttol
- positive numberperformSiegelReduction
- controles whether or not Siegel`s reduction is performeduseFillFactorError
- controles whether the fill factor or the 100% error is used.uniformApproximation
- controles whether to use uniform or pointwise approximation.public ThetaWithChar(Theta theta)
theta
.
Associated means that this
will deligate
most of its functionallity to theta
. Thus all other Riemann
theta funciton objects with characteristics
which are also associated to theta
are implicitly associated with this
.theta
- associated Riemann theta functionpublic ThetaWithChar(ThetaWithChar thetaWithChar)
thetaWithChar
its associated Riemann theta function.thetaWithChar
- associated Riemann theta function with characteristicspublic final void ddTheta(de.jtem.blas.ComplexVector Z, de.jtem.blas.ComplexVector X, de.jtem.blas.ComplexVector Y, de.jtem.mfc.field.Complex factor, de.jtem.mfc.field.Complex thetaSumZ, de.jtem.mfc.field.Complex thetaSumY, de.jtem.mfc.field.Complex thetaSumX, de.jtem.mfc.field.Complex thetaSumXY)
X
and Y
direction and,
its second derivative into the same direction at Z
.
θ(z|B) = exp( factor ) · thetaSumZ
DXθ(z|B) = exp( factor ) · thetaSumX
DYθ(z|B) = exp( factor ) · thetaSumY
D²X,Yθ(z|B) = exp( factor ) · thetaSumXY
Evaluating the Riemann theta funciton and its first derivative simultanesly can be performed with almost no extra cost.
Z
- argument vectorX
- direction of derivativeY
- direction of derivativefactor
- exponential partthetaSumZ
- oscillatory partthetaSumX
- oscillatory part of first derivative in X
directionthetaSumY
- oscillatory part of first derivative in Y
directionthetaSumXY
- oscillatory part of second derivativepublic final void dTheta(de.jtem.blas.ComplexVector Z, de.jtem.blas.ComplexVector X, de.jtem.mfc.field.Complex factor, de.jtem.mfc.field.Complex thetaSumZ, de.jtem.mfc.field.Complex thetaSumX)
X
direction at Z
.
θ(z|B) = exp( factor ) · thetaSumZ
DXθ(z|B) = exp( factor ) · thetaSumX
Evaluating the Riemann theta funciton and its first derivative simultanesly can be performed with almost no extra cost.
Z
- argument vectorX
- direction of derivativefactor
- exponential partthetaSumZ
- oscillatory partthetaSumX
- oscillatory part of first derivative in X
directionpublic final de.jtem.blas.IntegerVector getAlpha()
alpha
charateristic.public final int getAlpha(int ith)
ith
-component of
the alpha
charateristic.ith
- non negative, smaller than dim
ith
-component of
the alpha
charateristicpublic final Theta getAssociatedTheta()
public final de.jtem.blas.IntegerVector getBeta()
beta
charateristic.public final int getBeta(int ith)
ith
-component of
the beta
charateristic.ith
- non negative, smaller than dim
ith
-component of
the beta
charateristicpublic final int getDim()
public final double getFillFactor()
public final int getNumOfCharacteristics()
4dim
public final int getNumOfEvenCharacteristics()
2dim-1( 2dim-1 + 1 )
public final int getNumOfOddCharacteristics()
2dim-1( 2dim-1 - 1 )
public final int getParityOfSpinStructure()
public final de.jtem.blas.ComplexMatrix getPeriodMatrix()
public final boolean getUseFillFactorError()
public final boolean isEvenCharacteristic()
true
if this
has an even characteristic.(alpha,beta) % 2 == 0
public final boolean isOddCharacteristic()
true
if this
has an odd characteristic.(alpha,beta) % 2 != 0
public final void setAlpha(de.jtem.blas.IntegerVector alpha)
alpha
charateristic to alpha
.alpha
- integer vector of size dim
public final void setAlpha(int ith, int value)
ith
-component of
the alpha
charateristic with value
.ith
- non negative, smaller than dim
value
- new value for the ith
-component of
the alpha
charateristicpublic final void setBeta(de.jtem.blas.IntegerVector beta)
beta
charateristic to beta
.beta
- integer vector of size dim
public final void setBeta(int ith, int value)
ith
-component of
the beta
charateristic with value
.ith
- non negative, smaller than dim
value
- new value for the ith
-component of
the beta
charateristicpublic final void setPeriodMatrix(de.jtem.blas.ComplexMatrix periodMatrix)
ThetaWithChar
which
share the same associated Riemann theta function.periodMatrix
- symmetric complex matrix with negative definite real partpublic final void setUseFillFactorError(boolean useFillFactorError)
ThetaWithChar
which
share the same associated Riemann theta function.useFillFactorError
- controles whether the fill factor or the 100% error is used.public final void theta(de.jtem.blas.ComplexVector Z, de.jtem.mfc.field.Complex factor, de.jtem.mfc.field.Complex thetaSumZ)
Z
.
θ(z|B) = exp( factor ) · thetaSumZ
Z
- argument vectorfactor
- exponential partthetaSumZ
- oscillatory partpublic final de.jtem.mfc.field.Complex ddLogTheta(de.jtem.blas.ComplexVector Z, de.jtem.blas.ComplexVector X, de.jtem.blas.ComplexVector Y)
X
and Y
direction at Z
.
D²X,Ylog( θ(z|B) ) = DXDYLogThetaAtZ
Z
- argument vectorX
- direction of derivativeY
- direction of derivativeX
and Y
directionpublic final void ddLogTheta(de.jtem.blas.ComplexVector Z, de.jtem.blas.ComplexVector X, de.jtem.blas.ComplexVector Y, de.jtem.mfc.field.Complex DXDYLogThetaAtZ)
X
and the Y
direction at Z
.
D²X,Ylog( θ(z|B) ) = DXDYLogThetaAtZ
Z
- argument vectorX
- direction of derivativeY
- direction of derivativeDXDYLogThetaAtZ
- second logarythmic derivative in the X
and the Y
directionpublic final de.jtem.mfc.field.Complex ddTheta(de.jtem.blas.ComplexVector Z, de.jtem.blas.ComplexVector X, de.jtem.blas.ComplexVector Y)
X
and Y
direction and,
its second derivative into the same direction at Z
.Z
- argument vectorX
- direction of derivativeY
- direction of derivativethetaAtZ
- oscillatory partDXThetaAtZ
- oscillatory part of first derivative in X
directionDYThetaAtZ
- oscillatory part of first derivative in Y
directionDXDYThetaAtZ
- oscillatory part of second derivativepublic final void ddTheta(de.jtem.blas.ComplexVector Z, de.jtem.blas.ComplexVector X, de.jtem.blas.ComplexVector Y, de.jtem.mfc.field.Complex thetaAtZ, de.jtem.mfc.field.Complex DXThetaAtZ, de.jtem.mfc.field.Complex DYThetaAtZ, de.jtem.mfc.field.Complex DXDYThetaAtZ)
X
and Y
direction and,
its second derivative into the same direction at Z
.
θ(z|B) = thetaAtZ
DX θ(z|B) = DXThetaAtZ
DY θ(z|B) = DYThetaAtZ
D²X,Yθ(z|B) = DXDYThetaAtZ
Evaluating the Riemann theta funciton and its first derivative simultanesly can be performed with almost no extra cost.
Z
- argument vectorX
- direction of derivativeY
- direction of derivativethetaAtZ
- oscillatory partDXThetaAtZ
- oscillatory part of first derivative in X
directionDYThetaAtZ
- oscillatory part of first derivative in Y
directionDXDYThetaAtZ
- oscillatory part of second derivativepublic final de.jtem.mfc.field.Complex dLogTheta(de.jtem.blas.ComplexVector Z, de.jtem.blas.ComplexVector X)
X
direction at Z
.Z
- argument vectorX
- direction of derivativeX
directionpublic final void dLogTheta(de.jtem.blas.ComplexVector Z, de.jtem.blas.ComplexVector X, de.jtem.mfc.field.Complex DXLogThetaAtZ)
X
direction at Z
.
DXlog( θ(z|B) ) = DXLogThetaAtZ
Z
- argument vectorX
- direction of derivativeDXLogThetaAtZ
- first logarythmic derivative in X
directionpublic final de.jtem.mfc.field.Complex dTheta(de.jtem.blas.ComplexVector Z, de.jtem.blas.ComplexVector X)
X
direction at Z
.Z
- argument vectorX
- direction of derivativeX
directionpublic final void dTheta(de.jtem.blas.ComplexVector Z, de.jtem.blas.ComplexVector X, de.jtem.mfc.field.Complex thetaAtZ, de.jtem.mfc.field.Complex DXThetaAtZ)
X
direction at Z
.
θ(z|B) = thetaAtZ
DXθ(z|B) = DXThetaAtZ
Evaluating the Riemann theta funciton and its first derivative simultanesly can be performed with almost no extra cost.
Z
- argument vectorX
- direction of derivativethetaAtZ
- value of the Riemann theta function at Z
DXThetaAtZ
- value of first derivative in X
directionpublic final de.jtem.mfc.field.Complex theta(de.jtem.blas.ComplexVector Z)
Z
.Z
- argument vectorZ
public final void theta(de.jtem.blas.ComplexVector Z, de.jtem.mfc.field.Complex thetaAtZ)
Z
.
θ(z|B) = thetaAtZ
Z
- argument vectorthetaAtZ
- value of the Riemann theta function at Z