spad
)abbrev domain QFORM QuadraticForm
QuadraticForm(n, K): T == Impl where
n: PositiveInteger
K: Field
SM ==> SquareMatrix
V ==> DirectProduct
T ==> AbelianGroup with
quadraticForm: SM(n, K) -> %
++ quadraticForm(m) creates a quadratic form from a symmetric,
++ square matrix m.
matrix: % -> SM(n, K)
++ matrix(qf) creates a square matrix from the quadratic form qf.
elt: (%, V(n, K)) -> K
++ elt(qf,v) evaluates the quadratic form qf on the vector v,
++ producing a scalar.
coerce: % -> InputForm
Impl ==> SM(n,K) add
Rep := SM(n,K)
import List InputForm
coerce(q:%):InputForm ==
convert(['quadraticForm,algCoerceInteractive(q,SM(n,K),
InputForm)$Lisp pretend InputForm])
quadraticForm m ==
not symmetric? m =>
error "quadraticForm requires a symmetric matrix"
m::%
matrix q == q pretend SM(n,K)
elt(q,v) == dot(v, (matrix q * v))
spad
Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/8477497384498161981-25px001.spad
using old system compiler.
QFORM abbreviates domain QuadraticForm
------------------------------------------------------------------------
initializing NRLIB QFORM for QuadraticForm
compiling into NRLIB QFORM
importing List InputForm
compiling exported coerce : $ -> InputForm
****** comp fails at level 3 with expression: ******
error in function coerce
(|convert|
(|construct| '|quadraticForm| | << |
(|pretend|
((|elt| |Lisp| |algCoerceInteractive|) |q|
(|SquareMatrix| |n| K) (|InputForm|))
(|InputForm|))
| >> |))
****** level 3 ******
$x:= (pretend ((elt Lisp algCoerceInteractive) q (SquareMatrix n K) (InputForm)) (InputForm))
$m:= (Symbol)
$f:=
((((|q| # #) (|#| #) (< #) (<= #) ...)))
>> Apparent user error:
Cannot coerce (algCoerceInteractive q (SquareMatrix n K) (InputForm))
of mode (InputForm)
to mode (Symbol)
fricas
)show QuadraticForm
QuadraticForm(n: PositiveInteger,K: Field) is a domain constructor
Abbreviation for QuadraticForm is QFORM
This constructor is exposed in this frame.
------------------------------- Operations --------------------------------
?*? : (Integer,%) -> % ?*? : (PositiveInteger,%) -> %
?+? : (%,%) -> % ?-? : (%,%) -> %
-? : % -> % ?=? : (%,%) -> Boolean
0 : () -> % coerce : % -> OutputForm
?.? : (%,DirectProduct(n,K)) -> K hash : % -> SingleInteger
latex : % -> String matrix : % -> SquareMatrix(n,K)
opposite? : (%,%) -> Boolean sample : () -> %
zero? : % -> Boolean ?~=? : (%,%) -> Boolean
?*? : (NonNegativeInteger,%) -> %
convert : % -> InputForm if SquareMatrix(n,K) has KONVERT(INFORM)
hashUpdate! : (HashState,%) -> HashState
quadraticForm : SquareMatrix(n,K) -> %
subtractIfCan : (%,%) -> Union(%,"failed")
fricas
parse(s:String):InputForm == ncParseFromString(s)$Lisp pretend InputForm
Function declaration parse : String -> InputForm has been added to
workspace.
Type: Void
fricas
parse("Integer")
fricas
Compiling function parse with type String -> InputForm
Test
fricas
qf := quadraticForm matrix [[1,2],[2,-1]]
Type: QuadraticForm
?(2,
Fraction(Integer))
fricas
qf::InputForm
fricas
unparse %
Type: String
fricas
parse %
fricas
interpret(%)$INFORM1(QuadraticForm(2,Fraction Integer))
Type: QuadraticForm
?(2,
Fraction(Integer))