Calcul formel avec Simpy

Calcul sur les complexes

Déclaration des bibliothèques à importer

In [99]:
#-*- coding: utf-8 -*-
#Utilisation de Sympy pour faire des calculs avec des complexes
#Programme créé par Martine Arrou-Vignod Août 2015

#bibliothèques pouvant être utiles 
%matplotlib inline

from math import * 
# Pour l'algèbre linéaire
import numpy as np
import numpy.linalg as la#Pour tracer des courbes
#Pour tracer des courbes
import matplotlib.pyplot as plt

#pour faire du calcul formel
from sympy import *
In [100]:
#Pour pouvoir utilser mathjax pour écrire des formules 
init_printing(use_latex='mathjax')

Nombres complexes

Ecriture d'un nombre complexe

In [101]:
#Ecriture d'un nombre complexe sous forme cartésienne
z=sqrt(3)+6*I
z
Out[101]:
3+6i
In [102]:
#Ecriture d'un nombre complexe sous forme trigonométrique
z=3*exp(I*pi/6)
z
Out[102]:
3eiπ6

Définition des variables utiles dans les calculs

In [103]:
#Défintion des variables utiles dans les calculs et de leur type 
x,y,z,t,a,b,c,d,teta,r =symbols("x y z t a b c d teta,r",real=True)
k,n,p,l=symbols("k n p l",integer=True)

Fonctions créées par Martine Arrou-Vignod pour manipuler des complexes

In [104]:
####Déclaration des fonctions utiles  
In [105]:
def argumentz(z1):
    return simplify(arg(z1))

#-----------------
def modulez(z1):
    return simplify(abs(z1))
#-----------------
#renvoie la forme cartésienne d'un produit z1*z2
def multiz(z1,z2):
    mul=z1*z2
    mul=simplify(mul.expand(complex=True))
    return mul 
#-----------------
#renvoie la forme cartésienne d'un nombre quelconque de complexes
def multizn(*z):
    mul=1
    for k in range(len(z)):
        mul=mul*z[k]
    mul=simplify(mul.expand(complex=True))
  
    return mul 
#-----------------
#renvoie la forme cartésienne d'un quotient z1*z2

def divz(z1,z2):
    if modulez(z2) !=0 :
        quo=z1*conjugate(z2)
        quo=quo.expand(complex=True)
        quo=quo/(modulez(z2)**2)
        quo=simplify(quo.expand(complex=True))
        return quo
    else :
        return "erreur: division  par zéro"
def inversez(z1):
    return divz(1,z1)
#-----------------#
 
#renvoie le nombre z1*z2, son module, son argument
#Si z2=1 renvoie le nombre complexe z1, son module, son argument
def multiplicationz(z1,z2):
    argumentmul=argumentz(z1)+argumentz(z2)
    mulc=multiz(z1,z2)
    mulc=mulc.expand(complex=true)
    modulemul=modulez(mulc)
    modulemul=modulemul.expand(basic=true)
    argumentmul=argumentmul.expand(basic=true)
    return mulc,modulemul,argumentmul

def argumentproduit(*z):
    argumentmul=0
    for k in range(len(z)):
        argumentmul=argumentmul+arg(z[k])
    argumentmul=simplify(argumentmul.expand(complex=true))
    return argumentmul

def moduleproduit(*z):
    resultat=simplify(abs(multizn(*z)))
    return resultat

#renvoie le nombre z1/z2, son module, son argument        
def divisionz(z1,z2):
    if modulez(z2) !=0 :
        modulequo=modulez(z1)/modulez(z2)
        argumentquo=argumentz(z1)-argumentz(z2)
        quoz=divz(z1,z2)
        return quoz,modulequo, argumentquo
 

  
#renvoie le nombre z1, son module, son argument        
def formesz(z1):
    forme=multiplicationz(z1,1)
    return forme
In [106]:
argumentz((1+I)**3*(1-I)**5)
Out[106]:
π2
In [107]:
modulez((1+I)**3*(1-I)**5)
formesz(((1+I)**3*(1-I)**5))
Out[107]:
(16i,16,π2)
In [108]:
z=2*exp(-I*pi/4)
z=z.expand(complex=true)
z
Out[108]:
22i

Résolution d'exercices

