Sunteți pe pagina 1din 13

UNIVERSITATEA „POLITEHNICA” DIN BUCUREȘTI

FACULTATEA TRANSPORTURI

Departamentul Telecomenzi și Electronică în Transporturi

Temă laborator
Prelucrarea digitală a
semnalelor

București
2023
UNIVERSITATEA „POLITEHNICA” DIN BUCUREȘTI
FACULTATEA TRANSPORTURI

Departamentul Telecomenzi și Electronică în Transporturi

Rezolvarea ecuațiilor cu
Python

București
2023
Cuprins

CAPITOLUL 1. INTRODUCERE ...................................................................................... 1

1.1 DESCRIERE SYMPY ...................................................................................................... 1


1.2 INSTALAREA BIBLIOTECII SYMPY ................................................................................ 1

1.3 DEFINIREA VARIABILELOR ........................................................................................... 2


CAPITOLUL 2. EXPRESII ȘI SUBSTITUȚII .................................................................. 2

2.1 EXPRESIILE .................................................................................................................. 2


2.2 SUBSTITUȚII................................................................................................................. 2

CAPITOLUL 3. ECUAȚII ÎN PYTHON ........................................................................... 4


CAPITOLUL 4. REZOLVAREA ECUAȚIILOR ÎN PYTHON...................................... 5

4.1 REZOLVAREA DE ECUAȚII CU DOUĂ SOLUȚII ................................................................ 5


4.2 REZOLVAREA UNUI SISTEM DE ECUAȚII PENTRU DOUĂ NECUNOSCUTE ........................ 6

4.3 REZOLVAREA ECUAȚIILOR DIFERENȚIALE ÎN PYTHON ................................................. 7


4.3.1 Rezolvarea ecuațiilor diferențiale fără condiții inițiale .......................................... 7
4.3.2 Rezolvarea ecuațiilor diferențiale cu condiții inițiale date ..................................... 8
CAPITOLUL 5. REPREZENTAREA GRAFICĂ A ECUAȚIILOR .............................. 8

BIBLIOGRAFIE .................................................................................................................... 10
Capitolul 1. Introducere
1.1 Descriere Sympy
SymPy sau symbolic math este o bibliotecă din Python utilizată pentru a realiza
reprezentarea simbolică a expresiilor matematice dar și pentru rezolvarea acestora. Un exemplu
de expresie matematică simbolică este:

𝑥2 + 𝑦2 = 𝑧 (1)

Expresia (1) conține simbolurile x, y și z. În cazul în care declarăm o a doua expresie


simbolică, cum ar fi:
𝑥 =𝑎+𝑏 (2)

în acest context, putem înlocui pe a+b cu x și rezultă următoarea expresie:

(𝑎 + 𝑏)2 + 𝑦 2 = 𝑧
(3)
𝑎2 + 2𝑎𝑏 + 𝑏 2 + 𝑦 2 = 𝑧

Pentru a-l putea determina pe y în funcție de a, b și z rezultă următoarea expresie:

𝑦 = √𝑧 − 𝑎2 − 2𝑎𝑏 − 𝑏 2 (4)

În înlocuirea simbolică de mai sus simbolurile matematice au fost rearanjate, grupate și


inserate. Niciuna dintre variabile nu este egalată cu o valoare numerică, dar cu toate acestea se
poate rezolva ecuația în sensul de a exprima o variabilă în funcție de celelalte. În cazul în care
avem valori numerice pentru z, a și b, putem folosi Python pentru a calcula valoarea lui y. [1]

1.2 Instalarea bibliotecii SymPy


Pentru a putea utiliza SymPy este nevoie să instalăm această bibliotecă. SymPy vine
preinstalat cu distribuția Anaconda din Python. În cazul în care utilizatorul nu folosește
distribuția Anaconda a Python, atunci biblioteca SymPy poate fi instalată cu ajutorul consolei
Anaconda Prompt utilizând comanda: conda install sympy.
De asemenea, Sympy poate fi instalat folosind Python package manager pipm utilizând
comanda: pip install sympy. [2]

1
1.3 Definirea variabilelor
Înainte de a putea construi expresii matematice simbolice sau ecuații matematice
simbolice cu ajutorul bibliotecii SymPy trebuie să creăm variabile matematice simbolice. [3]
Pentru a defini variabile matematice simbolice mai întâi trebuie să importăm funcția
symbols() din modulul SymPy utilizând instrucțiunea:

from sympy import symbols

Definirea simbolurilor matematice x și y se face utilizând instrucțiunile:

x = symbols(’x’)
y = symbols(’y’)

De asemenea, se pot defini mai multe simboluri cu o singură linie de cod astfel:

x, y = symbols(’x y’)

Capitolul 2. Expresii și substituții


