Copyright: (c) 1998 H. Lohninger, Vienna, Austria


 nDistriIntegral

See also:	nDistriQuantile, nDistriDensity, tDistriIntegral, FDistriIntegral, Chi2DistriIntegral

Class:	none

Declaration:	function nDistriIntegral (u: double): double;

The function nDistriIntegral returns the integral of the normal distribution between minus infinity and the value of the parameter u. The returned value may vary between 0.0 and 1.0.

Hint:	The calculated value is exact to about 8 decimal places.


 FDistriIntegral

See also:	FDistriQuantile, FDistriDensity, tDistriIntegral, Chi2DistriIntegral, nDistriIntegral

Class:	none

Declaration:	function FDistriIntegral (F: double; df1, df2: integer): double;

The function FDistriIntegral returns the integral of the F-distribution between zero and the value of the parameter F. The parameters df1 and df2 define the degrees of freedom and must be greater or equal to 1. The returned value may vary between 0.0 and 1.0.

Hint:	The calculated value is exact to about 8 decimal places.


STATIS
Statis - Version 1.0

The unit STATIS offers some of the most fundamental procedures of mathematical statistics. Along with the Gamma and the Beta function, all major types of distributions are implemented (normal, t, F, and chi-square distribution). A major benefit of this package is that the distribution functions are calculated analytically and not by approximations, or by table lookup. Thus the precision is at least eight digits.

STATIS is released under the shareware concept. The unregistered version is fully functional with one exception: the shareware version runs properly only when the Delphi, or C++Builder IDE is also up and running.

Product information

Interface of unit STATIS

Installation of STATIS

Delphi and C++Builder issues

Frequently Asked Questions

Procedures and functions of unit STATIS:

BinomCoeff	CalcFishQ

Chi2DistriDensity	Chi2DistriIntegral

Chi2DistriQuantile	FDistriDensity

FDistriIntegral	FDistriQuantile

IncompleteBeta	KolmogSmir1SampleTestStat

LnBeta	LnBinomCoeff

LnGamma	nDistriDensity

nDistriIntegral	nDistriQuantile

tDistriDensity	tDistriIntegral

tDistriQuantile	WeibullDensity


 Chi2DistriIntegral

See also:	Chi2DistriQuantile, Chi2DistriDensity, tDistriIntegral, FDistriIntegral, nDistriIntegral

Class:	none

Declaration:	function Chi2DistriIntegral (chi2: double; df: integer): double;

The function Chi2DistriIntegral returns the probability p for a given critical value chi2, and a given number of degrees of freedom df. The probability p is equal to the integral of the chi-square-distribution between zero and the value of the parameter Chi2. The returned value may vary between 0.0 and 1.0.

Hint:	The calculated value is exact to about 8 decimal places.


 Chi2DistriQuantile

See also:	Chi2DistriIntegral, Chi2DistriDensity, tDistriQuantile, nDistriQuantile, FDistriQuantile, KolmogSmir1SampleTestStat

Class:	none

Declaration:	function Chi2DistriQuantile (p: double; df: integer): double;

The function Chi2DistriQuantile returns the quantile value for the chi-square distribution for a given probability p. The parameter p may take any value in the open interval (0,1). If Chi2DistriQuantile is called using an invalid value of p, a value of 0.0 is returned.


 nDistriDensity

See also:	nDistriQuantile, nDistriIntegral, tDistriDensity, FDistriDensity, Chi2DistriDensity

Class:	none

Declaration:	function nDistriDensity (u: double): double;

The function nDistriDensity returns the density value of the standard normal distribution for a given critical value u. The parameter u may take any value between -infinity and +infinity.


 tDistriDensity

See also:	tDistriQuantile, tDistriIntegral, nDistriDensity, FDistriDensity, Chi2DistriDensity

Class:	none

Declaration:	function tDistriDensity (t: double; df: integer): double;

The function tDistriDensity returns the density value of the t distribution for a given critical value t. The parameter t may take any value between -infinity and +infinity.


 FDistriDensity

See also:	FDistriQuantile, FDistriIntegral, tDistriDensity, nDistriDensity, Chi2DistriDensity

Class:	none

Declaration:	function FDistriDensity (F: double; df1, df2: integer): double;

The function FDistriDensity returns the density value of the F distribution for a given critical value F. The parameter F may take any value between zero and +infinity. The parameters df1 and df2 define the degrees of freedom and must be greater or equal to 1.


 tDistriIntegral

See also:	tDistriQuantile, tDistriDensity, FDistriIntegral, Chi2DistriIntegral, nDistriIntegral

Class:	none

Declaration:	function tDistriIntegral (t: double; df: integer): double;

The function tDistriIntegral returns the integral of the t-distribution between minus infinity and the value of the parameter t. The parameter df specifies the number of degrees of freedom. The returned value may vary between 0.0 and 1.0.

Hint:	The calculated value is exact to about 8 decimal places.


IncompleteBeta

See also:	LnBeta, LnGamma

Class:	none

Declaration:	function IncompleteBeta (x, a, b: double): double;

The function IncompleteBeta returns the incomplete Beta function Ix(a,b). The parameters a and b must not be negative. The incomplete Beta function is defined as follows:


 Chi2DistriDensity

See also:	Chi2DistriQuantile, Chi2DistriIntegral, nDistriDensity, FDistriDensity, tDistriDensity

