piatok, 22 február 2013 09:42 Written by 3785 times
Rate this item
(3 votes)

C# - Komplexné čísla

Väčšiná z Vás už komplexné čísla pozná, pre tých, ktorí už zabudli si to v skrátke zopakujeme.  Komplexné čísla sa od reálnych líšia svojím zápisom.  Kým na zápis reálneho čísla potrebujeme iba jedno reálne číslo, ktoré určuje jeho polohu na číselnej osi, na zápis komplexného čísla potrebujeme dve reálne čísla.

Komplexné číslo potom zapíšeme ako výraz z = a + i*b , kde a je jeho reálna časť, b je jeho imaginárna časť a i (tiež označované ako j) je jednotkový vektor imaginárnej osi y. Podobne je číslo 1 jednotkovým vektorom v smere osi x.
 
Operácie z komplexnými číslami:
 
Dve komplexné čísla sú rovnaké práve vtedy, ak reálna časť prvého čísla je rovnaká ako reálna časť druhého a súčastne aj imaginárne časti su rovnaké.
 
c1.Re == c2.Re && c1.Im == c2.Im
 
Dve komplexné čísla sčítavame tak, že sčítame reálnu čast prvého čísla s reálnou časťou druhého a súčastne sčítame aj imaginárnu časť prvého z imaginárnou časťou druhého čísla.
 
z = (c1.Re + c2.Re) + i*(c1.Im + c2.Im)
 
Dve komplexné čísla odčítame tak, že odčítame reálnu čast prvého čísla s reálnou časťou druhého a súčastne odčítame aj imaginárnu časť prvého z imaginárnou časťou druhého čísla.
 
z = (c1.Re - c2.Re) + i*(c1.Im - c2.Im)
 
Pri násobeni imáginárnych časti platí : i*i = -1  
 
z = (c1.Re * c2.Re - c1.Im * c2.Im) + i*(c1.Re * c2.Im + c2.Re * c1.Im)
 
Trieda komplexných čísel v c# :

Až do ver .NET Framework 4.0 neboli kompléxne čísla vstavané do Frameworku. Preto si ukážeme ako spraviť takúto triedu na prácu s komplexnými číslami.

class Complex
    {       
        public Double Re {get;set;}      
 
        public Double Im {get;set;}      
 
        public Complex(Double real, Double imaginary)
        {
           this.Re = real;
           this.Im = imaginary;
        }
 
        public static Complex operator +(Complex c1, Complex c2)
        {
            Double re = c1.Re + c2.Re;
            Double im = c1.Im + c2.Im;
 
            return new Complex(re, im);
        }
 
        public static Complex operator -(Complex c1, Complex c2)
        {
            Double re = c1.Re - c2.Re;
            Double im = c1.Im - c2.Im;
 
            return new Complex(re, im);
        }
 
        public static Complex operator *(Complex c1, Complex c2)
        {
            Double re = c1.Re * c2.Re - c1.Im * c2.Im;
            Double im = c1.Re * c2.Im + c2.Re * c1.Im;
 
            return new Complex(re, im);
        }
 
        public static Complex operator /(Complex c1, Complex c2)
        {
            Complex tmp = new Complex(c2.Re, -c2.Im);
            c1 *= tmp;
            c2 *= tmp;
 
            if (c2 == 0)
                throw new DivideByZeroException();
 
            return (c1 * (1 / c2.Re));
        }
 
        public static Boolean operator ==(Complex c1, Complex c2)
        {
            return (c1.Re == c2.Re && c1.Im == c2.Im);
        }
 
        public static Boolean operator !=(Complex c1, Complex c2)
        {
            return !(c1.Re == c2.Re && c1.Im == c2.Im);
        }
 
        public static implicit operator Complex(Double n)
        {
            return new Complex(n, 0);
        }
    }

 

Použitie :

Complex cislo1 = new Complex(-8, 9.2);
 
Complex cislo2 = cislo1 + 5;

V .NET Framework 4.0  a viac sú komplexné čísla priamo podporované.
Namespace:  System.Numerics
Assembly:  System.Numerics (in System.Numerics.dll)

 

Last modified on pondelok, 19 december 2016 21:21
Ing.Jaroslav Vadel

Som zakladateľom www.projectik.eu.

Hrám sa na programátora, ktorý ovláda:

c#,cpp,java,unity3d,php,html,NI testand,NI Vision Builder,Cognex In-Sight,NI LabView

"Naprogramovať program, ktorý funguje vie každy. Ale to, že program funguje ešte neznamena, že je napísany správne "

Website: www.projectik.eu