Variabilele matematice simbolice pot fi combinate în expresii matematice simbolice.
Odată introduse într-o expresie, variabilele pot fi schimbate prin substituție. [4]

2.1 Expresiile
O expresie matematică simbolică este o combinație de variabile matematice simbolice
cu numere și operatori matematici. Aceleași reguli standard de calcul folosite în Python se
aplică și pentru expresiile simbolice.
După ce au fost definite variabilele x și y ca simboluri, se poate crea o expresie
matematică utilizând aceste simboluri folosind următoarele instrucțiuni în Python. [4]

from sympy import symbols


x, y = symbols('x y')
expr = 2*x + y

2.2 Substituții
Pentru a realiza înlocuirea unei simbol matematic cu o valoare numerică se utilizează
funcția .subs(simbol_matematic, valoare_numerică). Primul argument este simbolul
matematic, iar al doilea este valoarea numerică. [4]

2
Pentru a înlocui în expresia precedentă valoarea lui x cu 2 se va folosi instrucțiunea în
felul următor:

expr.subs(x, 2)

Funcția .subs() nu înlocuiește permanent variabila x, aceasta doar completează


substituția o singură dată, ceea ce înseamnă că dacă obiectul expr este apelat pe rândul următor
aceasta va fi returnat sub forma originală, de dinainte de substituție.
Pentru a face înlocuirea permanent trebuie ca obiectul expresiei substituite să fie atribuit
unui nou obiect în felul următor:

from sympy import symbols


x, y = symbols('x y')
expr = 2*x + y
expr2 = expr.subs(x, 2)

Variabilele SymPy pot fi substituite în expresii. În secvența de cod următoare, simbolul


z este înlocuit cu simbolul x:

from sympy import symbols


x, y, z = symbols('x y z')
expr = 2*x + y
expr2 = expr.subs(x, z)

Expresiile matematice pot fi substituite în alte expresii. Se consideră expresia


𝑦 + 2𝑥 + 𝑧 −3 în care se înlocuiește 𝑦 = 2𝑥, iar rezultatul final 2𝑥 + 2𝑥 2 + 𝑧 −3 . Acest lucru
2

se realizează în Python folosind următoarea secvență de cod:

from sympy import symbols


x, y, z = symbols('x y z')
expr = y + 2*x**2 + z**(-3)
expr2 = expr.subs(y, 2*x)

Un exemplu practic care implică simboluri matematice ca variabile, expresii și


𝑄𝑣
substituții este ecuația 𝑛0 𝑒 −𝑅𝑇 . În Python aceasta se realizează cu ajutorul următoarelor
instrucțiuni:

from sympy import symbols, exp


n0, Qv, R, T = symbols('n0 Qv R T')
expr = n0*exp(-Qv/(R*T))

Pentru a înlocui numeric simbolurile folosite se utilizează instrucțiunea:

3
expr2 = expr.subs(n0, 3.48e-6).subs(Qv,12700).subs(R, 8031).subs(T, 1000+273)
3.48∙10−6
Această instrucțiune înlocuiește numeric în expresie și rezultă forma: 12700 .
𝑒 10223463
Pentru a efectua calculul numeric se utilizează funcția .evalf(număr_cifre).

from sympy import symbols, exp


n0, Qv, R, T = symbols('n0 Qv R T')
expr = n0*exp(-Qv/(R*T))
expr2 = expr.subs(n0, 3.48e-6).subs(Qv,12700).subs(R, 8031).subs(T, 1000+273)
expr2.evalf(4)

Rezultatul returnat fiind: 3.476 ∙ 10−6 .[4]

Capitolul 3. Ecuații în Python


În matematică, o ecuație este o propoziție matematică ce afirmă că două expresii
matematice sunt egale (o identitate) doar pentru anumite valori ale variabilelor implicate în
acestea (sau chiar pentru nici o valoare). Valorile variabilelor pentru care egalitatea este
adevărată poartă numele de soluții. Propozițiile matematice care definesc ecuațiile pot fi
adevărate (dacă au cel puțin o soluție) sau false (dacă nu au soluție). [5]
Ecuațiile în Python se definesc folosind biblioteca SymPy și variabile matematice.
Ecuațiile din SymPy nu sunt expresii, pentru că, o expresie este formată din simboluri și
operatori. Expresiile nu au egalitate, iar ecuațiile au egalitate. O ecuație poate fi gândită ca o
expresie egală cu ceva. [6]
Un exemplu simplu de ecuație este 4𝑥 + 2 = 0.

from sympy import symbols, Eq


x = symbols('x')
eq1 = Eq(4*x + 2, 0)

O ecuație ce nu este egală cu zero: 2𝑦 – 𝑥 = 5 trebuie egalată cu 0, înainte de a o


introduce în cod, 2𝑦 – 𝑥 − 5 = 0.

from sympy import symbols, Eq