Class:	none

Declaration:	function Chi2DistriDensity (chi2: double; df: integer): double;

The function Chi2DistriDensity returns the density value of the chi-square distribution for a given quantile chi2. The parameter chi2 may take any value between zero and +infinity.


 FDistriQuantile

See also:	FDistriIntegral, FDistriDensity, tDistriQuantile, Chi2DistriQuantile, nDistriQuantile

Class:	none

Declaration:	function FDistriQuantile (p: Double; df1, df2: integer): double;

The function FDistriQuantile returns the value of the quantile of the F distribution for a given probability p, and a specified number of degrees of freedom df1 and df2. The parameter p may take any value in the open interval (0,1). The parameters df1, and df2 may take values between 1 and MaxInt. If FDistriQuantile is called using invalid arguments a value of 0.0 is returned.

Hint:	The calculated value is exact to about 8 significant figures.


 tDistriQuantile

See also:	tDistriIntegral, tDistriDensity, FDistriQuantile, Chi2DistriQuantile, nDistriQuantile

Class:	none

Declaration:	function tDistriQuantile (p: double; df: integer): double;

The function tDistriQuantile returns the value of the quantile of the t-distribution for a given probability p, and a specified number of degrees of freedom df. The parameter p may take any value in the open interval (0,1). The parameter df may take values between 1 and MaxInt. If tDistriQuantile is called using invalid arguments a value of 0.0 is returned.

Hint:	The calculated value is exact to about 8 significant figures.


 WeibullDensity

See also:	nDistriDensity

Class:	none

Declaration:	function WeibullDensity (x, alpha, beta: double): double;

The function WeibullDensity returns the Weibull density for a given x, alpha, and beta. Both x and beta have to be positive numbers.


 nDistriQuantile

See also:	nDistriIntegral, nDistriDensity, tDistriQuantile, FDistriQuantile, Chi2DistriQuantile

Class:	none

Declaration:	function nDistriQuantile (p: double): double;

The function nDistriQuantile returns the quantile value of the standard normal distribution for a given probability p. The parameter p may take any value in the open interval (0,1). If nDistriQuantile is called using an invalid value of p, a value of 0.0 is returned.


 BinomCoeff

See also:	LnBinomCoeff, LnBeta, LnGamma

Class:	none

Declaration:	function BinomCoeff (n,k: integer): longint;

The function BinomCoeff calculates the binomial coefficient (n,k), which is the number of possible combinations when drawing k items out of a total set of n. The binomial coefficient is defined by the following formula:

The parameters n, and k have to be positive, with n >= k. If this condition is not fulfilled, BinomCoeff returns a zero value.

Please note that the binomial coefficient may become too large to be returned as longint value. In this case an EInvalidOp exception is generated. If you expect large binomial coefficients you maybe want to use the function LnBinomCoeff, which calculates the natural logarithm of it.


 CalcFishQ

See also:	--

Class:	none

Declaration:	function CalcFishQ (m1,m2,s1,s2: double): double;

The Fisher ratio is often used to enumerate the degree of overlap of two distributions. The procedure CalcFishQ calculates the Fisher ratio from the mean values and the standard deviations of the two distributions.

Hint:	If the sum of the standard deviations falls below 10E-6, a value of 10E-6 is substituted for it.


 KolmogSmir1SampleTestStat

See also:	Chi2DistriQuantile

Class:	none

Declaration:	function KolmogSmir1SampleTestStat (SampleSize: integer; alpha: TSignifLevel): double;

A frequently encountered problem in statistics is to test whether a given number of samples belong to a predefined probability distribution. The Kolmogorov-Smirnov test has the advantage of needing only a few samples. The function KolmogSmir1SampleTestStat returns an approximation of the critical values for this test. The parameter SampleSize specifies the number samples used for the test, the parameter alpha specifies the level of uncertainty.

Note that the test statistic is calculated by finding the maximum absolute difference between the cumulative frequency distribution of the samples and the predefined distribution.


LnBeta

See also:	LnGamma, BinomCoeff, IncompleteBeta

Class:	none

Declaration:	function LnBeta (z,w: double): double;

The function LnBeta returns the natural logarithm of the Beta function B(z,w). The parameters z and w must not be negative. The Beta function is defined as follows:


LnBinomCoeff

See also:	BinomCoeff, LnGamma

Class:	none

Declaration:	function LnBinomCoeff (n,k: integer): double;

The function LnBinomCoeff returns the logarithm of the binomial coefficient, which may advantageously used for large expected binomial coefficients.


 LnGamma

See also:	LnBeta

Class:	none

Declaration:	function LnGamma (x: double): double;

The function LnGamma returns the natural logarithm of the Gamma function. The parameter x may assume any values greater than zero, for all other values the function returns a zero value. The Gamma function is defined as follows:

Hint:	If you are using the LnGamma function for calculating factorials you may apply the round function for small arguments in order to get exact values:

