22. Liczby zespolone
Treści kształcenia. Liczby zespolone: definicja, dodawanie i mnożenie, struktura ciała liczb zespolonych, część rzeczywista i urojona, sprzężenie. Norma i argument, postać trygonometryczna i formuła de Moivre’a, pierwiastki z jedności, rozwiązywanie równań wielomianowych w liczbach zespolonych oraz zastosowania (rekurencje liniowe, geometria płaszczyzny).
Efekty kształcenia. Potrafi wykonywać działania na liczbach zespolonych w postaci algebraicznej i trygonometrycznej, wyznaczać ich normę i argument oraz stosować formułę de Moivre’a. Potrafi rozwiązywać proste równania wielomianowe w liczbach zespolonych i opisywać za ich pomocą obiekty geometryczne na płaszczyźnie.
Wstęp¶
Wiele problemów matematycznych można rozwiązać, o ile wprowadzi się do problemu dodatkowe obiekty. Rozszerzenie początkowe obiektu badań pozornie nie prowadzi do głębszych wniosków. Zobaczymy poniżej na kilku przykładach, jak koncepcja liczb może być rozszerzona poza liczby rzeczywiste i wykorzystana do rozwiązywania problemów związanych z liczbami rzeczywistymi.
Powtarzające się ciągi¶
Rozważmy ciąg liczb całkowitych zadany przez powtarzający się wzorzec:
Bardziej formalnie możemy napisać i , . Czy dla podanego ciągu istnieje formuła podobna do wzoru Bineta dla liczb Fibonacciego?
Zauważmy, że zgodnie z metodami rozwiązywania rekurencji liniowych, otrzymalibyśmy
gdzie są pierwiastkami wielomianu . Nie istnieje żadna liczba rzeczywista, która spełnia takie równanie. Ale, gdyby taka liczba istniała, wówczas byłaby ,,pierwiastkiem z liczby -1’'. Oznaczając taką liczbę , pierwiastkami wielomianu są oraz . Nasze liczby spełniałyby relację .
I^2-1c1,c2=var('c1,c2')
def a(n):
return c1*(I)^n+c2*(-I)^n
solve([a(0)-1,a(1)-0],(c1,c2))[[c1 == (1/2), c2 == (1/2)]]Otrzymujemy formułę ogólną na nasz ciąg
Korzystając z relacji , istotnie odzyskujemy formułę na wyrazy naszego ciągu.
def aa(n):
return 1/2*(I^n+(-I)^n)
[aa(k) for k in range(6)][1, 0, -1, 0, 1, 0]Liczby zespolone¶
Jak wskazuje powyższy przykład do pewnych obliczeń na liczbach rzeczywistych, wygodnym pomysłem jest formalne wprowadzenie do rachunku pewnych ,,liczb’', które rozszerzają zwykły zakres liczb rzeczywistych.
Definicja
Zbiór symboli , gdzie są liczbami rzeczywistymi, a jest ustalonym symbolem, nazywamy zbiorem liczb zespolonych i oznaczamy . Na zbiorze wprowadzamy dwa działania
(dodawanie liczb zespolonych)
(mnożenie liczb zespolonych)
Dodawanie liczb zespolonych jest zdefiniowane wzorem
gdzie dodawanie oraz są rozumianymi w zwykłym sensie operacjami dodawania liczb rzeczywistych .
Mnożenie liczb zespolonych jest zdefiniowane wzorem
gdzie operacje w wyrażeniach oraz są rozumiane w zwykłym sensie dla liczb rzeczywistych .
Dla liczby zespolonej liczba nazywana jest częścią rzeczywistą, a liczba nazywana jest częścią urojoną
Struktura dodawania liczb zespolonych¶
Operacja dodawania liczb zespolonych może być intuicyjnie rozumiana jako odpowiadająca dodawaniu dwóch wektorów , w zwykłym sensie, tj. ,,po współrzędnych’'. Wraz z operacją dodawania liczby zespolone tworzą grupę (przemienną), tj.
Istnieje element neutralny operacji dodawania (zazwyczaj pisany po prostu jako 0), który spełnia
dla dowolnej liczby zespolonej .
Działanie na liczbach zespolonych jest łączne, tj.
dla dowolnych trzech liczb zespolonych .
Element przeciwny. Dla dowolnej liczby zespolonej elementem przeciwnym jest , gdzie są elementami przeciwnymi do liczb rzeczywistych . Zachodzi relacja
Działanie na liczbach zespolonych jest przemienne, tj.
dla dowolnych dwóch liczb zespolonych .
Zadanie 1 (własności dodawania liczb zespolonych)¶
Sprawdź, korzystając z definicji operacji , że wypisane własności 1-4 zachodzą dla liczb zespolonych.
#Rozwiązanie komputerowe
a,b,c,d,e,f=var('a,b,c,d,e,f')
#element neutralny
print((0+0*I)+(a+b*I))
print((a+b*I)+(0+0*I))
#łączność
print((((a+b*I)+(c+d*I))+(e+f*I)).collect(I))
print((a+b*I)+((c+d*I)+(e+f*I)))
a + I*b
a + I*b
a + I*b + c + I*d + e + I*f
a + I*b + c + I*d + e + I*f
assume(a,'real')
assume(b,'real')
assume(c,'real')
assume(d,'real')
assume(e,'real')
assume(f,'real')
aa=(((a+b*I)+(c+d*I))+(e+f*I))
aa.real_part()a + c + eStruktura mnożenia liczb zespolonych¶
Oznaczmy zbiór . Na zbiorze operacja określona powyżej zadaje strukturę grupy (przemiennej).
Elementem neutralnym operacji na liczbach zespolonych jest (zapisywane zazwyczaj jako 1), tj.
dla dowolnej liczby zespolonej .
Działanie na zbiorze jest łączne, tj.
dla dowolnych trzech liczb zespolonych .
Element odwrotny. Dla dowolnej liczby zespolonej różnej od elementem odwrotnym jest . Zachodzi relacja
Działanie na liczbach zespolonych jest przemienne, tj.
dla dowolnych dwóch liczb zespolonych .
Zadanie 2 (własności mnożenia liczb zespolonych)¶
Sprawdź, korzystając z definicji operacji , że wypisane własności 1-4 zachodzą dla liczb zespolonych.
Struktura ciała liczb zespolonych¶
Operacje dodawania i mnożenia na liczbach zespolonych są zgodne, tj. spełniają następującą relację zwaną rozdzielnością mnożenia względem dodawania
dla dowolnych liczb zespolonych . UWAGA! Operację rozszerzamy do zbioru tak, aby spełniony był aksjomat powyżej. W szczególności oznacza to, że dla dowolnej liczby zespolonej .
Zbiór wraz z dwoma operacjami podanymi aksjomatami powyżej nazywany jest ciałem. Zbiór z dodawaniem i mnożeniem nazywamy ciałem liczb zespolonych.
Zadanie 3 (własność ciała liczb zespolonych)¶
Sprawdź, korzystając z definicji liczb zespolonych, że operacja jest rozdzielna względem operacji .
Zbiór liczb zespolonych pozwala nam rozwiązywać większy niż do tej pory zestaw równań algebraicznych. W istocie zachodzi twierdzenie.
Twierdzenie
Każdy wielomian , stopnia () o współczynnikach zespolonych ma dokładnie pierwiastków w ciele liczb zespolonych. Oznacza to, że równanie ma rozwiązań, biorąc pod uwagę, że niektóre rozwiązania mogą być wielokrotne (np. ma pierwiastek podwójny w ).
Rozwiążemy równanie kwadratowe w liczbach zespolonych.
Postępując zgodnie z metodą uzupełniania (lub wzorami na ,,deltę’'), otrzymamy
lub
x=var('x')
solve(x^2+x+1,x)[x == -1/2*I*sqrt(3) - 1/2, x == 1/2*I*sqrt(3) - 1/2]Norma i argument liczby zespolonej¶
Liczby zespolone można interpretować geometrycznie jako punkty na płaszczyźnie. Każda liczba zespolona odpowiada punktowi . Odległość euklidesowa punktu od wynosi . Liczbę tę nazywamy normą (długością) liczby zespolonej
Norma jest multiplikatywna, tzn.
a,b,c,d=var('a,b,c,d')def N(z):
a,b=list(z)
return sqrt(a^2+b^2)def Cmult(a,b,c,d):
return a*c-b*d,a*d+b*cN(Cmult(a,b,c,d)).expand()sqrt(a^2*c^2 + b^2*c^2 + a^2*d^2 + b^2*d^2)((a^2+b^2)*(c^2+d^2)).expand()a^2*c^2 + b^2*c^2 + a^2*d^2 + b^2*d^2Argumentem liczby zespolonej jest kąt w przedziale , który wyznacza półprosta do wraz z półprostą poziomą . Wyznaczony kąt oznaczamy .
Twierdzenie
Dla dwóch niezerowych liczb zespolonych zachodzi
Twierdzenie wynika wprost z formuł na sinus i kosinus sumy kątów.
Zadanie 4 (argumenty)¶
Wyznacz argument liczb zespolonych
,
,
,
,
.
Argument wyznaczamy, obliczając najpierw normę danej liczby zespolonej, a następnie obliczając arkus tangens wartości i uwzględniając sytuację, gdy oraz biorąc pod uwagę właściwy znak. Bardziej kompaktowo (biorąc formułę na podwojenie arkus tangensa)
#funkcja argumentu jest zaimplementowana standardowo jako atan2(y,x) dla liczby x+iy
atan2(sqrt(3)/2,-1/2)2/3*piatan2(1,0)1/2*piatan2(1/2,1/2)1/4*piatan2(0,1)0atan2(0,-1)piPostać trygonometryczna liczby zespolonej¶
Wykorzystując normę oraz argument liczby zespolonej różnej od 0, możemy ją jednoznacznie zapisać w postaci
gdzie .
Z własności normy i argumentu wynika tzw. formuła de Moivre’a
dla dowolnej liczby całkowitej i dowolnego kąta .
Zadanie 5 (pierwiastki z jedności)¶
Wypisz wszystkie pierwiastki wielomianu dla dowolnej liczby naturalnej .
Wystarczy wykorzystać formułę de Moivre’a i postać trygonometryczną liczby zespolonej.
Zadanie 6 (równanie kwadratowe)¶
Rozwiąż równanie kwadratowe
Metoda 1
Niech . Wówczas . Z równania otrzymujemy
oraz
Te równania są wystarczające do znalezienia rozwiązań. Możemy jednak uprościć rachunki, dodając warunek wynikający z użycia normy
a,b=var('a,b')
solve([a^2-b^2-3,2*a*b-4,a^2+b^2-5],(a,b))[[a == 2, b == 1], [a == -2, b == -1]]W takim razie otrzymaliśmy dwie odpowiedzi: lub .
Geometria za pomocą liczb zespolonych¶
Liczby zespolone pozwalają bardzo elegancko zapisywać relacje geometryczne na płaszczyźnie. Np. operacja symetrii względem prostej zamienia parę na parę . W przypadku liczb zespolonych taką operację nazywamy sprzężeniem
Poniżej zobaczymy kilka przykładów, jak za pomocą liczb zespolonych można bardzo prosto opisać pewne obiekty geometryczne.
Zadanie 7 (spirala)¶
Połącz liniami punkty .
def spirala(k):
sp=[]
v=0
for n in range(k):
v+=n*I^n
sp.append(v)
return spline([x for x in spirala(30)]).show(aspect_ratio=1)
Zadanie 8 (parkietaż)¶
Wygeneruj fragment parkietażu płaszczyzny, w którym mamy dwa rodzaje trójkątów równobocznych (czerwone i niebieskie), które stykają się jedną krawędzią i wypełniają w kopiach całą przestrzeń.
Najpierw wygenerujemy wierzchołki trójkąta równobocznego jako rozwiązania równania .
Następnie mnożąc uzyskane trzy liczby zespolone przez , obrócimy wierzchołki o 90 stopni.
W kolejnym kroku przesuwamy trójkę o liczbę przeciwną do punktu .
Następnie mnożymy każdą z liczb przez .
W kolejnym kroku generujemy ze zbioru wierzchołków wierzchołki sprzężone.
Tak wygenerowane trójkąty równoboczne o boku dł. 1 przesuwamy po płaszczyźnie o 1 razy jednostek oraz o razy jednostek.
x=var('x')
solve(x^3-1,x) #oryginalne wierzchołki trójkąta równobocznego[x == 1/2*I*sqrt(3) - 1/2, x == -1/2*I*sqrt(3) - 1/2, x == 1]#przekształcenia trójkątów
tr0=[1,1/2*I*sqrt(3) - 1/2,-1/2*I*sqrt(3) - 1/2]
tr1=[x*i for x in tr0]
tr2=[x-(-1/2*sqrt(3) - 1/2*I) for x in tr1]
tr3=[x*1/sqrt(3) for x in tr2]
tr4=[x.conjugate() for x in tr3]pp=[1,1/2*I*sqrt(3) + 1/2] #przesuniecia w dwóch kierunkach
gra=Graphics()
for k in range(0,10):
for j in range(0,10):
gra+=polygon([x+pp[0]*k+pp[1]*j for x in tr3],color='red')
gra+=polygon([x+pp[0]*k+pp[1]*j for x in tr4],color='blue')
gra.show(aspect_ratio=1)
gra.show(aspect_ratio=1,xmin=4.2,xmax=9,ymin=0,ymax=6)