x,y = symbols('x y')
eq2 = Eq(2*y – x – 5, 0)

Simbolurile și expresiile pot fi înlocuite în ecuații. Putem modifica în ecuație variabila


x cu variabila z.

from sympy import symbols, Eq


x, y, z = symbols ('x y z')

4
eq2 = Eq(2*y – x – 5, 0)
eq3 = eq2.subs(x ,z)
eq3

Out: 2𝑦−𝑧−5=0

Capitolul 4. Rezolvarea ecuațiilor în Python


Funcția solve() din SymPy poate fi folosită pentru a rezolva ecuații și expresii care
conțin variabile matematice.
Pentru rezolvarea unei ecuații simple de tipul 𝑥 – 4 – 2 = 0 folosim funcția solve().
[7]

from sympy import symbols, solve


x = symbols('x')
expr = x-4-2
sol = solve(expr)
num = sol[0] num

Out:6

4.1 Rezolvarea de ecuații cu două soluții


Ecuațiile precum 𝑥 2 − 5𝑥 + 6 = 0, au două soluții. Funcția SymPy solve() poate fi
folosită pentru a rezolva o astfel de ecuație. Funcția ia ca intrare o ecuație sau un sistem de
ecuații și returnează o listă de soluții (dacă există). Elementele din listă, în acest caz sunt cele
două soluții. [8]

from sympy import symbols, Eq, solve


x = symbols('x')
eq1 = Eq(x**2 -5*x + 6,0)
sol = solve(eq1)
sol

Out: [2, 3]

Funcția solve() acceptă multe alte opțiuni, cum ar fi:


• rezolvarea ecuațiilor cu numere complexe;
• rezolvarea ecuațiilor cu ipoteze;
• rezolvarea ecuațiilor cu variabile multiple și multe altele.

