Narzędzia użytkownika

Narzędzia witryny


liczby_zespolone_complex

To jest stara wersja strony!


Liczby zespolone <complex>

Klasa szablonowa complex służy do reprezentacji i manipulacji liczbami zespolonymi. Operacje zdefiniowane na liczbach zespolonych pozwalają na swobodne mieszanie obiektów tej klasy z wbudowanymi typami numerycznymi. Należy zauważyć, że większość operacji wykonywanych na obiektach tej klasy to zwykłe funkcje. Wyjątkami są metody real() i imag() należące do klasy complex.

Deklaracja liczb zespolonych

Argument szablonu określa typ związany z wartościami części rzeczywistej i urojonej obiektu. Ten argument musi być jednym z trzech dostępnych typów zmiennoprzecinkowych float, double lub long double.

Dostępne są cztery konstruktory. Konstruktor bezparametrowy inicjalizuje obie części liczby zespolonej wartością zero. Konstruktor jednoargumentowy incjalizuje wartością parametru część rzeczywistą i zeruje urojoną. Konstruktor dwuargumentowy inicjalizuje obie części liczby zespolonej. Ostatecznie, konstruktor kopiujący pozwala inicjalizować obiekt wartościami innego dostępnego obiektu klasy.

   complex<double> cplx_one;               // wartość 0 + 0i
   complex<double> cplx_two(3.14);         // wartość 3.14 + 0i
   complex<double> cplx_three(1.5, 3.14)   // wartość 1.5 + 3.14i
   complex<double> cplx_four(cplx_two);    // wartość również 3.14 + 0i

Liczbie zespolonej complex można przypisać wartość innej liczby zespolonej. Ponieważ konstruktor jednoargumentowy jest również wykorzystywany jako operator konwersji, można również przypisać liczbie zespolonej wartość rzeczywistą.

   cplx_one = cplx_three;                 // staje się 1.5 + 3.14i
   cplx_three = 2.17;                     // staje się 2.17 + 0i

Funkcja polar() może służyć do konstrukcji liczby zespolonej dla danego modułu i fazy kąta.

   cplx_four = polar(5.6, 1.8);

Wartość sprzężona powstaje z użyciem funkcji conj().

   complex<double> cplx_five = conj(cplx_four);

Dostęp do wartości liczby zespolonej

Metody klasy complex real() i imag() zwracają wartości odpowiednio części rzeczywistej i urojonej liczby zespolonej. Funkcje te można również wywołać jako zwykłe funkcje z obiektem klasy complex jako argument.

   cout << cplx_one.real() << "+" << cplx_one.imag() << "i" << endl;
   cout << real(cplx_one)  << "+" << imag(cplx_one)  << "i" << endl;

Operatory artmetyczne

Operatory artmetyczne +, -, * oraz / mogą być używane zgodnie z przyjętą konwencją. Wszystkie przyjmują jako argumenty albo dwie liczby zespolone albo liczbę zespoloną i wartość rzeczywistą. Ponadto zdefiniowane są dla każdego z nich operatory przypisania.

   cout << cplx_one + cplx_two << endl;            // wartość 4.64+3.14i
   cout << cplx_one - 3.14 << endl;                // wartość -1.64+3.14i
   cout << 2.75 * cplx_two << endl;                // wartość 8.635+0i
   cout << (cplx_one += cplx_three / 2.0) << endl; // wartość 2.585+3.14i

Operatory jednoargumentowe + i - również można używać.

   cout << -cplx_one << endl;                      // wartość -2.585-3.14i

Porównywanie wartości

Dwie liczby zespolone complex mogą być przetestowane na równość lub nierówność wykorzystując operatory == i !=. Dwie wartości są równe, gdy odpowiadające sobie części liczby są sobie równe.

   cout << (cplx_one == cplx_three) << endl;  // wartość 0 (fałsz)
   cout << (cplx_one != cplx_three) << endl;  // wartość 1 (prawda)

Liczby zespolone nie mogą być porównywane za pomocą innych operatorów, niedostępne są operatory porządkujące.

Strumienie I/O

Liczby zespolone klasy complex mogą być pisane do strumienia bądź z niego czytane wykorzystując przyjętą konwencję dla strumieni I/O. Wartość pisana jest do strumienia w nawiasach jako (u,v). Wartość jest czytana ze strumienia jako dwie wartości numeryczne oddzielone przecinkiem i otoczone nawiasami.

Wartość normalna i moduł

Funkcja norm() zwraca normę liczby zespolonej, która odpowiada sumie kwadratów części rzeczywistej i urojonej. Funkcja abs() zwraca moduł, który jest pierwiastkiem kwadratowym normy liczby zespolonej.

   cout << norm(cplx_two) << endl;
   cout << abs(cplx_two)  << endl;

Kąt fazowy liczby zespolonej można uzyskać za pomocą funkcji arg().

   cout << cplx_four << " w postaci biegunowej wynosi "
        << abs(cplx_four) << "e^" << arg(cplx_four) << "i"<< endl;

Funkcje trygonometryczne

Funkcje tryugonometryczne zdefiniowane dla typów zmiennoprzecinkowych zostały rozszerzone dla liczb zespolonych. Dotyczy to funkcji sin(), cos(), tan(), sinh(), cosh() i tanh(). Każda z nich bierze jako argument liczbę zespoloną complex i zwraca również liczbę zespoloną.

Inne funkcje

Podobnie jak funkcje trygonometryczne funkcje exp(), log(), log10() i sqrt() zostały rozszerzone dla liczb zespolonych. Jako argument biorą obiekt complex i zwracają również obiekt complex.

Biblioteka standardowa definiuje kilka wersji funkcji pow(). Istnieją osobne definicje dotyczące podnoszenia liczb zespolonych do wartości całkowitej, zespolonej i rzeczywistej. Podobnie można podnosić wartość rzeczywistą do wartości complex.

Przykładowy program

W poniższym kodzie zebrano przykłady dostępne na tej stronie opisujące podstawowe funkcje klasu complex. Ponadto dodano prostą funkcję obrazującą przykładowe zastosowanie klasy w celu obliczenia pierwiastków funkcji kwadratowej o współczynnikach zespolonych.

#include <complex>
#include <utilities>
 
typedef complex<double> Complex;
 
pair<Complex, Complex> roots (Complex a, Complex b, Complex c)
{
   Complex root = sqrt(b * b - 4.0 * a * c);
   a *= 2.0;
   return make_pair(
      (-b + root)/a, 
      (-b - root)/a
   );
}



start » biblioteka_standardowa

liczby_zespolone_complex.1226255723.txt.gz · ostatnio zmienione: 2008/11/09 19:35 przez lromanow