Personal tools

Numeric Quest

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(Added author's summaries)
(Remove manual line breaks)
Line 23: Line 23:
 
;[http://darcs.haskell.org/numeric-quest/Fraction.hs Fraction.hs]
 
;[http://darcs.haskell.org/numeric-quest/Fraction.hs Fraction.hs]
   
:This is a generalized Rational in disguise. Rational, as a type
+
:This is a generalized Rational in disguise. Rational, as a type synonim, could not be directly made an instance of any new class at all. But we would like it to be an instance of Transcendental, where trigonometry, hyperbolics, logarithms, etc. are defined. So here we are tiptoe-ing around, re-defining everything from scratch, before designing the transcendental functions -- which is the main motivation for this module.
:synonim, could not be directly made an instance of any new class
 
:at all.
 
:But we would like it to be an instance of Transcendental, where
 
:trigonometry, hyperbolics, logarithms, etc. are defined.
 
:So here we are tiptoe-ing around, re-defining everything from
 
:scratch, before designing the transcendental functions -- which
 
:is the main motivation for this module.
 
   
:Aside from its ability to compute transcendentals, Fraction
+
:Aside from its ability to compute transcendentals, Fraction allows for denominators zero. Unlike Rational, Fraction does not produce run-time errors for zero denominators, but use such entities as indicators of invalid results -- plus or minus infinities. Operations on fractions never fail in principle.
:allows for denominators zero. Unlike Rational, Fraction does
 
:not produce run-time errors for zero denominators, but use such
 
:entities as indicators of invalid results -- plus or minus
 
:infinities. Operations on fractions never fail in principle.
 
   
 
=== Polynomials ===
 
=== Polynomials ===
Line 31: Line 31:
 
;[http://darcs.haskell.org/numeric-quest/Roots.hs Roots.hs]
 
;[http://darcs.haskell.org/numeric-quest/Roots.hs Roots.hs]
   
:List of complex roots of a polynomial
+
:List of complex roots of a polynomial a0 + a1*x + a2*x^2...
:a0 + a1*x + a2*x^2...
 
   
 
=== General linear algebra ===
 
=== General linear algebra ===
Line 37: Line 37:
 
;[http://darcs.haskell.org/numeric-quest/Eigensystem.hs Eigensystem.hs]
 
;[http://darcs.haskell.org/numeric-quest/Eigensystem.hs Eigensystem.hs]
   
:This module extends the QuantumVector module by providing functions
+
:This module extends the QuantumVector module by providing functions to calculate eigenvalues and eigenvectors of Hermitian operators. Such toolkit is of primary importance due to pervasiveness of eigenproblems in Quantum Mechanics.
:to calculate eigenvalues and eigenvectors of Hermitian operators.
 
:Such toolkit is of primary importance due to pervasiveness of
 
:eigenproblems in Quantum Mechanics.
 
   
 
;[http://darcs.haskell.org/numeric-quest/EigensystemNum.hs EigensystemNum.hs]
 
;[http://darcs.haskell.org/numeric-quest/EigensystemNum.hs EigensystemNum.hs]
Line 45: Line 45:
 
;[http://darcs.haskell.org/numeric-quest/Tensor.lhs Tensor.lhs]
 
;[http://darcs.haskell.org/numeric-quest/Tensor.lhs Tensor.lhs]
   
:This is a quick sketch of what might be a basis of a real
+
:This is a quick sketch of what might be a basis of a real Tensor module.
:Tensor module.
 
   
:Datatype Tensor defined here is an instance
+
:Datatype Tensor defined here is an instance of class Eq, Show and Num. In addition, several customized operations are defined for variety of inner products.
:of class Eq, Show and Num.
 
:In addition, several
 
:customized operations are defined for
 
:variety of inner products.
 
   
 
:Tensor components are Doubles.
 
:Tensor components are Doubles.
   
:The shape of tensors defined here involves two parameters:
+
:The shape of tensors defined here involves two parameters: dimension and rank. Rank is associated with the depth of the tensor tree and corresponds to a total number of indices by which you can access the individual components.
:dimension and rank. Rank is associated with the
 
:depth of the tensor tree and corresponds to a total number
 
:of indices by which you can access the individual components.
 
   
 
=== Quantum mechanics ===
 
=== Quantum mechanics ===
Line 57: Line 57:
 
;[http://darcs.haskell.org/numeric-quest/QuantumVector.lhs QuantumVector.lhs]
 
;[http://darcs.haskell.org/numeric-quest/QuantumVector.lhs QuantumVector.lhs]
   
:This is our attempt to model the abstract Dirac's formalism
+
:This is our attempt to model the abstract Dirac's formalism of Quantum Mechanics in Haskell.
:of Quantum Mechanics in Haskell.
 
   
:We recognize a quantum state as an abstract vector | x >,
+
:We recognize a quantum state as an abstract vector | x >, which can be represented in one of many possible bases -- similar to many alternative representations of a 3D vector in rotated systems of coordinates. A choice of a particular basis is controlled by a generic type variable, which can be any Haskell object -- providing that it supports a notion of equality and ordering. A state which is composed of many quantum subsystems, not necessarily of the same type, can be represented in a vector space considered to be a tensor product of the subspaces.
:which can be represented in one of many possible bases -- similar
 
:to many alternative representations of a 3D vector in rotated systems
 
:of coordinates. A choice of a particular basis is controlled
 
:by a generic type variable, which can be any Haskell object
 
:-- providing that it supports a notion of equality and ordering.
 
:A state which is composed of many quantum subsystems, not
 
:necessarily of the same type, can be represented in a vector
 
:space considered to be a tensor product of the subspaces.
 
 
:With this abstract notion we proceed with Haskell definition of two
 
:vector spaces: Ket and its dual Bra. We demonstrate
 
:that both are properly defined according to the abstract
 
:mathematical definition of vector spaces. We then introduce inner
 
:product and show that our Bra and Ket can be indeed
 
:considered the vector spaces with inner product.
 
   
  +
:With this abstract notion we proceed with Haskell definition of two vector spaces: Ket and its dual Bra. We demonstrate that both are properly defined according to the abstract mathematical definition of vector spaces. We then introduce inner product and show that our Bra and Ket can be indeed considered the vector spaces with inner product.
   
 
[[Category:Mathematics]]
 
[[Category:Mathematics]]

Revision as of 12:00, 22 January 2007

Contents

1 Introduction

Numeric Quest is a collection of Haskell modules written by Jan Skibinski. The modules in Numeric Quest are useful for Mathematics in general, and Quantum Mechanics in particular.

Some of the modules in Numeric Quest are hosted on haskell.org. Those are summarized below.

Other modules in Numeric Quest are currently only available via the Internet Archive. See Jan Skibinski's Haskell page via the Internet Archive for more information.

2 Numeric Quest modules hosted on haskell.org

The following summaries are abstracted from the author's comments in the modules themselves.

2.1 Rational numbers

Fraction.hs
This is a generalized Rational in disguise. Rational, as a type synonim, could not be directly made an instance of any new class at all. But we would like it to be an instance of Transcendental, where trigonometry, hyperbolics, logarithms, etc. are defined. So here we are tiptoe-ing around, re-defining everything from scratch, before designing the transcendental functions -- which is the main motivation for this module.
Aside from its ability to compute transcendentals, Fraction allows for denominators zero. Unlike Rational, Fraction does not produce run-time errors for zero denominators, but use such entities as indicators of invalid results -- plus or minus infinities. Operations on fractions never fail in principle.

2.2 Polynomials

Roots.hs
List of complex roots of a polynomial a0 + a1*x + a2*x^2...

2.3 General linear algebra

Eigensystem.hs
This module extends the QuantumVector module by providing functions to calculate eigenvalues and eigenvectors of Hermitian operators. Such toolkit is of primary importance due to pervasiveness of eigenproblems in Quantum Mechanics.
EigensystemNum.hs

2.4 Tensors

Tensor.lhs
This is a quick sketch of what might be a basis of a real Tensor module.
Datatype Tensor defined here is an instance of class Eq, Show and Num. In addition, several customized operations are defined for variety of inner products.
Tensor components are Doubles.
The shape of tensors defined here involves two parameters: dimension and rank. Rank is associated with the depth of the tensor tree and corresponds to a total number of indices by which you can access the individual components.

2.5 Quantum mechanics

QuantumVector.lhs
This is our attempt to model the abstract Dirac's formalism of Quantum Mechanics in Haskell.
We recognize a quantum state as an abstract vector | x >, which can be represented in one of many possible bases -- similar to many alternative representations of a 3D vector in rotated systems of coordinates. A choice of a particular basis is controlled by a generic type variable, which can be any Haskell object -- providing that it supports a notion of equality and ordering. A state which is composed of many quantum subsystems, not necessarily of the same type, can be represented in a vector space considered to be a tensor product of the subspaces.
With this abstract notion we proceed with Haskell definition of two vector spaces: Ket and its dual Bra. We demonstrate that both are properly defined according to the abstract mathematical definition of vector spaces. We then introduce inner product and show that our Bra and Ket can be indeed considered the vector spaces with inner product.

This page contains a list of libraries and tools in a certain category. For a comprehensive list of such pages, see Libraries and tools.