SharedSage genom exempel / Mängder.sagewsOpen in CoCalc

Mängder

Man deklarerar en mängd med hjälp av funktionen Set. Tänk på att i en mängd har ordningen av elementet ingen betydelse och det får inte förekomma dubbletter.
U = Set(range(4))
U
{0, 1, 2, 3}
A = Set([1, 4, 7, 10, 13, 17, 7])
A
{1, 4, 17, 7, 10, 13}
B = Set([2, 2, 0, 2, 0])  # dubbletter tas automatiskt bort
B
{0, 2}
C = Set()  # tomma mängden
C
{}
MP = Set(['Pari/GP', 'Mathematica', 'Sage'])  # matematikprogroam (MP)
MP
{'Mathematica', 'Pari/GP', 'Sage'}
Talmängderna Z\mathbb{Z}, Q\mathbb{Q}, R\mathbb{R} och C\mathbb{C} är implementerade i Sage som ZZ, QQ, RR respektive CC.
ZZ
Integer Ring
CC
Complex Field with 53 bits of precision
typeset_mode(True)
RR
R\displaystyle \Bold{R}
De reella talen representeras med hjälp av flyttal. Med andra ord närmevärden.
typeset_mode(False)
RR
Real Field with 53 bits of precision
Med operatorn in kan man kontrollera om ett specifikt element tillhör en mängd.
3 in U
True
3 in A
False
sqrt(2) in QQ
False
sqrt(2) in RR
True
i in CC
True
'Sage' in MP
True
'Matlab' in MP
False
Vi kan kontrollera om en mängd är tom.
A.is_empty(), C.is_empty()
(False, True)
Antal element i en ändlig kontra oändlig mängd.
B.cardinality()
2
ZZ.cardinality()
+Infinity
Med funktionen subsets konstruerar man mängden av alla delmängder till en mängd, vilket bl.a. kan användas för att avgöra om en mängd är en delmängd till en mängd.
potensU = U.subsets()
potensU  # notera att Sage inte skriver ut alla delmängder
Subsets of {0, 1, 2, 3}
potensU.cardinality()
16
potensU.list()
[{}, {0}, {1}, {2}, {3}, {0, 1}, {0, 2}, {0, 3}, {1, 2}, {1, 3}, {2, 3}, {0, 1, 2}, {0, 1, 3}, {0, 2, 3}, {1, 2, 3}, {0, 1, 2, 3}]
A in potensU  # 'är A en delmängd till U?'
False
B in potensU  # 'är B en delmängd till U?'
True
U in potensU  # 'är U en delmängd till sig själv?'
True
Set() in potensU  # tomma mängden är en delmängd till alla mängder
True
Mängdoperationerna union, snitt och differens är implementerade i Sage.
U = Set(range(7))  # universalmängd
A = Set([1, 2, 4, 6])
B = Set([1, 3, 4, 5])
C = Set([2, 3, 4])
A.union(B)
{1, 2, 3, 4, 5, 6}
A.intersection(C)
{2, 4}
A.difference(B)  # A minus B
{2, 6}
U.difference(A)  # komplementet till A
{0, 3, 5}
Att ta bort och lägga till element i en mängd är enkelt med hjälp av mängdoperationerna.
A = A.union(Set([0]))  # lägg till 0
A
{0, 1, 2, 4, 6}
A = A.difference(Set([4]))  # ta bort 4
A
{0, 1, 2, 6}
Den cartesiska produkten A×B={(a,b):aAbB}A \times B = \{(a, b) : a \in A \land b \in B\} konstrueras med funktionen cartesian_product.
A = Set([1, 2])
B = Set([4, 5, 6])
AxB = A.cartesian_product(B)
AxB
The Cartesian product of ({1, 2}, {4, 5, 6})
AxB.cardinality()
6
AxB.an_element()  # plockar ut slumpmässigt en av elementen i mängden
(1, 4)
Notera att varje element är ett par (tupel). När detta skrivs är inte list definierad för cartesiska produkten. Därför gör vi om den till en mängd för att kunna skriva ut samtliga element.
Set(AxB)
{(2, 6), (1, 4), (1, 5), (1, 6), (2, 5), (2, 4)}
AxB  # ovanstående kod förändrade inte AxB (för det krävs tilldelning)
The Cartesian product of ({1, 2}, {4, 5, 6})
Vi kan t.ex. enkelt kontrollera om ett par tillhör A×BA \times B.
(2, 4) in AxB
True