ckunta.nb

Kompleksilukujen kunnan konstruointi

Seuraava esitys osoittaa, miten kompleksilukujoukko voidaan määritellä tunnetuista reaalisista käsitteistä lähtien. Määrittelyjen jälkeen on helppoa osoittaa Mathematican laskentamahdollisuuksia käyttäen, että tulos on algebralliselta rakenteeltaan kunta.

Laskutoimistusten määrittely joukkoon ^2

Lähtökohtana on xy-taso, ts. joukko ^2, jonka alkioiden välille määritellään yhteen- ja kertolasku. Alkiot ovat lukupareja, Mathematican terminologialla kaksialkioisia listoja. Määrittelyä varten muodostetaan aluksi testi, joka tarkistaa, että funkion argumentit ovat sallittua tyyppiä:

In[1]:=

ctest[z_] := Head[z] List && Length[z] 2

Laskutoimitukset ovat kahden argumentin funktioita, joiden arvona on argumenttien summa ja tulo siten kuin ne kompleksiluvuille määritellään:

In[2]:=

summa[z_ ? ctest, w_ ? ctest] := {z_〚1〛 + w_〚1〛, z_〚2〛 + w_〚2〛}

In[3]:=

tulo[z_ ? ctest, w_ ? ctest] := {z_〚1〛 w_〚1〛 - z_〚2ӏ ... 14;2〛, z_〚1〛 w_〚2〛 + z_〚2〛 w_〚1〛}

Merkintä z_〚k〛 viittaa listan z k:nteen alkioon.

Jotta päästään luonnollisempiin summan ja tulon merkintöihin, asetetaan Mathematicassa valmiiksi määritelty (mutta merkitystä vailla oleva) funktio CirclePlus tarkoittamaan funktiota summa, vastaavasti CircleTimes tarkoittamaan funktiota tulo. Tällöin laskutoimitusten symboleina voidaan käyttää renkaan sisässä olevia plus- ja kertomerkkejä (vinoristiä).

In[4]:=

CirclePlus = summa ;

In[5]:=

CircleTimes = tulo ;

Tämän jälkeen laskutoimitukset toimivat normaaliin tapaan:

In[6]:=

{1, 2} ⊕ {3, 4}

Out[6]=

{4, 6}

In[7]:=

{1, 2} ⊗ {3, 4}

Out[7]=

{-5, 10}

Nolla, ykkönen ja imaginaariyksikkö ovat erikoisasemassa olevia kompleksilukuja ja näille annetaan omat nimet:

In[8]:=

o = {0, 0}

Out[8]=

{0, 0}

In[9]:=

e = {1, 0}

Out[9]=

{1, 0}

In[10]:=

i = {0, 1}

Out[10]=

{0, 1}

Tälöin pätee

In[11]:=

i⊗i -e

Out[11]=

True

Tuloksena on saatu yhteen- ja kertolaskulla varustettu kompleksilukujen joukko C.

Kuntastruktuuri

Joukko C voidaan osoittaa kunnaksi tarkistamalla kunta-aksioomien voimassaolo. Näissä esiintyy kolme mielivaltaisesti valittua kompleksilukua, joten luodaan kolme symbolista kaksialkioista listaa:

In[12]:=

a = {α_1, α_2} ; b = {β_1, β_2} ; c = {γ_1, γ_2} ;

Näitä käyttäen tarkistetaan kunta-aksioomien voimassaolo yksi kerrallaan.

Yhteenlaskun vaihdannaisuus:

In[13]:=

a⊕bb⊕a

Out[13]=

True

Yhteenlaskun liitännäisyys:

In[14]:=

(a⊕b) ⊕ca⊕ (b⊕c)

Out[14]=

True

Yhteenlaskun neutraalialkio on nolla-alkio o:

In[15]:=

a⊕oa

Out[15]=

True

Alkion  a={α_1,α_2} vasta-alkio löydetään ratkaisemalla yhtälö:

In[16]:=

x = {ξ_1, ξ_2} ;

In[17]:=

Solve[a⊕xo, x]

Out[17]=

{{ξ_1 -α_1, ξ_2 -α_2}}

In[18]:=

x/.%[[1]]

Out[18]=

{-α_1, -α_2}

Kertolaskun vaihdannaisuus:

In[19]:=

a⊗bb⊗a

Out[19]=

True

Kertolaskun liitännäisyys, missä tarvitaan eksplisiittinen sievennyskäsky:

In[20]:=

(a⊗b) ⊗ca⊗ (b⊗c)

Out[20]=