fact(x) := round(exp(LnGamma(x));

However, it is more efficient to calculate the factorial by just multiplying the series of numbers as long as the argument is below 10.

Note:	The Gamma function is calculated according to a formula given by Lanczos, which gives better numerical precision than by using a series expansion. Precision is about 8 decimal places (for arguments x > 1).


 Registration of Statis

See also:	How to order

The unit Statis is a shareware component. You can register it for US$ 12.00. In return, you get the newest version of STATIS and unlimited free updates via our update server. The registered version is, of course, fully functional and does no longer need the Delphi, or the C++Builder IDE. The user may then create stand-alone programs which can be deployed without paying any further licences.

The sources of STATIS are available separately at a price of US$ 80,-.

 Click here for further details and infos on available discounts.


 Installation of Statis

See also:	Delphi and C++Builder Issues

The installation of the unit is a two-part process. First you have to copy the DCU file(s) to the Delphi (C++ Builder) library. Secondly, you should install the help file of this component into the help system of Delphi (C++ Builder).

Note:	The unit STATIS is not a visual component. You therefore cannot install it in the VCL palette. The routines of STATIS are used by including STATIS into the 'uses' statement of your program.

Delphi installation

C++ Builder installation


 Interface of Statis

Note: you may have to switch to small fonts to get a legible interface list.

interface

  type

    TSignifLevel = (Dot20, Dot15, Dot10, Dot05, Dot01);

  function  BinomCoeff

                  (n : integer;           { total number of elements }

                   k : integer)           { number of drawn elements }

                     : longint;               { binomial coefficient }

  function  CalcFishQ

              (m1,m2,                     { mean values, class 1 & 2 }

               s1,s2 : double)                 { standard deviations }

                     : double;                        { Fisher ratio }

  function  Chi2DistriDensity

               (chi2 : double;                 { chi square quantile }

                  df : integer)                 { degrees of freedom }

                     : double;  { density of chi square distribution }

  function  chi2DistriIntegral

               (chi2 : double;                 { chi square quantile }

                  df : integer)                 { degrees of freedom }

                     : double;                         { probability }

  function  chi2DistriQuantile

                  (p : double;                         { probability }

                  df : integer)                 { degrees of freedom }

                     : double;       { quantile of chi2-distribution }

  function  FDistriDensity

                  (F : double;                          { F quantile }

            df1, df2 : integer)                 { degrees of freedom }

                     : double;           { density of F distribution }

  function  FDistriIntegral

                  (F : double;                          { F quantile }

                 df1 : integer;                 { degrees of freedom }

                 df2 : integer)                 { degrees of freedom }

                     : double;                         { probability }

  function  FDistriQuantile

                  (p : double;                         { probability }

                 df1 : integer;                 { degrees of freedom }

                 df2 : integer)                 { degrees of freedom }

                     : double;                            { quantile }

  function  IncompleteBeta

                  (x : double;                            { quantile }

                a, b : double)                          { parameters }

                     : double;                     { function result }

  function  KolmogSmir1SampleTestStat

         (SampleSize : integer;        { size of sample to be tested }

               alpha : TSignifLevel)         { level of significance }

                     : double;                   { critical KS value }

  function  LnBeta

                (z,w : double)          { arguments of beta function }

                     : double;                           { Beta(z,w) }

  function  LnBinomCoeff

                  (n : integer;           { total number of elements }

                   k : integer)           { number of drawn elements }

                     : double;   { logarithm of binomial coefficient }

  function  LnGamma

                  (x : double)          { argument of gamma function }

                     : double;                        { ln(gamma(x)) }

  function  nDistriDensity

                  (u : double)                      { critical value }

                     : double;      { density of normal distribution }

  function  nDistriIntegral

                  (u : double)                            { argument }

                     : double;          {integral of norm.dens.funct.}

  function  nDistriQuantile

                  (p : double)                         { probability }

                     : double;                 { normal distribution }

  function  tDistriDensity

                  (t : double;                             { t value }

                  df : integer)                 { degrees of freedom }

                     : double;           { density of t distribution }

  function  tDistriIntegral

                  (t : double;                             { t value }

                  df : integer)                 { degrees of freedom }

                     : double;                         { probability }

  function  tDistriQuantile

                  (p : double;                         { probability }

                  df : integer)                 { degrees of freedom }

                     : double;          { quantile of t-distribution }

  function WeibullDensity

                  (x : double;                            { argument }

               alpha : double;  { parameters of Weibull distribution }

                beta : double)

                     : double;                             { density }


TSignifLevel

See also:	KolmogSmir1SampleTestStat

Class:	none

Declaration:	TSignifLevel = (Dot20, Dot15, Dot10, Dot05, Dot01);

The type declaration TSignifLevel defines the possible levels of significance (often denoted as alpha), as it is used in the Kolmogorov-Smirnov test.

Dot20	= 0.20

Dot15	= 0.15

Dot10	= 0.10

Dot05	= 0.05

Dot01	= 0.01


Most of the procedures and functions contained in the unit STATIS have been implemented using the equations published in one of the following books:

M. Abramowitz, I. Stegun (eds.)

Handbook of Mathematical Functions With Formulas, Graphs, and Mathematical Tables

National Bureau of Standards, Applied Mathematics Series, No. 55, 10th printing, Washington, D.C., 1972

J. Hartung, B. Elpelt, K.-H. Klösener

Statistisk - Lehr- und Handbuch der angewandten Statistik

R. Oldenbourg Verlag, München 1987


MathFeedBackProc [Math1]
 MathFeedBackProc

This routine is part of the unit MATH1

For technical reasons the help file for unit MATH1 is a separate file. You may obtain further information either by using the help file MATH1.HLP, or by using the SDL component suite help SDLSUITE.HLP. Both files can be downloaded from our webserver http://www.lohninger.com/


MouseAction [RChart]
 MouseAction

This routine is part of the unit RCHART

For technical reasons the help file for unit RCHART is a separate file. You may obtain further information either by using the help file RCHART.HLP, or by using the SDL component suite help SDLSUITE.HLP. Both files can be downloaded from our webserver http://www.lohninger.com/


ProcStat [Math1]
 ProcStat

This routine is part of the unit MATH1

For technical reasons the help file for unit MATH1 is a separate file. You may obtain further information either by using the help file MATH1.HLP, or by using the SDL component suite help SDLSUITE.HLP. Both files can be downloaded from our webserver http://www.lohninger.com/


Installation [RChart]
 Installation of RChart

This routine is part of the unit RCHART

For technical reasons the help file for unit RCHART is a separate file. You may obtain further information either by using the help file RCHART.HLP, or by using the SDL component suite help SDLSUITE.HLP. Both files can be downloaded from our webserver http://www.lohninger.com/


SetRange [RChart]
 SetRange

This routine is part of the unit RCHART

For technical reasons the help file for unit RCHART is a separate file. You may obtain further information either by using the help file RCHART.HLP, or by using the SDL component suite help SDLSUITE.HLP. Both files can be downloaded from our webserver http://www.lohninger.com/


ShowGraf [RChart]
 ShowGraf

This routine is part of the unit RCHART

For technical reasons the help file for unit RCHART is a separate file. You may obtain further information either by using the help file RCHART.HLP, or by using the SDL component suite help SDLSUITE.HLP. Both files can be downloaded from our webserver http://www.lohninger.com/


AutoRedraw [RChart]
 AutoRedraw

This routine is part of the unit RCHART

For technical reasons the help file for unit RCHART is a separate file. You may obtain further information either by using the help file RCHART.HLP, or by using the SDL component suite help SDLSUITE.HLP. Both files can be downloaded from our webserver http://www.lohninger.com/


CalcPrincComp [Math2]
 CalcPrincComp

This routine is part of the unit MATH2

For technical reasons the help file for unit MATH2 is a separate file. You may obtain further information either by using the help file MATH2.HLP, or by using the SDL component suite help SDLSUITE.HLP. Both files can be downloaded from our webserver http://www.lohninger.com/


Create [Matrix]
 Create

This routine is part of the unit MATRIX

For technical reasons the help file for unit MATH2 is a separate file. You may obtain further information either by using the help file MATH2.HLP, or by using the SDL component suite help SDLSUITE.HLP. Both files can be downloaded from our webserver http://www.lohninger.com/


TDistMode [Matrix]
 TDistMode

This routine is part of the unit MATRIX

For technical reasons the help file for unit MATRIX is a separate file. You may obtain further information either by using the help file MATRIX.HLP, or by using the SDL component suite help SDLSUITE.HLP. Both files can be downloaded from our webserver http://www.lohninger.com/

----------

Declaration:	TDistMode = (dmJaccard, dmManhattan, dmEuclid, dmEuclidSqr);

The type declaration TDistMode defines the possible operating modes of the method CalcDistMat. Currently the following distances can be calculated:

dmJaccard	similarity measure first defined by P. Jaccard (sometimes also referred to as Tanimoto coefficient)

dmManhattan	Manhattan or city block distance

dmEuclid	Euclidean distance

dmEuclidSqr	squared Euclidean distance


Unit StringL
StringL

The unit StringL offers some means to process strings. A collection of procedures and functions provide several often used string formatting functions. In addition, StringL contains the class TGrep which offers a versatile string search utility using the wide spread definition of regular expressions as e.g. in the Unix command "grep".

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit Plot3D
Plot3D

The unit Plot3D contains a Delphi / C++ Builder visual component which supports the display of three dimensioal surfaces. The surfaces are defined by a rectangular grid of height values, and can be viewed from any angle and in any direction. numeric labels. The component TPlot3D comes together with this help file and a sample program (both Pascal and C++).

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit Kohonen
Kohonen

The unit KOHONEN provides a selforganizing map (SOM) as it has been described by Teuvo Kohonen. These SOMs are also known as Kohonen maps, or Kohonen neural networks. The unit KOHONEN contains the class TKohonen which simulates a Kohonen neural network.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit CData
CData

The unit CDATA consists of some important chemical data tables and conversion routines as well as some basic routines processing chemical information. Among these are the conversion of atom symbols to atomic numbers, the chemical atomic weight of all chemical elements, the atom symbols of all elements, the atomic weight of the most abundant isotope of each chemical element, the support of a graphical display of a periodic table of the elements, several important chemical constants, the calculation of the molecular weight, the checking for a correct CAS registry number, and the number of valence electrons.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit DStruct
DStruct

The unit DStruct contains routines, which support the implementation of commonly used data structures (FIFO registers, and bit fields).

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit Vector
Vector

The unit Vector offers some of the more important operations for processing floating point vectors. It hides all stuff dealing with array addressing and memory management. Thus, the user may fully concentrate on his/her work with vectors.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit Math1
Math1

The unit MATH1 offers several fundamental arithmetic operators and mathematical/logical routines which have not been implemented in Delphi (e.g. hyperbolic functions, tangens, cotangens, or common logarithm). The unit also contains routines to sort data, to produce different numeric formats, to generate random numbers of special distributions, etc. In addition, a special version of the Delphi str procedure is offered which is declared as a function returning the formatted string. This considerably eases the display of numeric values.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit CForm
CForm

The unit CForm contains a class (TMolForm) which supports the handling and display of molecular formulas.  Apart from displaying chemical formulas using the usual notation (subscripted number of atoms, superscripted isotopic labels), CForm also provides several methods supporting some calculations around chemical formulas:

calculating the molecular weight

comparison of formulas

finding formulas for a given molecular weight

scanning strings for molecular formulas

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit ColSel
ColSel

The unit ColSel contains a Delphi visual component which supports the display of the predefined system colors in a combo box.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit DirTree
DirTree

This component provides a directory tree similar to the one provided by Borland with their sample component TDirectoryOutline. Horwever, TDirTree is much more carefully designed, has less bugs and is much faster. Currently, TDirTree is limited to a maximum of 1900 directories per drive.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit Fourier
Fourier

The unit FOURIER contains a visual component for FFT (Fast Fourier Transform).

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit Indexer
Indexer

The unit Indexer contains a text indexing machine. The indexes may be created either by use of a thesaurus, or a list of masked keywords, or by indexing every word which is not contained in a list of stop words. Indexer supports the use of regular expressions.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit Math2
Math2

The unit MATH2 offers some of the most fundamental procedures of univariate statistics (such as mean values, standard deviations, or the correlation coefficient for a series of data pairs). In addition, several more advanced mathematical methods (such as the calculation of eigenvectors and principal components, a simple clustering algorithm, and the approximation of the normal and the t-distribution) are contained in this unit. The unit MATH2 also contains a simple, yet powerful class (TCurveFit) which supports curve fitting of bivariate data.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit Matrix
Matrix

The unit MATRIX offers some of the most important operations to manage and process two-dimensional real and integer matrices. The object oriented approach of the unit MATRIX hides all stuff dealing with array addressing and memory management. Thus the user may fully concentrate on his/her work.

The unit MATRIX provides two classes, TMatrix and TIntMatrix, which contain a floating point and an integer matrix, respectively. MATRIX offers solutions for the following tasks:

- creation and management of matrices

- filling of matrices

- copying matrices

- matrix arithmetics

- determination of statistical parameters about the matrix elements

- inversion of a square matrix (TMatrix only)

- sorting of elements

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit Meter
Meter

The unit Meter contains a Delphi visual component which supports the display of analog meters (the good old index instruments). The component is named TMeter and comes together with this help file and a sample application.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit MatView
MatView

The unit MatView provides a class which visualizes the contents of a matrix by displaying rectangles proportional to the values of the single matrix elements. MatView is especially useful to select matrix cells, rows, or columns in a visual way.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit NumLab
NumLab

The unit NumLab contains a Delphi / C++ Builder visual component which supports the display of numeric labels. The component TNumLab comes together with this help file and a sample program (both Pascal and C++).

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit NumIO
NumIO

The unit NumLab contains a Delphi / C++ Builder visual component which supports the input of numeric data in various formats. The component TNumIO comes together with this help file and a sample program (both Pascal and C++).

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit NTabed
NTabEd

The unit NTabEd contains a Delphi visual component which supports the display and editing of numeric tables. Each table consists of the data table, column and row attributes, column and row headers, and a comment line. All of these items can be manipulated either interactively or programmatically. The data table is based on the class TMatrix.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit RChart
RChart

The unit RChart contains a Delphi visual component which supports the display of scientific graphs. The component is named TRChart and comes together with this help file and several example programs.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


Unit Rot3D
Rot3D

The unit ROT3D displays three-dimensional data and supports flickerfree rotation of the 3D view. The rotation can be achieved either by mouse interaction, or by using built-in methods of the class TRot3D. The data can be viewed from any direction, and can be zoomed and panned. Optionally, axes and/or a bounding box may be displayed.

For technical reasons, this help file is restricted to a single component or unit. If you want to have the cumulative help for all components available from SDL, you may download a free copy of the cumulative help from our web site:

http://www.lohninger.com/


 Type Ambiguities

See also:

Some of the components of SDL have type definitions which are syntactically equal to each other. For organizational reasons they are declared separately in each unit. However, this approach may result in ambigous type declarations, if two or more of these components are used within the same program. The compiler generates the following error message:

Delphi:	Incompatible Types

C++Builder:	Ambiguity between 'xxx::ttt' and 'zzz::ttt'

If such a problem occurs, the user has to explicitely specify the unit, or name space of the type declaration by using the name of the unit preceding the actual identifier. The unit name is separated by a dot (or two colons in case of C++) from the identifier.

Example:	Suppose you are using the components Meter and Numlab on the same form. Both components have defined the property FrameStyle which is of the type TFrameStyle. In order to assign a new frame style during run-time you have to explicitely specify the unit which is used for the type definition:

NumLab1.FrameStyle := Numlab.fsRaised;

Meter1.FrameStyle := Meter.fsRaised;

or the same in C++:

NumLab1->FrameStyle = Numlab::fsRaised;

Meter1->FrameStyle = Meter::fsRaised;


How to order

Back to the Contents

For registration please run the program REGISTER.EXE (which prints the registration form) and send the printed form together with the proper amount of money (preferrably credit cards or cash, for cheques please add US$ 5,-) to the following address:

   SDL

   Software Development Lohninger

   P.O.B. 123

   A-1061 Vienna

   Austria, Europe

   email: helpdesk@lohninger.com

The components are preferrably delivered by electronic means (download from our update server after authorization by email). For quick delivery (within 24 hours), please fax the order form (credit card orders, only) to the fax number indicated at our home page:

http://www.lohninger.com/

There are several additional Delphi / C++Builder components, and other software products available from SDL. Ordering several components (w/o source code) together will entitle you to a discount:

2 components	-10 %

3..5 components	-20 %

more than 5	-30 %

Special Offer 1:

SDL Component Suite: Take all of our Delphi / C++Builder (w/o sources) and pay only US$ 55.

This offer includes:

* unlimited free updates via our webserver

* free support for both the Delphi and the C++Builder versions of the components

Special Offer 2:

SLD Component Suite Pro: Purchase the sources of all of our components and get a free subscription to all future components for only US$ 399. This offer includes:

* full source code of all components

* unlimited free updates via our webserver

* free subscription to future components: your component library is thus automatically growing month by month at no extra costs

* free support for both the Delphi and the C++Builder versions of the components

For the latest release of SDL´s Delphi and C++Builder components and for pricing information see http://www.lohninger.com/ or write to the address above.


A  Personal  Remark

We are putting much effort into the production of  most reliable components and units for other programmers. Everybody  who is using our software gets our expertise at a competitive price. But this is only possible if everybody who uses our software, registers it and pays for it. So, if you don't want to kill the shareware idea, don't hesitate to support our work and register this piece of software.

Hans Lohninger of SDL

Vienna, Austria.


Installing under C++Builder - Non Visual Component
 C++Builder Installation - Non Visual Component

See also:	Delphi installation, SDL Component Suite Help

Please mind that the unit is not a visual component. Therefore, this unit cannot be installed in the C++Builder VCL.

1. Installing the component under C++ Builder 1.0

1.1	Copy the OBJ file(s) to the directory where the C++Builder library is located  (XXX/CBuilder/Lib, or XXX/CBuilder/Lib/Obj).

1.2	Copy the HPP file(s) into the include directory (XXX/CBuilder/Include)

2. Installing the package under C++Builder 3.0

2.1	Copy all HPP files to the include directory of C++Builder (XXX/CBuilder3/Include)

2.2	Copy all DFM, RES, and OBJ files to the object directory of C++Builder (XXX/CBuilder3/lib/obj)

2.3	Copy all BPL files to the binaries directory of C++Builder (XXX/CBuilder3/bin)

2.4	Copy all BPI, DCR, and LIB files to the library directory of C++Builder (XXX/CBuilder3/lib)

2.5	In the C++Builder main menu click on "Component", and then on "Install Packages". This starts the package installation window.

2.6a	If you have previously installed an earlier version of the package, select this earlier version and remove it by clicking on the "Remove" button.

2.6b	Now click on "Add" and select the package to be installed (all package names start with "sdl"). The packages can be found in the binaries directory of C++Builder (XXX/CBuilder3/bin). You may repeat step 2.6 for installing several packages

2.7	When done, click on OK. C++ Builder will then add the selected components to its package library. Note that installed component is not visible in the VCL palette.

Note:	If you are installing several or all of the SDL components, the order of installation is important because some packages require others to be already installed. Here is a sample order which works: CDATA, CFORM, STRINGL, MATH1, VECTOR, MATRIX, MATH2, NTABED, NUMLAB, RCHART, ROT3D, NUMIO, STATIS, DSTRUCT, DIRTREE, COLSEL, FOURIER, METER

2. Adding the help file to the C++Builder help system

2.1  (optional) Copy the HLP file(s) to the help directory of C++Builder

2.2  Run the OpenHelp application from the C++Builder group menu.

2.3  Click on the "Add" button, and add the help file(s) to the "Available Help Files" list

2.4  Select the help file(s) and click on ">"

2.5  Click on OK. Thereafter the C++Builder help system knows about the new component(s).

As an alternative, you could install the cumulative help file SDLSUITE.HLP which covers all components of SDL. The cumulative help is available for free at the following web site:

http://www.lohninger.com/


Installing under Delphi - non visual component
 Delphi Installation - Non Visual Component

See also:	C++ Builder installation, SDL Component Suite Help

1. Installing the unit under Delphi

Please mind that the unit is not a visual component. Therefore, this unit cannot be installed in the Delphi VCL.

1.1. Installation under Delphi, versions 1, 2, and 3

1.1 	Copy the DCU file(s) to the directory where the Delphi library is located.

1.2. Installing the components under Delphi 4

1.2.1. If not already running, start up Delphi 4.

1.2.2. If you have installed a previous (shareware) copy, uninstall it

1.2.3. Select the subdirectory delphi40 of the distribution files

1.2.4. Copy all files of this directory to the Delphi compiler directory (usually  'XYZ\Delphi 4.0\Bin')

1.2.5. Click on "Component" and then on "Install Packages ..."

1.2.6. Click on "Add.." and browse the Delphi library path for sdl*.dpl files

1.2.7. Select the package to be installed

1.2.8. Optinonally, repeat the addition of other packages

1.2.9. Click on OK. Thereafter the selected package(s) is(are) available, but not visible in the VCL palette

Note:	If you are installing several or all of the SDL components, the order of installation is important because some packages require others to be already installed. Here is a sample order which works: CDATA, CFORM, STRINGL, MATH1, VECTOR, MATRIX, MATH2, NTABED, NUMLAB, RCHART, ROT3D, NUMIO, STATIS, DSTRUCT, DIRTREE, COLSEL, FOURIER, METER

2. Merging the help keywords into the master help index

2.1  Copy the HLP and the KWF files to the directory where the master help file DELPHI.HLP is located (usually \DELPHI\BIN).

2.2  Run the HELPINST application from the Delphi group menu.

2.3  Open the master index DELPHI.HDX

2.4  Add the keyword file (.KWF)

2.5 	Save and compile the new index. Thereafter the Delphi master help index includes the keywords for the component's Help screens.

As an alternative, you could install the cumulative help file SDLSUITE.HLP into the Delphi Tools menu. This approach is far better and much more reliable than merging the help files into the master help index. The cumulative help is available for free at the following web site:

http://www.lohninger.com/

-------------------------------

Note:	Assure yourself that the PATH environment variable includes the directory where the help file is stored. Otherwise the Windows help system will not find the new help file. Alternatively, you can copy the help file to the Windows directory.


Delphi and C++Builder Issues

See also:

C++Builder users of class TVector:

Don’t mix up the class TVector with the vector class of the Rogue Wave Standard C++ Library. (Sorry for the duplicate naming).

Any component of SDL comes both for the Delphi and the C++Builder environment. Thus, you get full support both for Delphi and C++Builder with our components. The following general directory layout of the delivered zip files makes it easier to access the parts you need:

Please note, that the RES files of the sample applications are supplied both as a 16-bit and a 32-bit version (denoted by the extension RES16, and RES32). You have to rename the proper version to RES before compiling the sample applications.


Installing the SDL Component Suite Help
 Installation of the SDL Component Suite Help

See also:	C++ Builder installation, Delphi installation

If you want to install the SDL Component Suite help file into the tools menu of the Delphi or C++Builder IDE, you have to perform the folowing steps:

Delphi 1.0

1.	Click on the "Options" command in the main menu

2.	Click on "Tools..." in the submenu

3.	Click on "Add..." in the tools window

4a.	Enter a title for the help file (e.g. "SDL Help")

4b.	Browse your computer for the program "Winhelp.exe" (which is normally located in the Windows directory "c:\windows")

4c.	In the "Parameters" box, enter the full path of the help file (e.g. "d:\delphi20\compiler\help\sdl16.hlp")

4d.	Click on "OK", and then on "Close"

The cumulative help of the Delphi Componente Suite should now be available from the "Tools" menu of Delphi 1

Delphi 2.0/3.0/4.0, C++Builder 1.0/3.0

1.	Delphi 2, and 3: Click on the "Tools" command in the main menu

2a.	Delphi 2: Click on "Tools..." in the submenu

2b.	Delphi 3 & 4, C++Builder: Click on "Configure Tools..." in the submenu

3.	Click on "Add..." in the tools window

4a.	Enter a title for the help file (e.g. "SDL Help")

4b.	Browse your computer for the program "Winhlp32.exe" (which is normally located in the Windows directory "c:\windows")

4c.	In the "Parameters" box, enter the full path of the help file (e.g. "d:\delphi20\compiler\help\sdl32.hlp")

4d.	Click on "OK", and then on "Close"

The cumulative help of the Delphi Componente Suite should now be available from the "Tools" menu of the IDE.


Nag Hints in the Registered Version
 How to get rid of the nag hints in the registered versions

See also:

Question:

I recently registered this component and installed what I downloaded from the SDL update area. However, the component still lists itself to be the unregistered version.

Answer:

1) you have an old unregistered version of the component somewhere lurking on your harddisk (use the file find utility of the Windows explorer to check that). If so, remove it, deinstall the shareware copy from the VCL and install the registered version again.