5
4.2 Rezolvarea unui sistem de ecuații pentru două necunoscute
x + 2y = 3
Un exemplu de sistem este { . Pentru rezolvarea sistemului folosim
2x − y = 4
funcția solve().[8]

from sympy import *


x, y = symbols('x y')
eq1 = Eq(x + 2*y, 3)
eq2 = Eq(2*x - y, 4)
sol = solve((eq1, eq2), (x, y))
sol

În acest exemplu, importăm mai întâi modulele necesare din SymPy. Definim apoi
variabilele x și y ca simboluri, astfel încât să le putem folosi în ecuațiile noastre. Apoi, creăm
două ecuații, eq1 și eq2, care reprezintă cele două ecuații din sistemul nostru: 𝑥 + 2𝑦 = 3 și
2𝑥 − 𝑦 = 4. În cele din urmă, folosim funcția solve() pentru a găsi soluțiile sistemului de
ecuații definit de eq1 și eq2, în raport cu variabilele x și y. Soluțiile sunt returnate într-un
dicționar, unde cheile sunt variabilele, iar valorile sunt soluțiile. Ieșirea codului de mai sus va
fi:
Out: {x: 11/5, y: 2/5}

Soluția este afișată sub forma unui dicționar Python. Putem accesa soluția din
dicționarul de soluții folosind indexarea obișnuită a dicționarului.[8]

from sympy import *


x, y = symbols('x y')
eq1 = Eq(x + 2*y, 3)
eq2 = Eq(2*x - y, 4)
sol = solve((eq1, eq2), (x, y))
sol_dict = solve((eq1,eq2), (x, y))
print(f'x = {sol_dict[x]}')
print(f'y = {sol_dict[y]}')

Out: x = 11/5, y = 2/5

6
4.3 Rezolvarea ecuațiilor diferențiale în Python
În matematică, o ecuație diferențială ordinară este o ecuație diferențială care descrie o
relație prestabilită între o funcție necunoscută, argumentele acesteia și derivatele ordinare ale
sale. În practică, se presupune de obicei că "funcția necunoscută" există, deși stabilirea
riguroasă a acestui fapt poate cere noțiuni de topologie. Ordinul unei ecuații diferențiale este
dat de derivata de cel mai mare ordin a funcției necunoscute. [9]
Pentru a rezolva ecuații diferențiale în Python se folosește funcția dsolve(). Se dă ca
exemplu ecuația diferențială ordinară 𝑥𝑓 ′′ (𝑥) + 𝑓 ′ (𝑥) = 𝑥 3 . În continuare, aceasta va fi
rezolvată cu și fără condiții inițiale. [10]

4.3.1 Rezolvarea ecuațiilor diferențiale fără condiții inițiale


Rezolvarea matematică a ecuației fără condiții inițiale se face în felul următor:

𝑑2 𝑓(𝑥) 𝑑𝑓(𝑥)
𝑥 + = 𝑥3
𝑑𝑥 2 𝑑𝑥
𝑥4 (5)
⇒ 𝑓(𝑥) = 𝐶1 + 𝐶2 log(𝑥) +
16
𝑥4
Pentru C1 = 0 și C2 = 1 ⇒ 𝑓(𝑥) = log(𝑥) + 16

În Python, rezolvarea se face altfel:

import sympy as sp
x = sp.Symbol('x')
f = sp.Function('f')(x)
# crearea ecuatiei diferentiale
diff_eq = sp.Eq(x*f.diff(x,x)+f.diff(x), x**3)
sol = sp.dsolve(diff_eq, f)
# preluarea membrului drept al ecuatie
exp = sol.rhs
# inlocuirea constantelor C1 = 0 si C2 = 1
C1 = tuple(exp.free_symbols)[2]
C2 = tuple(exp.free_symbols)[1]
exp.subs(C1, 0).subs(C2, 1)

7
4.3.2 Rezolvarea ecuațiilor diferențiale cu condiții inițiale date
În continuare se va rezolva aceeași ecuație diferențială doar că se impun condițiile
𝑓(1) = 0 și 𝑓 ′ (2) = 1. Rezolvarea matematică este următoarea:

𝑑2 𝑓(𝑥) 𝑑𝑓(𝑥)
𝑥 + = 𝑥3
𝑑𝑥 2 𝑑𝑥
𝑥4 (6)
⇒ 𝑓(𝑥) = 𝐶1 + 𝐶2 log(𝑥) +
16
𝑥4 1
Pentru condițiile impuse 𝑓(1) = 0 și 𝑓 ′ (2) = 1 ⇒𝑓(𝑥) = 16 − 2log(𝑥) − 16

În Python, rezolvarea se face altfel:

import sympy as sp
x = sp.Symbol('x')
f = sp.Function('f')(x)
# definirea conditiilor initiale
ics = {f.subs(x,1):0, f.diff().subs(x,2):1}
# crearea ecuatiei diferentiale
diff_eq = sp.Eq(x*f.diff(x,x)+f.diff(x), x**3)
# rezolvarea ecuatiei diferentiale si preluarea membrului drept
ivp = sp.dsolve(diff_eq, ics=ics).rhs
# verificare conditii initiale
ivp.subs(x,1)
ivp.diff().subs(x,2)
# verificarea daca solutia satisface ecuatia diferentiala
(x*ivp.diff(x,x)+ivp.diff()).simplify()

Capitolul 5. Reprezentarea grafică a ecuațiilor


Pentru a reprezenta ecuațiile simbolice în Python se utilizează funcția plot(). [11] În
continuare sunt realizate reprezentările grafice pentru ecuația de gradul II și a ecuației
diferențiale cu condiții inițiale date prezentată anterior.

from sympy import symbols


from sympy.plotting import plot
x = symbols('x')
# reprezentarea grafica a ecuatiei de gradul II
plot(x**2 -5*x + 6)

8
Reprezentarea grafică a ecuației de gradul II

import sympy as sp
from sympy.plotting import plot
x = sp.Symbol('x')
f = sp.Function('f')(x)
# definirea conditiilor initiale
ics = {f.subs(x,1):0, f.diff().subs(x,2):1}
# crearea ecuatiei diferentiale
diff_eq = sp.Eq(x*f.diff(x,x)+f.diff(x), x**3)
# rezolvarea ecuatiei diferentiale si preluarea membrului drept
ivp = sp.dsolve(diff_eq, ics=ics).rhs
sol = (x*ivp.diff(x,x)+ivp.diff())
# afisarea grafica a ecuatiei
plot(sol)

Reprezentarea grafică a ecuației diferențiale

9
Bibliografie
[1] https://problemsolvingwithpython.com/10-Symbolic-Math/10.01-SymPy/
[2] https://problemsolvingwithpython.com/10-Symbolic-Math/10.02-Installing-SymPy/
[3] https://problemsolvingwithpython.com/10-Symbolic-Math/10.03-Defining-
Variables/
[4] https://problemsolvingwithpython.com/10-Symbolic-Math/10.04-Expressions-and-
Substitutions/
[5] https://ro.wikipedia.org/wiki/Ecua%C8%9Bie
[6] https://problemsolvingwithpython.com/10-Symbolic-Math/10.05-Equations/
[7] https://problemsolvingwithpython.com/10-Symbolic-Math/10.06-Solving-Equations/
[8] https://problemsolvingwithpython.com/10-Symbolic-Math/10.07-Solving-Two-
Equations-for-Two-Unknowns/
[9] https://ro.wikipedia.org/wiki/Ecua%C8%9Bie_diferen%C8%9Bial%C4%83_ordinar
%C4%83
[10] https://www.youtube.com/watch?v=Z2havWsxa-E
[11] https://docs.sympy.org/latest/modules/plotting.html

10

S-ar putea să vă placă și