{(α_1 β_1 - α_2 β_2) γ_1 - (α_2 β_1 + α_1 β_2)  ... 5;_1 (β_2 γ_1 + β_1 γ_2) + α_2 (β_1 γ_1 - β_2 γ_2)}

In[21]:=

%//Simplify

Out[21]=

True

Kertolaskun neutraalialkio on ykkösalkio e:

In[22]:=

a⊗ea

Out[22]=

True

Alkion  a={α_1,α_2} käänteisalkio löydetään ratkaisemalla yhtälö:

In[23]:=

Solve[a⊗xe, x]

Out[23]=

{{ξ_1α_1/(α_1^2 + α_2^2), ξ_2 -α_2/(α_1^2 + α_2^2)}}

In[24]:=

x/.%[[1]]

Out[24]=

{α_1/(α_1^2 + α_2^2), -α_2/(α_1^2 + α_2^2)}

Osittelulaki:

In[25]:=

a⊗ (b⊕c)  (a⊗b) ⊕ (a⊗c)

Out[25]=

{α_1 (β_1 + γ_1) - α_2 (β_2 + γ_2), α_2 (β_1 + γ ... #945;_2 γ_2, α_2 β_1 + α_1 β_2 + α_2 γ_1 + α_1 γ_2}

In[26]:=

%//Simplify

Out[26]=

True

Koska kaikki kunta-aksioomat ovat voimassa, joukko C varustettuna edellä määritellyillä laskutoimituksilla on todellakin kunta.

Lisäyksiä laskutoimitusten määrittelyyn

Koska sekä summa että tulo ovat liitännäisiä, olisi luontevaa sallia sulkujen poisjättäminen useamman termin summassa ja useamman tekijän tulossa. Ilman lisämäärittelyjä tämä ei kuitenkaan onnistu, koska funktiot summa ja tulo on edellä määritelty vain kahden argumentin tapauksessa.

In[27]:=

a⊕b⊕c

Out[27]=

summa[{α_1, α_2}, {β_1, β_2}, {γ_1, γ_2}]

Tarvittavat lisämäärittelyt ovat seuraavat:

In[28]:=

summa[z_ ? ctest] := z

In[29]:=

summa[z__ ? ctest, w__ ? ctest] := summa[summa[z], summa[w]]

In[30]:=

tulo[z_ ? ctest] := z

In[31]:=

tulo[z__ ? ctest, w__ ? ctest] := tulo[tulo[z], tulo[w]]

Tämän jälkeen sulkujen poisjättäminen tai mielivaltainen ryhmittely toimii:

In[32]:=

a⊕b⊕c

Out[32]=

{α_1 + β_1 + γ_1, α_2 + β_2 + γ_2}

In[33]:=

a⊕b⊕c⊕a⊕b⊕c⊕a

Out[33]=

{3 α_1 + 2 β_1 + 2 γ_1, 3 α_2 + 2 β_2 + 2 γ_2}

In[34]:=

a⊗a⊗a

Out[34]=

{-2 α_1 α_2^2 + α_1 (α_1^2 - α_2^2), 2 α_1^2 α_2 + α_2 (α_1^2 - α_2^2)}

In[35]:=

lasku1 = (a⊗ (a⊗a) ⊗b) ⊗ (c⊗a)

Out[35]=

{-(α_2 ((α_1^2 - α_2^2) β_1 - 2 α_1 α_2 β_2) + α_1 ( ... #945;_2 β_1 + (α_1^2 - α_2^2) β_2)) (α_1 γ_1 - α_2 γ_2)}

In[36]:=

lasku2 = a⊗ (((a⊗a) ⊗b) ⊗c⊗a)

Out[36]=

{α_1 (-(2 α_1 α_2 β_1 + (α_1^2 - α_2^2) β_2) (α_2 &# ... #945;_2 β_1 + (α_1^2 - α_2^2) β_2) (α_1 γ_1 - α_2 γ_2))}

In[37]:=

lasku1 - lasku2//Simplify

Out[37]=

{0, 0}

Summan ja tulon laskujärjestystä ei tarvitse erikseen määritellä, sillä Mathematicassa on valmiina määrittely, jonka mukaan lasketaan ensin ja sen jälkeen:

In[38]:=

(a⊗b) ⊕ (a⊗c) a⊗b⊕a⊗c

Out[38]=

True

Myös ei-negatiivinen kokonaislukupotenssi voidaan määritellä:

In[39]:=

pottest[n_] := IntegerQ[n] &&NonNegative[n]

In[40]:=

z_ ? ctest⋄n_ ? pottest := Nest[z⊗#&, e, n]

Huomaa, että symbolina ei ole tavallinen hattumerkki,vaan pieni vinoneliö!

In[41]:=

a⋄2//ExpandAll

Out[41]=

{α_1^2 - α_2^2, 2 α_1 α_2}

In[42]:=

pot1 = a⋄5⊗b⋄3//ExpandAll

Out[42]=

{α_1^5 β_1^3 - 10 α_1^3 α_2^2 β_1^3 + 5 α_1 α_2^4 β_ ...  α_1^5 β_2^3 + 10 α_1^3 α_2^2 β_2^3 - 5 α_1 α_2^4 β_2^3}

In[43]:=

pot2 = a⊗a⊗a⊗a⊗a⊗b⊗b⊗b//ExpandAll

Out[43]=

{α_1^5 β_1^3 - 10 α_1^3 α_2^2 β_1^3 + 5 α_1 α_2^4 β_ ...  α_1^5 β_2^3 + 10 α_1^3 α_2^2 β_2^3 - 5 α_1 α_2^4 β_2^3}

In[44]:=

pot1 - pot2//Simplify

Out[44]=

{0, 0}

Siirtyminen kompleksilukujen tavanomaiseen esitykseen

Edellä on rakennettu kompleksilukuaritmetiikkaa Mathematicaan tarkoituksena osoittaa, miten tämä määritelmien pohjalta tulisi periaatteessa tehdä. Lopuksi on syytä katsoa, miten voidaan siirtyä kompleksilukujen tavanomaiseen esitykseen, mikä toki on Mathematicassa valmiinakin. Edellä käsitellyt kaksialkioisen listan muotoiset kompleksiluvut voidaan muuntaa normaaliin muotoon funktiolla

In[45]:=

normMuoto[z_ ? ctest] := z_〚1〛 +  z_〚2〛

Tässä i tarkoittaa imaginaariyksikköä. Esimerkiksi:

In[46]:=

normMuoto[a]

Out[46]=

α_1 +  α_2

In[47]:=

normMuoto[a⋄2]

Out[47]=

α_1^2 + 2  α_1 α_2 - α_2^2

In[48]:=

ipot = Table[i⋄n, {n, 0, 10}]

Out[48]=

{{1, 0}, {0, 1}, {-1, 0}, {0, -1}, {1, 0}, {0, 1}, {-1, 0}, {0, -1}, {1, 0}, {0, 1}, {-1, 0}}

In[49]:=

Map[normMuoto, ipot]

Out[49]=

{1, , -1, -, 1, , -1, -, 1, , -1}

Varsinaisesti kompleksiluvuilla laskettaessa ne syötetään Mathematicassa suoraan normaalimuodossa. Laskutoimitussymbolit ovat samoja kuin reaalisten muuttujien tapauksessa. Esimerkiksi:

In[50]:=

(2 + 3 ) (4 + 5 )

Out[50]=

-7 + 22 

In[51]:=

(2 + 3 )/(4 + 5 )

Out[51]=

23/41 + (2 )/41

In[52]:=

Table[^n, {n, 0, 10}]

Out[52]=

{1, , -1, -, 1, , -1, -, 1, , -1}

Harjoitustehtäviä

1) Laske kompleksilukujen z_1=-5+7i ja z_2=-2-11i summa, tulo ja osamäärä sekä edellä olevan määritelmän mukaisella formalismilla että normaalia tapaa käyttäen.

2) Laske kompleksilukujen z_1= cos(φ_1)+i sin(φ_1) ja z_2= cos(φ_2)+i sin(φ_2) tulo ja osamäärä sekä luvun z_1 käänteisluku edellä olevan määritelmän mukaisesti. Sievennä tulokset.

3) Määrittele funktiot, jotka antavat reaalilukuparina esitetyn kompleksiluvun liittoluvun ja itseisarvon. Tarkista näitä käyttäen, että seuraavat yhtälöt ovat voimassa kaikille kompleksiluvuille: a) Overscript[z_1 + z_2, ─]=Overscript[z, _] _1+Overscript[z, _] _2, b) Overscript[z_1 z_2, ─]=Overscript[z, _] _1 Overscript[z, _] _2, c) Overscript[Overscript[z, _], _]=z, d) |Overscript[z, _]|=|z|, e) z Overscript[z, _]=|z|^2, f) |z_1 z_2|=|z_1||z_2|.

Simo K. Kivelä    23.4.2005


Created by Mathematica  (September 22, 2005) Valid XHTML 1.1!