2) another often experienced reason can be found in the fact that the Hint property is just set to the shareware message (from previous usage of the unregistered component). In this case, you should simply change the Hint property and/or turn the ShowHint property off.

A simple check whether the registered or the unregistered component has been linked into your program can be performed by starting the application program without running Delphi and/or C++Builder on the system. If the application uses the unregistered component, the program should overwrite the component area with a copyright message. In this case see point 1 above, otherwise point 2.


Linker error when installing RChart
I run into linker error when installing RChart

See also:	Installation of RChart

Question:

I followed the installation instructions but got a linker error when installing RChart:

[Linker Err] Undefined symbol Rcbakbmp::Register[] __fastcall referenced ....

[Linker Err] Undefined symble Rccommon::Register[] __fastcall referenced .....

What's wrong ?

Answer:

Previous versions of RChart (earlier than release 4.00) needed two additional files, RCBAKBMP and RCCOMMON, which contained some basic routines and declarations. These files are not for VCL installation. The only purpose for these files was to circumvent the 64k restrictions of Delphi 1.0. Release 4.00 and higher of RChart does no longer support Delphi 1.0 and thus does not need these files anymore.

In case you encounter this error (if you use an older version of RChart), you tried to install one of these additional files along with RCHART into the VCL. Do not install them, just copy these files to the library directory of Delphi/C++Builder.


