diff options
author | dos-reis <gdr@axiomatics.org> | 2011-09-15 18:48:07 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2011-09-15 18:48:07 +0000 |
commit | 12c856f9901ef3d6d82fb99855ecdf3e0b91484b (patch) | |
tree | 96fc5a4bf51d9777f8d46ac1e4023c0d8e545f8a /src/algebra/herm.as.pamphlet | |
parent | 9025c74466dcd1c38dde5e4c63934ff0b2e4f18d (diff) | |
download | open-axiom-12c856f9901ef3d6d82fb99855ecdf3e0b91484b.tar.gz |
* algebra/axtimer.as.pamphlet: Remove.
* algebra/ffrac.as.pamphlet: Likewise.
* algebra/herm.as.pamphlet: Likewise.
* algebra/interval.as.pamphlet: Likewise.
* algebra/invnode.as.pamphlet: Likewise.
* algebra/invrender.as.pamphlet: Likewise.
* algebra/invtypes.as.pamphlet: Likewise.
* algebra/invutils.as.pamphlet: Likewise.
* algebra/iviews.as.pamphlet: Likewise.
* algebra/ndftip.as.pamphlet: Likewise.
* algebra/nepip.as.pamphlet: Likewise.
* algebra/noptip.as.pamphlet: Likewise.
* algebra/nqip.as.pamphlet: Likewise.
* algebra/nrc.as.pamphlet: Likewise.
* algebra/nsfip.as.pamphlet: Likewise.
Diffstat (limited to 'src/algebra/herm.as.pamphlet')
-rw-r--r-- | src/algebra/herm.as.pamphlet | 369 |
1 files changed, 0 insertions, 369 deletions
diff --git a/src/algebra/herm.as.pamphlet b/src/algebra/herm.as.pamphlet deleted file mode 100644 index fb44b00f..00000000 --- a/src/algebra/herm.as.pamphlet +++ /dev/null @@ -1,369 +0,0 @@ -\documentclass{article} -\usepackage{open-axiom} -\begin{document} -\title{\$SPAD/src/algebra herm.as} -\author{Michael Richardson} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\begin{verbatim} --- N.B. ndftip.as inlines this, must be recompiled if this is. - --- To test: --- sed -ne '1,/^#if NeverAssertThis/d;/#endif/d;p' < herm.as > herm.input --- axiom --- )set nag host <some machine running nagd> --- )r herm.input -\end{verbatim} -\section{PackedHermitianSequence} -<<PackedHermitianSequence>>= -#include "axiom.as" - -INT ==> Integer ; -NNI ==> NonNegativeInteger ; -PHS ==> PackedHermitianSequence ; - -+++ Author: M.G. Richardson -+++ Date Created: 1995 Nov. 24 -+++ Date Last Updated: -+++ Basic Functions: -+++ Related Constructors: Vector -+++ Also See: -+++ AMS Classifications: -+++ Keywords: -+++ References: -+++ Description: -+++ This type represents packed Hermitian sequences - that is, complex -+++ sequences s, whose tails ("rest s", in Axiom terms) are conjugate to -+++ themselves reversed - by real sequences, in the "standard" manner; -+++ in this, the real parts of the elements of the first "half" of the -+++ tail are stored there and the imaginary parts are stored in reverse -+++ order in the second "half" of the tail. -+++ (If the tail has an odd number of elements, its middle element is -+++ real and is stored unchanged. The "halves" mentioned above then -+++ refer to the elements before and after the middle, respectively.) - -PackedHermitianSequence(R : CommutativeRing) : LinearAggregate(R) with{ - - pHS : List R -> % ; -++ pHS(l) converts the list l to a packedHermitianSequence. - - expand : % -> Vector Complex R ; -++ expand(h) converts the packedHermitianSequence h to a Hermitian -++ sequence (a complex vector). - - packHS : Vector Complex R -> % ; -++ packHS(v) checks that the complex vector v represents a Hermitian -++ sequences and, if so, converts it to a packedHermitianSequence; -++ otherwise an error message is printed. - - conjHerm : % -> % ; -++ conjHerm(h) returns the packedHermitianSequence which represents the -++ Hermitian sequence conjugate to that represented by h. - - coerce : % -> OutputForm -- shouldn't need this, should be inherited - -- from Vector. - -} == Vector(R) add { - Rep ==> Vector R; - import from Rep; - import from INT ; - import from R ; - import from Vector R ; - import from Complex R ; - import from Vector Complex R ; - import from ErrorFunctions ; - import from String ; - import from List String ; - - local (..)(a:INT,b:INT):Generator INT == { - generate { - t := a ; - while (t <= b) repeat { - yield t ; - t := t + 1 ; - } - } - } - - pHS(l : List R) : % == (vector l) pretend PHS R ; - - expand(h : %) : Vector Complex R == { - - local len : NNI ; - local nvals, npairs, n1, n2 : INT ; - local fullh : Vector Complex R ; - - { - len := # h ; - nvals := len pretend INT ; -- pretend since :: fails - npairs := (nvals - 1) quo 2 ; - fullh := new(len, 0) ; - (nvals = 0) => () ; - fullh.1 := complex(h.1,0) ; - (nvals = 1) => () ; - fullh.(npairs+2) := complex(h.(npairs+2),0) ; -- need if even length - -- (not worth testing) - for j in 1 .. npairs repeat { - n1 := j + 1 ; - n2 := nvals - j + 1 ; - fullh.n1 := complex(h.n1, h.n2) ; - fullh.n2 := complex(h.n1, -(h.n2)) ; - } - - } - - fullh - - } - - packHS(v : Vector Complex R) : % == { - - local len : NNI ; - local nonhs : String == "The argument of packHS is not Hermitian" ; - local nvals, testprs, n1, n2 : INT ; - local hpacked : Vector R ; - local v1, v2 : Complex R ; - local r1, i1, r2, i2 : R ; - - { - len := # v ; - nvals := len pretend INT ; -- pretend since :: fails - testprs := nvals quo 2 ; - hpacked := new(len, 0) ; - (nvals = 0) => () ; - if imag(v.1) ~= 0 - then error [nonhs, " - the first element must be real."] - else { - hpacked.1 := real(v.1) ; - (nvals = 1) => () ; - for j in 1 .. testprs repeat { - n1 := j + 1 ; - n2 := nvals - j + 1 ; - v1 := v.n1 ; - v2 := v.n2 ; - r1 := real v1 ; - i1 := imag v1 ; - r2 := real v2 ; - i2 := imag v2 ; - if r1 ~= r2 or i1 ~= -i2 - then if n1 = n2 - then error [nonhs, - " - element ", - string(n1), - " must be real to be self-conjugate."] - else error [nonhs, - " - elements ", - string(n1), - " and ", - string(n2), - " are not conjugate."] - else { - hpacked.n2 := i1 ; -- This order means that when the tail of v - hpacked.n1 := r1 ; -- has odd length, the (real part) of its - -- middle element ends up in that position. - } - } - } - } - - hpacked pretend % - - } - - local set!(x: %, i: INT, v: R): () == { - (rep x).i := v; - } - conjHerm(h : %) : % == { - - local len : NNI ; - local nvals, npairs : INT ; - local ch : % ; - - ch := copy h ; - len := # h ; - (len < 3) => ch ; -- these Hermitian sequences are self-conjugate. - nvals := len pretend INT ; -- pretend since :: fails - npairs := (nvals - 1) quo 2 ; - for j in (nvals - npairs + 1) .. nvals repeat ch.j := - h.j ; - ch - - } - - import from List OutputForm ; - - coerce(h : %) : OutputForm == - bracket commaSeparate [ - qelt(h, k) :: OutputForm for k in minIndex h .. maxIndex h] - -} - -#if NeverAssertThis - -)lib herm - -h0 := pHS([] :: List INT) - --- [] - -h1 := pHS [1] - --- [1] - -h2 := pHS [1,2] - --- [1,2] - -h3 := pHS [1,2,3] - --- [1,2,3] - -h4 := pHS [1,2,3,4] - --- [1,2,3,4] - -h5 := pHS [1,2,3,4,5] - --- [1,2,3,4,5] - - -f0 := expand h0 - --- [] - -f1 := expand h1 - --- [1] - -f2 := expand h2 - --- [1,2] - -f3 := expand h3 - --- [1,2 + 3%i,2 - 3%i] - -f4 := expand h4 - --- [1,2 + 4%i,3,2 - 4%i] - -f5 := expand h5 - --- [1,2 + 5%i,3 + 4%i,3 - 4%i,2 - 5%i] - -packHS f0 - --- [] - -packHS f1 - --- [1] - -packHS f2 - --- [1,2] - -packHS f3 - --- [1,2,3] - -packHS f4 - --- [1,2,3,4] - -packHS f5 - --- [1,2,3,4,5] - -packHS vector[%i,3,3,3] - --- Error signalled from user code: --- The argument of packHS is not Hermitian - the first element must --- be real. - -packHS vector [1, 3, 5, 7] - --- Error signalled from user code: --- The argument of packHS is not Hermitian - elements 2 and 4 are --- not conjugate. - -packHS [1, 3, %i, 3] - --- Error signalled from user code: --- The argument of packHS is not Hermitian - element 3 must be real --- to be self-conjugate. - -conjHerm h0 - --- [] - -conjHerm h1 - --- [1] - -conjHerm h2 - --- [1,2] - -conjHerm h3 - --- [1,2,- 3] - -conjHerm h4 - --- [1,2,3,- 4] - -conjHerm h5 - --- [1,2,3,- 4,- 5] - -output "End of tests" - -#endif -@ -\section{License} -<<license>>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<<license>> - -<<PackedHermitianSequence>> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} |