Skip to content

Commit db394f1

Browse files
committed
Add midpoint for matrices and polynomials
1 parent 4b969bf commit db394f1

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

M2/Macaulay2/m2/intervals.m2

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,16 @@ isEmpty CCi := x -> isEmptyRRi realPart x or isEmptyRRi imaginaryPart x
123123
midpoint = method()
124124
midpoint Number := identity
125125
midpoint RRi := midpoint CCi := midpoint0
126+
midpoint RingElement := f -> (
127+
R := ring f;
128+
kk := coefficientRing R;
129+
S := R.cache#"midpoint ring" ??= (
130+
if instance(kk, RealIntervalField)
131+
then RR_(precision kk) monoid R
132+
else if instance(kk, ComplexIntervalField)
133+
then CC_(precision kk) monoid R
134+
else R);
135+
sum(listForm f, (m, c) -> midpoint c * product(#m, i -> S_i^(m#i))))
126136

127137
toExternalString RRi := x -> "interval" | toExternalString (left x, right x)
128138
toExternalString CCi := x -> "interval" | toExternalString (left realPart x+(left imaginaryPart x)*ii,right realPart x+(right imaginaryPart x)*ii)

M2/Macaulay2/m2/matrix.m2

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,8 @@ leadComponent = method()
781781
leadComponent Matrix := List => m -> nonnull for c to numColumns m - 1 list position(numRows m, r -> m_(r,c) != 0, Reverse => true)
782782
leadComponent Vector := ZZ => v -> try first leadComponent matrix v else null
783783

784+
midpoint Matrix := f -> matrix apply(entries f, row -> midpoint \ row)
785+
784786
-- Local Variables:
785787
-- compile-command: "make -C $M2BUILDDIR/Macaulay2/m2 "
786788
-- End:

M2/Macaulay2/packages/Macaulay2Doc/doc_intervals.m2

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,10 @@ doc ///
4646
Key
4747
midpoint
4848
(midpoint, CCi)
49+
(midpoint, Matrix)
4950
(midpoint, Number)
5051
(midpoint, RRi)
52+
(midpoint, RingElement)
5153
Headline
5254
midpoint of an interval
5355
Usage
@@ -68,6 +70,19 @@ Description
6870
Example
6971
interval(2 + 3*ii, 4 + 7*ii)
7072
midpoint oo
73+
Text
74+
The midpoint of a matrix is the matrix containing the midpoints of
75+
its entries.
76+
Example
77+
A = matrix{{interval(1,3), interval(3,5)}, {interval(5,7), interval(7,9)}}
78+
midpoint A
79+
Text
80+
The midpoint of a polynomial is obtained by taking the midpoints of the
81+
coefficients.
82+
Example
83+
R = RRi[x,y,z]
84+
f = interval(1,3)*x + interval(3,5)*y + interval(5,7)*z
85+
midpoint f
7186
SeeAlso
7287
left
7388
right

M2/Macaulay2/tests/normal/RRi.m2

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,14 @@ assert isSubset(K^2,K*K)
119119
assert not isSubset(K*K,K^2)
120120
assert isSubset(toCCi(interval(-14,17),interval(-10,24)),L*K)
121121

122+
A = matrix{{interval(1,3), interval(3,5)}, {interval(5,7), interval(7,9)}}
123+
assert(midpoint A == matrix(RR, {{2, 4}, {6, 8}}))
124+
125+
R = RRi[x,y,z]
126+
f = interval(1,3)*x + interval(3,5)*y + interval(5,7)*z
127+
use ring midpoint f
128+
assert(midpoint f == 2*x + 4*y + 6*z)
129+
122130
--- TO FIX: ---------------------------------------------
123131

124132
-*

0 commit comments

Comments
 (0)