Moving the viewing port of RChart
How to quickly move the viewing port of RChart

See also:

With charts containing a large number of graphics items, you have to be careful to avoid triggering the OnPaint event more than once. One way to get the most speed is as follows:

1) Set the property AutoRedraw to false

2) Use the method SetRange to set the coordinates of the new viewing port at once.

3) Call the method ShowGraf

As a rule of thumb on the maximum speed of changing the viewport, you should compare to the pan action if the mouse property MouseAction is set to maPan.


PCA is too slow
The calculation if the principal components is too slow

See also:	CalcPrincComp

Question:

The principal component calculation of unit Math2 is so slow if there are many variables involved.

Answer:

If the calculation of the principal components is too slow, this usually arises from a transposed data matrix with a lot of columns but only a few rows. If you face such a problem you can dramatically speed up the calculations by transposing the data matrix prior to the calculation, and exchanging loadings and scores after it. Note that this trick only works if the number of rows is considerably less than the number of columns of the data matrix.


Frequently asked questions
 Frequently Asked Questions  /  Tips and Tricks

See also:

Registered vs. shareware versions; license and update policy

I can't get rid of the nag hints after buying the registered version

Do I have to pay any royalties if I develop a commercial application using your components ?

How many licenses are required, given that several programmers of our team are using SDL's components ?

