FindIntegerNullVector

FindIntegerNullVector[{x1,x2,,xn}]

finds a list of integers such that .

FindIntegerNullVector[{x1,x2,,xn},d]

finds a list of integers with TemplateBox[{{{, {{a, _, 1}, ,, ..., ,, {a, _, n}}, }}}, Norm]<=d such that .

Details and Options

  • FindIntegerNullVector is also known as PSLQ or number identification.
  • Not all ai are zero. The numbers xi can be real or complex. For complex numbers xi the numbers ai are Gaussian integers.
  • In FindIntegerNullVector[{x1,x2,},d] no integer null vector may exist with the given norm bound. The input is then returned unevaluated.
  • The following options can be given:
  • WorkingPrecisionAutomaticprecision to use in internal computation
    ZeroTestAutomaticmethod to test whether a number is zero
  • The setting ZeroTest->Automatic automatically determines the method to test the integer relation .
  • For inexact numbers xi, the relation found holds up to the precision of the input. For exact numbers xi, the relation found is validated using PossibleZeroQ.
  • For inexact numbers xi and WorkingPrecision->Automatic the precision is taken to be the precision of the input.
  • For exact numbers xi and WorkingPrecision->Automatic the precision is taken to start with MachinePrecision and use up to $MaxExtraPrecision extra precision when searching for an integer null vector when no norm bound d is specified. In the case of a norm bound d, enough precision is used to either find a null vector or prove that none exist.

Examples

open allclose all

Basic Examples  (3)

Exact input:

Inexact input:

Exact input with norm bound:

There is no null vector with norm less than or equal to 2:

Scope  (6)

This finds an integer null vector for a vector of exact real numbers:

This proves that there is no null vector with norm less than or equal to 8:

For a bound close to the norm of a null vector you may not get proof that no null vector exists:

The returned null vector does not satisfy the norm bound:

FindIntegerNullVector cannot prove that numbers are linearly independent over the integers:

It can prove that there is no integer null vector with norm less than or equal to a given bound:

For inexact input, the relation is true up to the precision of the input:

No null vector exists for the given norm bound:

Here no null vector is found, but nonexistence of a null vector is proven only for a smaller norm bound:

This finds a null vector for a 20-digit approximation of :

The result is not a null vector for the exact vector :

A null vector found for a higher-precision approximation of is also a null vector for :

This gives a Gaussian integer null vector for a vector of exact complex numbers:

This finds a Gaussian integer null vector for a vector of approximate complex numbers:

Options  (2)

WorkingPrecision  (1)

By default, precision of at most $MachinePrecision+$MaxExtraPrecision digits is used:

Using a higher WorkingPrecision allows you to find a null vector:

ZeroTest  (1)

By default, PossibleZeroQ with Method->"ExactAlgebraics" is used to prove relations:

This uses exact methods to prove the relation:

This uses a high-precision numeric test instead:

Applications  (2)

Find coefficients of the minimal polynomial of an algebraic number:

This finds the minimal polynomial using symbolic methods:

Find a relation between transcendental numbers:

Properties & Relations  (3)

FindIntegerNullVector returns an integer null vector for the given vector:

An integer null vector is a nontrivial integer solution of a homogeneous linear equation:

Use FindInstance to find solutions of equations:

Find coefficients of the minimal polynomial of an algebraic number using its approximation:

Use RootApproximant to find an algebraic number using its approximation:

Possible Issues  (2)

The precision of an approximation may not be sufficient to find a relation between numbers:

Using a higher-precision approximation, you get a true relation:

Numeric zero testing used for nonalgebraic numbers may allow results that are not null vectors:

This gives the precision used in zero testing when no symbolic zero-testing method applies:

With a higher zero-testing precision, FindIntegerNullVector correctly rejects the vector:

Reset the system option to the original value:

Introduced in 2010
 (8.0)