In [109]:
z1=2*exp(-I*pi/4)
z2=2*exp(-I*pi/3)
z3=6*exp(-I*pi/6)
z4=1+I
z5=3+3*I
z=multizn(z1,z2,z3,z4,inversez(z5))
z
Out[109]:
42(1+i)
In [110]:
teta=argumentproduit(z1,z2,z3,z4,inversez(z5))
teta
Out[110]:
3π4
In [111]:
mo=moduleproduit(z1,z2,z3,z4,inversez(z5))
mo
Out[111]:
8
In [112]:
zi=inversez(z5)
zi
Out[112]:
16i6

Calcul de z4=(a+ib)(c+id)reit

In [113]:
z2=a+I*b
z1=c+I*d
z3=r*exp(I*t)
z4=multizn(z2,z1,z3)
moduleproduit(z2,z1,z3)
Out[113]:
a2c2+a2d2+b2c2+b2d2r
In [114]:
#partie réelle de z4
re(simplify(z4))
Out[114]:
r(accos(t)adsin(t)bcsin(t)bdcos(t))
In [115]:
teta=argumentz(z4)
teta
Out[115]:
arg(r(iacsin(t)+accos(t)adsin(t)+iadcos(t)bcsin(t)+ibccos(t)ibdsin(t)bdcos(t)))
In [116]:
zc=re(simplify(z4))+I*im(simplify(z4))
zc
Out[116]:
ir(acsin(t)+adcos(t)+bccos(t)bdsin(t))+r(accos(t)adsin(t)bcsin(t)bdcos(t))
In [117]:
#Affiche le nombre sous forme cartésienne et déterminer son module et son argument
print("(forme cartésienne, module, argument)")
z=formesz(4+4*I)
z
(forme cartésienne, module, argument)
Out[117]:
(4+4i,42,π4)
In [118]:
z1=3+3*sqrt(3)
z2=4*(1-I)
quotient=divisionz(z1,z2)
print("(forme cartésienne, module, argument)")
quotient
(forme cartésienne, module, argument)
Out[118]:
(38+338+3i8+3i83,28(3+33),π4)
In [119]:
print("forme cartésienne")
quotient[0]
forme cartésienne
Out[119]:
38+338+3i8+3i83
In [120]:
print("module")
quotient[1]
module
Out[120]:
28(3+33)
In [121]:
print("argument")
quotient[2]
argument
Out[121]:
π4
In [122]:
z1=1+I*1
z2=3*sqrt(3)+3*I
z3=1-I
produit=multiplicationz(z1,z2)
produit
Out[122]:
(3+33+3i+33i,3+33+3i+33i,5π12)
In [123]:
res=multiz(produit[0],z3)
res
Out[123]:
63+6i
In [124]:
resn=multiplicationz(res,1)
resn
Out[124]:
(63+6i,12,π6)
In [137]:
res2=multiz(z3,multiz(z1,z2))
res2=multiplicationz(res2,1)
res2
Out[137]:
(63+6i,12,π6)
In [138]:
res3=multizn(z3,z1,z2)
res3=multiplicationz(res3,1)
res3
Out[138]:
(63+6i,12,π6)

Exercice 1

Déterminer la forme cartésienne, le module et l'argument d'un quotient de nombres complexes

Exemple 1 z1=a+ibc+id
In [126]:
zi=divisionz(a+I*b,c+I*d)

zi
Out[126]:
(1c2+d2(aciad+ibc+bd),a2+b2c2+d2,arg(a+ib)arg(c+id))
Exemple 2 Zc=z2iz+i
In [127]:
z=x+I*y
Zc=divisionz(z-2*I,z+I)
Zc
Out[127]:
(x23ix+y2y2x2+y2+2y+1,x2+y24y+4x2+y2+2y+1,arg(x+iy2i)arg(x+iy+i))
In [128]:
re(Zc[0])+I*im(Zc[0])
Out[128]:
3ixx2+y2+2y+1+x2+y2y2x2+y2+2y+1
In [129]:
solve(im(Zc[0]))
Out[129]:
[{x:0}]
In [130]:
solve(re(Zc[0]))
Out[130]:
[{x:y2+y+2},{x:y2+y+2}]
Pour toute question envoyer un mail à Martine Arrou-Vignod
FORMAV Votre partenaire formation