If I purchase SDL components now, do I get any updates for the next release of Delphi/C++Builder ?

I loaded the registered version from your update area, however it seems that the downloaded software is a shareware copy

Tips and tricks, common problems

How to quickly move the viewing port of RChart

The principal component analysis is so slow with many variables

What is the maximum number of points RChart can display ?

The mouse cursor does not change to its default state when moved outside RChart.

I get an "access violation error", when using TMatrix.

Installation problems

I run into linker error when installing RChart

How to get SDL help suite installed so that Delphi help recognizes it.

I cannot install unit XYZ into the Delphi/C++Builder VCL


Royalties

See also:

Question:

Do I have to pay any royalties if I develop a commercial application using your components ?

Answer:

No, definitely not. You are free to use the registered components in your commerical applications without paying any royalties to us. However, you (1) must not give away any DCU or PAS files bought from us, and (2) you must not create and deploy any similar components based on our components.


Max. Number of Data Points
Maximum number of points RChart can display ?

See also:

Question:

What is the maximum number of points RChart can display ?

Answer:

The maximum number of points is limited only by computer memory. However, the display gets slower with more points in the chart. We have tested it with up to 100000 data points.


Site Licenses

See also:

Question:

Our development team consists of five programmers. How many licenses do you require to be purchased, given that each programmer will need a copy of the component installed on their machine? Are there any discounts available in this situation?

