.Net Framework 4.0: Kompleksarvude tugi

02.11.2009  |  Gunnar

Oi kui keeruline .Net Framework 4.0 uus beta toob System.Numerics nimeruumis seni üksi nukrutsenud BigInteger klassile sõbra, milleks on kompleksarv. Klass kannab nime Complex ning käesolev kanne tutvustab lühidalt uut matemaatikut .Net raamistikus.

Kompleksarvu loomiseks on kaks konstruktorit. Neist esimene argumente ei taha, teine aga küsib reaal- ja imaginaarosa väärtused reaalarvudena. Järgmiseks näide, kus lisaks konstruktoritele näeme ka omadusi mooduli (magnitude) ja argumendi (phase) jaoks.

static void Main(string[] args)
{
    var z1 = new Complex(); // reaal- ja imaginaarosad on nullid (0, 0)
    var z2 = new Complex(2, 4);
    var z3 = new Complex(3, 5);
 
    Console.WriteLine("Complex zero: " + z1);
    Console.WriteLine(z2 + " + " + z3 + " = " + (z2 + z3));
 
    Console.WriteLine("|z2| = " + z2.Magnitude);
    Console.WriteLine("Phase of z2 = " + z2.Phase);
 
    Console.ReadLine();
}

Näide tekitab käivitamisel järgmise väljundi.

    Complex zero: (0, 0)
    (2, 4) + (3, 5) = (5, 9)
    |z2| = 4,47213595499958
    Phase of z2 = 1,10714871779409

Paar lahedat asja, mis silma hakkavad:

  • ToString() meetod tagastab kompleksarvu Cartesiuse vormis,
  • kompleksarve saab kasutada nagu kõiki teisi arvutüüpe.

Kui mingil põhjusel operaatorite ülelaadimisel töötav klassikaline tehete süntaks ei sobi, siis pakub Complex klass välja terve rivi staatilisi meetode arvutuste tegemiseks. Järgmine näide tutvustab nelja põhitehet.

static void Main(string[] args)
{
    var z2 = new Complex(2, 4);
    var z3 = new Complex(3, 5);
 
    var z4 = Complex.Add(z2, z3);
    var z5 = Complex.Subtract(z2, z3);
    var z6 = Complex.Multiply(z2, z3);
    var z7 = Complex.Divide(z2, z3);
 
    Console.WriteLine("z2 + z3 = " + z4);
    Console.WriteLine("z2 - z3 = " + z5);
    Console.WriteLine("z2 * z3 = " + z6);
    Console.WriteLine("z2 / z3 = " + z7);
 
    Console.ReadLine();
}

Väljund tuleb käivitamisel selline.

    z2 + z3 = (5, 9)
    z2 - z3 = (-1, -1)
    z2 * z3 = (-14, 22)
    z2 / z3 = (0,764705882352941, 0,0588235294117647)

Staatilisi meetodeid on tegelikult rohkem – näiteks trigonomeetrilised tehted ja logaritmid. Pluss veel veidi pudi-padi, mis kasulikuks võib osutuda. Asi, mis hetkel (veel?) puudu on, on Parse() ja TryParse() meetodid. Loodan, et esimeses valmis versioonis on need ka olemas.

2 kommentaari sissekandele “.Net Framework 4.0: Kompleksarvude tugi”

  1. Robert Hudjakov

    Tore, et nad vaikselt matemaatikat .NET teekidesse lisavad. Neljandas versioonis võiksid nad juba end kokku võtta ja kogu matemaatika ühte nimeruumi paigutada ning koos töötama panna. Hetkel juba imelik windows.forms programmi WPF ainult 3D maatriksi pärast sisse linkida.
    PS! Quaternion on neil versioonist kolm juba sees, kuid see natuke poolik.

  2. Gunnar

    Heh, Robert! :)

    BigInteger oleks juba eelmisesse versiooni tulnud, kuid mingil põhjusel jäi see sealt välja. Aga olemas ja stardivalmis ta igal juhul oli. Mis muud matemaatikat puudutab, siis ma ei oska kuidgai hinnata, kas selles osas midagi lähitulevikus paremaks läheb. Kui on tegemist tõsise matemaatikaga programmis, siis tasub kindlasti kaaluda mõne sissetöötanud matemaatika teegi kasutamist.

Kommenteeri

sulge
Saada link e-postiga

© DT 2010 | Creative Commons Attribution-Noncommercial 3.0 License | WordPress