Cursul 3 Numere complexe în grafica 2D 1. Introducere. Dezvoltarea istorică a gândirii matematice a urmărit îndeaproape evoluţia ideii de număr. Această evoluţie, exprimată succint prin şirul de incluziuni N Z Q R C, nu a fost nicicum liniară ci foarte sinuoasă, cu etape suprapuse sau chiar în ordine inversă. Primele au apărut numerele naturale 1, 2, 3,..., urmate de fracţii şi rapoarte. In lumea antică deja apăruseră semne că numai acestea nu sunt suficiente; de exemplu, incomensurabilitatea diagonalei pătratului cu latura sa era cunoscută din vremea lui Pitagora. Următoarea achiziţie a fost numărul zero care, plecând din India, a ajuns în Europa în jurul anului 1000, odată cu scrierea poziţională a numerelor, prin intermediul cărţilor lui Muhammad al-khwarizmi, persanul de la numele căruia provine termenul de algoritm. Numerele negative şi imaginare apar în acelaşi timp, în Italia secolului al XVIlea, în parte tot sub influenţa surselor islamice şi bizantine. Aceste numere, cu denumiri care sugerează o acceptare doar formală a existenţei lor, s-au dovedit utile în rezolvarea ecuaţiilor algebrice. Astfel, unitatea negativă, 1, a fost definită ca fiind soluţia ecuaţiei x + 1 = 0, iar unitatea imaginară, 1, ca soluţie a ecuaţiei x 2 + 1 = 0, chiar dacă printre numerele deja cunoscute nu exista niciunul care să verifice vreo una dintre cele două ecuaţii. Calculul formal cu numere complexe, adică cu expresii de forma a + b 1 s-a dezvoltat prin analogie cu cel al numerelor iraţionale pătratice de forma a + b 2. În ciuda numeroaselor rezultate obţinute cu astfel de numere în secolele XVII-XVIII, matematicienii au avut reţineri cu privire la utilizarea lor. Îndoiala asupra existenţei acestor numere a dispărut odată cu apariţia unei interpretări geometrice foarte simple a lor, şi anume reprezentarea lor ca puncte în plan. Folosirea sistematică şi popularizarea reprezentării geometrice a numerelor complexe o datorăm lucrărilor lui Carl Friedrich Gauss (1777-1855). Denumirile nefericite, care mai provoacă şi astăzi confuzii, de numere reale şi numere imaginare au fost introduse de René Descartes (1596 1650) pentru clasificarea rădăcinilor polinoamelor. Inţelegerea deplină, atât a numerelor reale cât şi a celor complexe, a avut loc concomitent, în secolul al XIX-lea, odată cu fundamentarea analizei matematice începută de Augustin-Louis Cauchy (1789 1857). 1
2. Forma algebrică a unui număr complex. Mulţimea numerelor complexe C se defineşte ca fiind mulţimea perechilor de numere reale C = R R = (x, y) x, y R dotată cu două operaţii binare, adunarea: şi înmulţirea (x 1, y 1 ) + (x 2, y 2 ) = (x 1 + x 2, y 1 + y 2 ), (x 1, y 1 ), (x 2, y 2 ) C, (x 1, y 1 )(x 2, y 2 ) = (x 1 x 2 y 1 y 2, x 1 y 2 + x 2 y 1 ), (x 1, y 1 ), (x 2, y 2 ) C. Se verifică uşor că aceste două operaţii înzestrează mulţimea numerelor complexe cu o structură algebrică de corp comutativ. Fiind dat un număr complex z = (x, y), convenim să numim numerele reale x şi y ca fiind partea reală şi, respectiv, partea imaginară a lui z. Să observăm că mulţimea numerelor complexe cu partea imaginară nulă R = (x, 0) x R C este parte stabilă în raport cu operaţiile, adică şi (x 1, 0) + (x 2, 0) = (x 1 + x 2, 0) R (x 1, 0)(x 2, 0) = (x 1 x 2, 0) R pentru orice (x 1, 0), (x 2, 0) R, şi, mai mult, aplicaţia x (x, 0), numită aplicaţia de scufundare a lui R în C, este un izomorfism de corpuri între R şi R. Din acest motiv, vom identifica R cu R, înţelegând prin aceasta că numerele complexe de forma (x, 0) vor fi notate cu x atunci când nu există pericol de confuzie. Mai mult, se verifică imediat că orice număr complex z = (x, y) poate fi descompus sub forma şi, prin urmare, cu notaţia z = (x, y) = (x, 0) + (0, y) = (x, 0) + (y, 0)(0, 1), i = (0, 1), obţinem aşa numita formă algebrică a lui z: z = x + yi, unde, subliniem, x, y şi i sunt numere complexe. Din definiţia înmultirii avem că (0, 1)(0, 1) = ( 1, 0), relaţie care, cu convenţiile făcute, se scrie i 2 = 1. 2
Aplicând regulile de calcul dintr-un corp comutativ, deducem mai departe că (x 1 + y 1 i)(x 2 + y 2 i) = x 1 x 2 + x 1 y 2 i + y 1 x 2 i + y 1 y 2 i 2 = x 1 x 2 y 1 y 2 + (x 1 y 2 + y 1 x 2 )i, justificând astfel de ce înmulţirea numerelor complexe a fost definită atât de complicat. Să urmărim cum au fost implementate cele de mai sus în structura Complex definită în fişierul Complex.cs. Egalitatea C = R R se reflectă direct în structura unui obiect de tip Complex, care este format numai din două câmpuri de tip double iniţializate de constructorul obiectului: public struct Complex public double x; public double y; public Complex(double x, double y) this.y = y; this.x = x;... Definiţiile operaţiilor cu numere complexe apar, exact sub forma dată, la supraîncărcarea operatorilor corespunzători: public static Complex operator +(Complex zst, Complex zdr) return new Complex(zst.x + zdr.x, zst.y + zdr.y); public static Complex operator *(Complex zst, Complex zdr) return new Complex(zst.x * zdr.x - zst.y * zdr.y, zst.y * zdr.x + zst.x * zdr.y); Mai mult, este implementată chiar şi aplicaţia de scufundare a lui R în C, şi anume la definirea operatorului de conversie implicită de la double la Complex: public static implicit operator Complex(double x) return new Complex(x, 0); Această conversie implicită ne permite, printre altele, să lucrăm în cod cu numere complexe sub formă algebrică: Complex i = new Complex(0,1); Complex z1 = 1 + 2*i; 3
3. Interpretarea geometrică a adunării numerelor complexe. Este binecunoscut astăzi că mulţimea punctelor unui plan poate fi identificată cu mulţimea R R, fixând un sistem de coordonate carteziene cu originea într-un punct O al planului şi notând cu Z(x, y) punctul de coordonate x şi y. Mai mult, R 2 = R R se structurează în mod natural ca spaţiu liniar real de dimensiune 2, definind adunarea şi înmulţirea cu scalari pe componente: (x 1, y 1 ) + (x 2, y 2 ) = (x 1 + x 2, y 1 + y 2 ), (x 1, y 1 ), (x 2, y 2 ) R 2, şi α(x, y) = (αx, αy), α R, (x, y) R 2. Un element z = (x, y) din R 2 poate fi indentificat cu vectorul de poziţie z = OZ al punctului Z(x, y). Deoarece, prin definiţie, C = R R, vom extinde această interpretare şi la numere complexe: fiind dat un plan π şi un sistem de coordonare carteziene cu originea într-un punct O, oricărui punct Z π îi asociem perechea formată din coordonatele sale, z = (x, y) R 2, vectorul său de poziţie, z = OZ şi afixul său, adică numărul complex z = (x, y) = x + yi C. In continuare vom utiliza identificarea Z = z = z = z, adică vom nota în acelaşi mod, când nu există pericol de confuzie, un punct, o pereche de numere reale, un vector şi un număr complex. Cum prin această identificare definiţiile adunării în C şi R 2 coincid, rezultă că adunarea numerelor complexe are loc după regula paralelogramului: vectorul OS corespunzător sumei s = z 1 + z 2 este diagonala paralelogramului format de vectorii OZ 1 şi OZ 2. Analog, vectorul de poziţie OD corespunzător diferenţei d = z2 z 1 este vectorul liber Z 1 Z 2 translatat cu Z 1 în origine (astfel încât OZ 2 să fie diagonala paralelogramului format de OZ 1 şi OD. Spunem că suma z1 + z 2 este diagonala paralelogramului format de vectorii z 1 şi z 2, iar diferenţa z 2 z 1 este vectorul z 1 z 2. 4
Mai mult, dacă în R 2 vom considera baza canonică, formată din perechile u = (1, 0) şi i = (0, 1), atunci orice element z = (x, y) are descompunerea z = xu + yi care coincide, prin aplicaţia de scufundare a lui a R în C, cu forma algebrică a numărului complex z. Cu acest prilej să observăm că înmulţirea cu scalari este de fapt înmulţirea dintre un număr real şi un număr complex, deoarece αz = (α, 0)(x, y) = (αx, αy) = αz. Urmează că înmulţirea cu numere reale reprezintă, în planul numerelor complexe, o scalare, adică o mărire/micşorare la scară cu centru în originea O. De exemplu, produsul cu 2, adică aplicaţia z 2z, măreşte figurile din plan de două ori privind din origine (este o omotetie cu centru O şi raport 2). 4. Forma trigonometrică a unui număr complex. Vom aprofunda acum reprezentarea geometrică a lui C trecând de la coordonatele carteziene (x, y) ale unui punct la coordonatele sale polare (ρ, θ). Sunt binecunoscute formulele x = ρ cos θ, y = ρ sin θ. 5
Definim modulul numărului complex z = x + yi prin şi argumentul său prin Reamintim că z = ρ = x 2 + y 2 argz = θ [0, 2π). θ = arctg y x + kπ, unde k are una din valorile 0, 1 sau 2, în funcţie de cadranul în care cade z. Cu aceste notaţii obţinem imediat forma trigonometrică a lui z; z = x + iy = ρ cos θ + iρ sin θ = ρ(cos θ + i sin θ). Să observăm că aceste două modalităţi de exprimare a unui număr complex au fost implementate în structura Complex prin metodele statice public static Complex setreim(double x, double y) //forma algebrica return new Complex(x, y); şi public static Complex setrotheta(double Ro, double Theta) //forma trigonometrica return new Complex(Ro * Math.Cos(Theta), Ro * Math.Sin(Theta)); în timp ce modulul şi argumentul unui număr complex sunt date de proprietăţile public double Ro get return Math.Sqrt(x * x + y * y); public double Theta 6
get return Math.Atan2(y, x); Observaţie: conform implemetării de mai sus, argumentul θ = argz returnat de proprietatea Theta este în intervalul ( π, π] şi nu în prima determinare a cercului, [0, 2π). Acest fapt este utilizat, de exemplu, în următorul test care decide dacă punctul z se află sau nu în semiplanul stâng determinat de dreapta ab parcursă de la a la b: public bool zestelastangaluiab(complex z, Complex a, Complex b) Complex r=(z-a)/(b-a); if (r.theta > 0) return true; else return false; 5. Interpretarea geometrică a înmulţirii numerelor complexe. Forma trigonometrică ne permite să dăm o interpretare remarcabilă înmulţirii numerelor complexe. Să calculăm produsul lui ω = α(cos φ+i sin φ) cu z = ρ(cos θ+i sin θ). Avem ωz = αρ[(cos φ cos θ sin φ sin θ) + i(sin φ cos θ + cos φ sin θ)] de unde obţinem că şi = αρ(cos(φ + θ) + i sin(φ + θ)) ωz = ω z arg ωz = arg ω + arg z (mod 2π). Deci, la înmulţirea numerelor complexe, modulele se înmulţesc iar argumentele se adună. Deducem de aici că produsul cu ω = α(cos φ + i sin φ), adică aplicaţia z ωz, reprezintă o scalare de factor α compusă cu o rotaţie de unghi φ în sens trigonometric în jurul originii. In particular, înmulţirea cu i, care are modulul 1 şi argumentul π radiani, 2 este o rotaţie de 90 în sens trigonometric în jurul originii. Prin urmare, produsul cu i 2 înseamnă două rotaţii de 90 în acelaşi sens, adică de o rotaţie de 180, exact transformarea geometrică asociată produsului cu 1. Iată o interpretare geometrică elegantă a egalităţii i 2 = 1. Să reamintim şi celebra formulă a lui Moivre (Abraham de Moivre (1667 1754), matematician francez): dacă z = ρ(cos θ + i sin θ) atunci pentru orice n Z avem z n = ρ n (cos nθ + i sin nθ). 7
Această formulă permite, printre altele, şi următoarea extindere la exponenţi reali pozitivi a operaţiei de ridicare la putere a unui număr complex: z α = ρ α (cos αθ + i sin αθ), pentru orice α (0, + ). Clasa implementată mai jos reprezintă grafic puterile numărului z = 995 1000 (cos π 120 + i sin π 120 ). Deoarece z n = z n = 0.995 n 0 pentru n +, puterile lui z de exponent n = 1, 2, 3,... vor forma un şir de puncte care se apropie de origine, rotindu-se în jurul ei la fiecare pas cu π/120 radiani, şi parcurgând astfel o spirală îndreptată către zero. 8
public class Puteri : FractalForm public override void makeimage() setxminxmaxyminymax(-1.1, 1.1, -1.1, 1.1); ScreenColor = Color.White; PenColor = Color.Black; setaxis(); Complex z = Complex.setRoTheta(0.995, Math.PI / 120); Complex p = 1; for (int k = 0; ; k++) p *= z; setpixel(p, PenColor); if (!resetscreen()) return; 6. Rădăcinile unităţii. Considerăm un număr natural fixat n 1, notăm şi definim θ = 2π n ε = cos θ + i sin θ. Este uşor de văzut că primele n puteri ale lui ε, date de formula 1, ε, ε 2, ε 3,..., ε n 1, z k = ε k = cos kθ + i sin kθ, sunt distincte şi sunt vârfurile unui poligonului regulat cu n laturi înscris în cercul unitate. Deoarece pentru orice k 0, 1, 2,..., n 1 avem deducem că mulţimea z n k = cos nkθ + i sin nkθ = cos 2kπ + i sin 2kπ = 1, U n = 1, ε, ε 2, ε 3,..., ε n 1 este formată din cele n soluţii în C ale ecuaţiei z n = 1. U n se numeşte mulţimea rădăcinilor de ordin n ale unităţii şi are o structură de grup în raport cu înmulţirea. Puterile lui ε se repetă din n în n, mai precis avem ε k ε h k+h (mod n) = ε şi prin urmare aplicaţia ε k k este un izomorfism între (U n, ) şi grupul (Z n, +) al claselor de resturi modulo n. 9
7. Împărţirea numerelor complexe. După cum rezultă imediat din proprietăţile înmulţirii, raportul a două numere complexe sub formă trigonometrică, z 1 = ρ 1 (cos θ 1 + i sin θ 1 ) 0 şi z 2 = ρ 2 (cos θ 2 + i sin θ 2 ) este z 2 = ρ 2 (cos(θ 2 θ 1 ) + i sin(θ 2 θ 1 )). z 1 ρ 1 Deducem că modulul raportului z 2 /z 1 este raportul lungimilor vectorilor z 2 şi z 1 iar argumentul raportului z 2 /z 1 este unghiul ẑ 1 0z 2 dintre cei doi vectori. O interpretare remarcabilă vom avea într-un triunghi z 0 z 1 z 2 în care, dacă ţinem cont că diferenţele z 2 z 0 şi z 1 z 0 sunt laturi, avem z 2 z 0 z 1 z 0 = z 2 z 0 z 1 z 0 = Z 0Z 2 Z 0 Z 1 şi arg z 2 z 0 = Z 1 Z 0 Z 2. z 1 z 0 Deci, raportul a două laturi este numărul complex care are modulul egal cu raportul lungimilor laturilor şi argumentul egal cu unghiul dintre cele două laturi. Deducem de aici că triunghiurile (orientate) z 0 z 1 z 2 şi z 0 z 1 z 2 sunt asemenea dacă şi numai dacă z 2 z 0 = z 2 z 0. z 1 z 0 z 1 z 0 Punctele z 0, z 1 şi z 2 sunt coliniare când unghiul deci atunci când raportul celor două laturi, z 2 z 0 = λ, z 1 z 0 Z 1 Z 0 Z 2 are 0 sau π radiani, are argumentul 0 sau π şi, prin urmare, este număr real. Deducem de aici caracterizarea: punctul z 2 care împarte segmentul z 0 z 1 în raportul λ = z 2 z 0 z 1 z 0 10
este dat de egalitatea z 2 = z 0 + λ(z 1 z 0 ). Urmează că dreapta determinată de două puncte distincte, z 0 şi z 1, admite reprezentarea parametrică z = z 0 + t(z 1 z 0 ), t R. Ca aplicaţie, următoarea clasă secţionează triunghiul abc în zece felii de arii egale: public class Sectiuni : FractalForm static Complex i = new Complex(0, 1); void sectioneaza(complex a, Complex b, Complex c, int nrfelii) setline(b, c, PenColor); for (int k = 0; k <= nrfelii; k++) setline(a, b + k * (c - b) / nrlinii, PenColor); public override void makeimage() setxminxmaxyminymax(-1, 7, -1, 7); Complex a = 2 + 5 * i; Complex b = 1 + i; 11
Complex c = 6 + 2 * i; ScreenColor = Color.White; PenColor = Color.Black; sectioneaza(a, b, c, 10); setaxis(); resetscreen(); 8. Conjugatul unui număr complex. Împărţirea a două numere complexe sub formă algebrică se efectuează prin amplificare cu conjugatul numitorului. Conjugatul lui z = x + iy este z = x iy şi are proprietatea esenţială z z = x 2 + y 2 = z 2 R. Operaţia de conjugare (adică aplicaţia z z) reprezentă trecerea de la un punct la simetricul său în raport cu axa reală, prin urmare conjugarea păstrează operaţiile: z 1 + z 2 = z 1 + z 2, z 1 z 2 = z 1 z 2, z 1 z 2 = z 1 z 2, z 1 /z 2 = z 1 /z 2. In sfârşit, pentru z = x + iy avem Re z = x = z + z şi Im z = y = z z. 2 2i Este util de ţinut minte că, dacă z = 1 atunci z = 1. z 9. Transformări geometrice. Identificând în continuare C cu mulţimea punctelor unui plan, prin figură geometrică vom înţelege, în cele ce urmează, o mulţime oarecare F de numere complexe, prin transformare geometrică o aplicaţie T : C C iar prin transformata figurii F mulţimea formată din transformatele punctelor lui F : F = T (F ) = z = T (z), z F. Pe baza interpretărilor geometrice ale operaţiilor cu numere complexe, avem următoarele caracterizări ale transformărilor întâlnite în geometria planului. 9.1. Translaţia. Dorim să translatăm o figură F astfel încât un punct fixat z 0 F să ajungă într-un z 0 fixat în F. Fie z F şi z F transformatul său. Vectorii zz şi z 0 z 0 trebuie să fie egali, deci z z = z 0 z 0, de unde rezultă z = z + (z 0 z 0 ). In concluzie, transformarea T : C C dată de T (z) = z + (z 0 z 0 ), z C, este translaţia de vector z 0 z 0. 12
Următoarea clasă afişează într-o mişcare de translaţie uniformă poligonul încărcat în lista iniţială (un septagon regulat stelat în acest exemplu): public class Translatii : FractalForm static Complex i = new Complex(0, 1); static Complex a = (1 + 2 * i) / 100; static Complex T(Complex z) // translatie de vector a return a + z; void transforma(ref ComList li) ComList rez = new ComList(); for (Complex z = li.firstzet;!li.ended; z = li.nextzet) rez.nextzet = T(z); li = rez; void traseaza(comlist li, Color c) Complex z1 = li.firstzet; for (Complex z2 = li.nextzet;!li.ended; z2 = li.nextzet) setline(z1, z2, c); z1 = z2; ComList figurainitiala() ComList rez = new ComList(); double fi = 2 * Math.PI / 7; for (int k = 0; k < 15; k += 2) 13
rez.nextzet = Complex.setRoTheta(2.5, k * fi); return rez; public override void makeimage() setxminxmaxyminymax(-5, 10, -5, 10); ComList oldfig, newfig = figurainitiala(); traseaza(newfig, Color.Red); for (int k = 0; k < 300; k++) oldfig = newfig; transforma(ref newfig); traseaza(oldfig, Color.Black); traseaza(newfig, Color.Red); setaxis(); if (!resetscreen()) return; 9.2. Omotetia. Fixăm un punct z 0 C şi un număr real λ > 0. Fiind dată o figură F, dorim să o mărim la scară cu factorul λ relativ la centrul z 0. Fie z F şi z F transformatul său. Cerem ca punctele z 0, z şi z să fie coliniare şi raportul segmentelor z 0 z şi z 0 z să fie λ, de unde rezultă că z = z 0 + λ(z z 0 ). In concluzie, transformarea T : C C dată de T (z) = z 0 + λ(z z 0 ), z C, cu λ R +, este omotetia de centru z 0 şi raport λ. 9.3. Rotaţia. Dorim să rotim o figură F în jurul unui punct fix z 0 C cu un unghi θ. Considerăm un z F, notăm cu z F transformatul său şi definim 14
numărul complex ω prin ω = z z 0 z z 0. Avem ω = z z 0 z z 0 = 1 şi arg = ẑ z 0 z = θ = const., de unde rezultă că ω = cos θ + i sin θ. Rotaţia de centru z 0 şi unghi θ este dată de transformarea T : C C definită de T (z) = z 0 + ω(z z 0 ), z C, cu ω = cos θ + i sin θ. 9.4. Simetria faţă de un punct. Punctul z este simetricul lui z faţă de z 0 dacă z z 0 = (z z 0 ) şi, prin urmare, T (z) = 2z 0 z, z C, este simetria faţă de punctul z 0. 9.5. Simetria faţă de o dreaptă. Fie d ab dreapta determinată de două puncte distincte a şi b din C. Dorim să determinăm simetricul z al unui punct z faţă de dreapta d ab. Considerăm conjugatele ā, b, z şi z care, după cum ştim, sunt simetricele punctelor a, b, z şi z faţă de axa reală. Din egalitatea z a b a = z ā, b ā dată de congruenţa triunghiurilor az b şi ā z b, obţinem mai departe z = a + b a b ā ( z ā). In concluzie, simetria faţă de dreapta determinată de punctele a şi b este transformarea T : C C dată de T (z) = a + ωz a, z C, 15
cu ω = (b a)/ b a. 10. Şiruri şi serii în C. Prin distanţa dintre două numere complexe z 1 şi z 2 vom înţelege distanţa uzuală dintre punctele corespunzătoare din plan: d(z 1, z 2 ) = z 2 z 1 = (x 2 x 1 ) 2 + (y 2 y 1 ) 2. Se verifică imediat ca aplicaţia d : C C R are proprietăţile unei metrici: (M 1 ) u, v C, d(u, v) 0; d(u, v) = 0 u = v; (M 2 ) u, v C, d(u, v) = d(v, u); (M 3 ) u, v, w C, d(u, v) d(u, w) + d(w, v); şi, prin urmare, (C, d) este un spaţiu metric. Aceasta înseamnă că avem gata definite, din teoria generală a spaţiilor metrice, o serie de noţiuni legate de convergenţa şirurilor şi de continuitatea funcţiilor. Vom aminti numai pe cele strict necesare cursului nostru. Un şir (z n ) n de numere complexe este convergent dacă există z C, limita sa, astfel încât şirul distanţelor de la z n la z să tindă la zero: lim z n = z lim z n z = 0. n n Convergenţa şirurilor se caracterizează pe componente, lim z n = lim (x n + iy n ) = x + iy lim x n = x şi lim y n = y. n n n n Numim divergent un şir care nu este convergent. Despre un şir divergent spunem că tinde la infinit dacă şirul modulelor tinde la plus infinit: lim z n = lim z n = +. n n Atenţie la limitele infinite: la şirurile de numere reale există limitele şi +, în C avem numai fără semn! Să studiem şirul puterilor unui număr complex ω = ρ(cos θ + i sin θ). Avem ω n = ρ n (cos nθ + i sin nθ) şi deci, dacă ω = ρ < 1 atunci ω n 0, dacă ω = ρ > 1 atunci ω n, iar dacă ω = ρ = 1 şirul rămâne pe cercul unitate, fiind convergent numai în cazul 16
în care este constant, adică pentru ω = 1, în rest fiind periodic (când raportul π/θ este raţional) sau dens distribuit pe cercul unitate. Fie (a n ) n un şir de numere complexe. Exact ca în cazul seriilor de numere reale, spunem că seria + n=0 are suma s C sau s = dacă şirul sumelor sale parţiale are limita s, adică n=0 a n s n = a 0 + a 1 + + a n a n = lim n (a 0 + a 1 + + a n ) = s. Seria este convergentă dacă are suma finită (adică s C), altfel este divergentă. De exemplu, din cele de mai sus deducem imediat că, în mulţimea numerelor complexe, seria geometrică ω n = lim (1 + ω + ω 2 + + ω n 1 ω n+1 ) = lim n n 1 ω n=0 este convergentă numai dacă ω < 1, şi atunci are suma 1 + ω + ω 2 + + ω n + = 1 1 ω, rezultat analog cazului real. 11. Funcţii complexe de argument real. O funcţie z : I R C este formată dintr-o pereche de funcţii reale x şi y : I R R date de egalitatea z(t) = x(t) + iy(t), t I. Astfel de funcţii se întâlnesc, mai ales, în descrierea mişcării unui punct în plan. De exemplu, z(t) = t(cos t + i sin t), t [0, + ), reprezintă legea orară după care un punct se deplasează pe o spirală care porneşte din origine. Cele două funcţii componente dau ecuaţiile parametrice ale spiralei: x = t cos t, y = t sin t, pentru t [0, + ). Fie t 0 un punct din intervalul I sau unul din capete. Limita funcţiei z = z(t) pentru t t 0 există şi este finită numai dacă funcţiile x = x(t) şi y = y(t) au limite finite, şi atunci avem lim z(t) = lim x(t) + i lim y(t). t t 0 t t0 t t0 17
Urmează că z este continuă pe I dacă şi numai dacă cele două funcţiile componente sunt continue. Derivabilitatea se caracterizează tot pe componente, mai precis z z(t) z(t 0 ) (t 0 ) = lim t t0 t t 0 x(t) x(t 0 ) = lim t t0 t t 0 Din definiţia derivatei rezultă aproximarea z(t) z(t 0 ) + (t t 0 )z (t 0 ) pentru t t 0, +i lim t t0 y(t) y(t 0 ) t t 0 = x (t 0 )+iy (t 0 ). care înlocuieşte mişcarea lui z = z(t) cu o mişcare rectilinie uniformă cu viteza z (t 0 ) pe tangenta la traiectorie în punctul z 0 = z(t 0 ). În concluzie, derivata unei funcţii complexe de argument real se calculează pe componente z (t) = x (t) + iy (t) şi reprezintă vectorul viteză instantanee al punctului în mişcare z = z(t). El dă direcţia tangentei la traiectorie în punctul curent. Clasa C # de mai jos desenează cu negru traiectoria punctului z = t(cos t + i sin t) pe intervalul t [0, 35] şi trasează cu roşu vectorul viteză la momentul t 0 = 32: public class Spirala : FractalForm static Complex i = new Complex(0, 1); Complex z(double t) return t * (Math.Cos(t) + i * Math.Sin(t)); Complex zprim(double t) return (Math.Cos(t) + i * Math.Sin(t)) + t * (-Math.Sin(t) + i * Math.Cos(t)); public override void makeimage() setxminxmaxyminymax(-50, 50, -50, 50); ScreenColor = Color.White; PenColor = Color.Black; setaxis(); for (double t = 0; t < 35; t += 0.001) setpixel(z(t), PenColor); double t0 = 32; Complex z0 = z(t0); setline(z0, z0 + zprim(t0), Color.Red); resetscreen(); 18
12. Funcţii complexe de argument complex. O funcţie f : D C C este formată din două funcţii u, v : D R 2 R date de descompunerea f(z) = f(x, y) = u(x, y) + iv(x, y), (x, y) D. De exemplu, aplicaţia z z 3 are descompunerea f(z) = z 3 = (x + iy) 3 = (x 3 3xy 2 ) + i(3x 2 y y 3 ), deci în acest caz u(x, y) = x 3 3xy 2 şi v(x, y) = 3x 2 y y 3. Fie z 0 un punct de acumulare al domeniului D, adică un punct z 0 C pentru care există un şir (d n ) n de elemente din D \ z 0 cu d n z 0. Limita lim z z 0 f(z) există şi este finită dacă şi numai dacă cele două funcţii componente au limite finite, şi atunci lim f(z) = lim u(x, y) + i z z 0 (x,y) (x 0,y 0 ) lim (x,y) (x 0,y 0 ) v(x, y). De aici se poate deduce că f este continuă pe D numai dacă u şi v sunt continue. Derivabilitatea unei funcţii complexe nu se mai reduce numai la diferenţiabilitatea celor două componente reale. Considerăm că u şi v admit derivate parţiale continue pe domeniul D şi calculăm limita f f(z) f(z 0 ) (z 0 ) = lim z z0 z z 0 19
considerând trasee orizontale de forma z = z 0 + t, cu t 0 în R. Obţinem f u(x 0 + t, y 0 ) u(x 0, y 0 ) v(x 0 + t, y 0 ) v(x 0, y 0 ) (z 0 ) = lim + i lim t 0 t t 0 t = u x (x 0, y 0 ) + i v x (x 0, y 0 ). Considerăm acum trasee verticale de forma z = z 0 + i t şi găsim f u(x 0, y 0 + t) u(x 0, y 0 ) v(x 0, y 0 + t) v(x 0, y 0 ) (z 0 ) = lim + i lim t 0 i t t 0 i t = v y (x 0, y 0 ) i u y (x 0, y 0 ). Comparând cele două rezultate deducem că următoarele egalităţi sunt condiţii necesare pentru derivabilitatea funcţiei f pe un domeniu D u = + v x y u = v. y x Se arată că în ipotezele noastre (u şi v admit derivate parţiale continue) egalităţile de mai sus, numite condiţiile Cauchy-Riemann, sunt şi suficiente pentru derivabilitatea lui f. Să le verificăm pentru f(z) = z 3. Avem x (x3 3xy 2 ) = 3x 2 3y 2 = y (3x2 y y 3 ) şi y (x3 3xy 2 ) = 6xy = x (3x2 y y 3 ), deci f este derivabilă. In adevăr, f z 3 z0 3 (z 0 ) = lim z z0 z z 0 de unde urmează că = lim z z0 (z 2 + zz 0 + z 2 0) = 3z 2 0, (z 3 ) = 3z 2, exact ca în cazul funcţiilor reale. Regulile de derivare formală a funcţiilor elementare (polinomiale, raţionale, exponenţiale şi trigonometrice) se păstrează neschimbate la trecerea de la cazul real la cel complex, şi aceasta deoarece se păstrează atât regulile de derivare ale operaţiilor (αu + βv) = αu + βv, α, β C, (uv) = u v + uv, ( u v ) = u v uv şi v 2 (u(v)) = u (v)v, 20
cât şi definiţiile prin serii de puteri ale funcţiilor elementare: şi e z = 1 + z 1! + z2 2! + z3 3! +..., z C, sin z = z z3 3! + z5 5! z7 7! +..., z C cos z = 1 z2 2! + z4 4! z6 6! +..., z C, de exemplu. Pe baza celor de mai sus se poate arăta, printre altele, că (e z ) = e z şi chiar că e z 1+z 2 = e z 1 e z 2, pentru orice z 1 şi z 2 din C. Graficul unei funcţii f : D C C, definit de Graf(f) = (z, f(z)) C C z D C, este o submulţime în C C care, ca spaţiu liniar, este izomorf cu R 4. Vederea noastră fiind tri-dimensională, nu putem vedea această suprafaţă bi-dimensională scufundată întru-un spaţiu patru-dimensional. O funcţie complexă de argument complex poate fi interpretată ca o deformare a planului, acţiunea ei poate fi înteleasă vizual urmărind modul în care funcţia deformează, transformă, diverse reţele de linii din plan. Clasa următoare colorează cu negru pătratul [1, 2] [1, 2] din planul numerelor complexe şi cu roşu transformatul acestuia prin funcţia f(z) = z 3. public class RidicareaLaCub : FractalForm public override void makeimage() setxminxmaxyminymax(-20, 10, -10, 20); ScreenColor = Color.White; PenColor = Color.Black; setaxis(); for (double x = 1; x <= 2; x += 0.001) for (double y = 1; y <= 2; y += 0.001) Complex z = new Complex(x, y); setpixel(z, PenColor); setpixel(z * z * z, Color.Red); resetscreen(); Din definiţia derivatei, dacă f este derivabilă în z 0 atunci are loc aproximarea f(z) f(z 0 ) + f (z 0 )(z z 0 ) pentru z z 0, care arată că local, în vecinătatea lui z 0, deformarea produsă de f este o rotaţie de unghi arg f (z 0 ) în jurul lui z 0, compusă cu o omotetie de centru z 0 şi raport f (z 0 ), urmată de o translaţie care îl duce pe z 0 în f(z 0 ). Prin urmare, deoarece 21
toate aceste transformări păstreaza mărimea şi orientarea unghiurilor, funcţiile derivabile au şi ele aceeaşi proprietate (se spune că sunt transformări conforme). In desenul precedent se observă că cele patru colţuri ale pătratului alb au fost transformate în cele patru colţuri roşii, păstrând mărimea lor de 90 (unghiul dintre două curbe este prin definiţie unghiul dintre tangentele la curbe în punctul de intersecţie). Să observăm că aplicaţia z z, fiind o simetrie faţă de o dreaptă, conservă unghiurile dar schimbă orientările, deci nu este conformă şi, în consecinţă, nu este derivabilă. In adevăr, f(z) = z = x iy = u(x, y) + iv(x, y) nu respectă prima dintre condiţiile Cauchy-Riemann: u v (x, y) = 1 1 = (x, y). x y Încheiem scurta noastră prezentare a funcţiilor complexe cu o identitate celebră, şi anume cu formula lui Euler e iθ = cos θ + i sin θ, pentru orice θ R, care se obţine imediat prin calcul cu serii de puteri e iθ = 1 + iθ 1! + i2 θ 2 + i3 θ 3 +... 2! 3! 22
) ( ) = (1 θ2 2! + θ4 θ 4!... + i 1! θ3 3! + θ5 5!... = cos θ + i sin θ. Aplicând această formulă, găsim descompunerea pe componente a funcţiei exponenţiale: pentru orice z = x + iy din C. e z = e x+iy = e x e iy = e x (cos y + i sin y), 23