Answer:

You need a license for each of the programmers working with our components. However we offer the following discounts

2 licenses: -10%

3..5 licenses: -20%

6..10 licenses: -30%

more than 10 licenses: please ask

Each programmer of your team will be supported by our update policy as if he/she had ordered it by their own. This includes regular updates and hotline support by email.


Installation of SDL Help
Installation of SDL Help into Delphi/C++Builder

See also:

Question:

How to get SDL help suite installed so Delphi help recognizes it.

Answer:

Help files are a still unresolved problem with Delphi. If the keyword file is getting too large, then the help system crashes. So we recommend to install the SDL help into the Tools section of the Delphi IDE. This is less convenient but it works.


Access Violation Error
Access violation errors with TMatrix and TVector

See also:	TMatrix.Create

Question:

I am having some difficulty with matrix assignments. The following code produces access violation errors:

procedure TForm1.XXX (Sender: TObject);

var

  userdata : Tmatrix;

begin

userdata.Create(5,5);

userdata.elem[1,1] := 2.332;  <--- this assignment causes the problems

....

Answer:

You made a mistake in creating the matrix. The correct statement should read like this:

...

begin

userdata := TMatrix.Create (5,5);   <--- mind the difference !

userdata.elem[1,1] := 2.332;        <--- no problems any more

...


Mouse Cursor in RChart
Mouse cursor behavior in connection with RChart

See also:	MouseAction

Question:

When the mouse cursor moves out of the RChart component fast, it retains the cursor type assigned by the component (say, cross or hand). It does not happen when the mouse is moved slowly.

Answer:

This is not a problem of RChart but of the Windows messaging system. See also hint 1 in the MouseAction page of the RChart help file.


Updates
Updates for new compiler releases

See also:

Question:

If I purchase SDL components now, do I get any updates for the next release of Delphi/C++Builder ?

Answer:

If you purchase our components, you get all upgrades for future compiler versions for free (via our update server). More information on our update policy can be found on our web site: http://www.lohninger.com/udarea.html


Installation of non-visual components

See also:

Question:

I cannot install unit XYZ into the Delphi/C++Builder VCL. I get an undefined reference in the XYZ object that goes something like this:

Undefined reference XYA::Register() in .....

Answer:

Some of the SDL units are non-visual components (for example MATH1, or MATRIX, or CDATA, ...) which cannot be installed into the VCL palette. The units are to be used in your application by simply including the unit name into the uses statement of your program (don't forget to set the library path to your unit files).


Registered and Shareware Copies
 Registered version behaves like shareware copy

See also:	shareware Hint property

Question:

I loaded the registered version from the SDL update area, however it seems that the downloaded software is a shareware copy

Answer:

You can be assured that any copy obtained from our update server is registered. The most common reason for this problem is that there are several copies of the software (some shareware, some registered) lurking somewhere on your hard disk, and the linker/procject pathes point to an unregistered copy.