35
E. SCHEIBER Laborator de ANALIZ ˘ A NUMERIC ˘ A SAGE Bra¸ sov

Laborator de ANALIZA NUMERIC˘ A˘ SAGE5f3f8f22a1639.pdf.upl/S… · înzestrat cu o aplica¸tie de navigare, Fig.1.1, Sage fiind în nor. Adresa de apelare este . Vom presupune

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • E. SCHEIBER

    Laborator de ANALIZĂ NUMERICĂ

    SAGE

    Braşov

  • Cuprins

    1 Sage 31.1 Entităţi Sage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2 Facilităţi grafice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2 Algebră liniară numerică 102.1 Factorizarea unei matrice . . . . . . . . . . . . . . . . . . . . . . . . . 102.2 Rezolvarea sistemelor algebrice de ecuaţii liniare . . . . . . . . . . . 12

    3 Rezolvarea sistemelor şi ecuaţiilor algebrice 143.1 Rezolvarea sistemelor algebrice de ecuaţii neliniare . . . . . . . . . . 143.2 Rezolvarea ecuaţiilor algebrice . . . . . . . . . . . . . . . . . . . . . . 163.3 Rezolvarea ecuaţiilor polinomiale . . . . . . . . . . . . . . . . . . . . 17

    4 Rezolvarea problemelor de interpolare 194.1 Interpolare polinomială . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    5 Derivare numerică 215.1 Derivarea funcţiilor de o variabilă reală . . . . . . . . . . . . . . . . . 215.2 Cazul funcţiilor de mai multe variabile . . . . . . . . . . . . . . . . . 22

    6 Metoda celor mai mici pătrate 23

    7 Integrare numerică 267.1 Integrarea funcţiilor de o variabilă reală . . . . . . . . . . . . . . . . . 267.2 Calculul numeric al integralelor duble . . . . . . . . . . . . . . . . . . 27

    8 Integrarea numerică a E.D.O. 298.1 Rezolvarea problemei cu valori iniţiale . . . . . . . . . . . . . . . . . 29

    Bibliografie 35

    2

  • Capitolul 1

    Sage

    Cap. 2

    Sage, www.sagemath.org, integrează mai multe produse de calcul matematiccu sursele publice (Maxima (maxima.sourceforge.net), octave (https://www.gnu.org/software/octave), R (https://www.r-project.org), etc.).

    Iniţiatorul proiectului Sage a fost William A. Stein.Sage a fost fost dezvoltat în Python cuprinzând o serie de pachete ale acestuia

    ca NumPy, SciPy, matplotlib, Sympy. Cu toate acestea, demersul care a declanşatacţiunea de a elabora această lucrare a fost aplicaţia Web, CoCalc (SagaMath-Cloud) prin care avem acces la Sage, şi nu numai.

    Pentru familiarizarea cu Sage recomandăm consultarea lucrărilor [1], [2] ac-cesibile gratuit.

    Astfel, nu este nevoie decât de un dispozitiv de calcul conectat la Interet şiînzestrat cu o aplicaţie de navigare, Fig. 1.1, Sage fiind în nor. Adresa de apelareeste

    https://sagecell.sagemath.org.

    Vom presupune că cititorul posedă cunoştinţe şi deprinderi de lucru în Python.În Sage se face distincţtie în caracterele mari şi mici cu unele excepţii.În Sage declararea tipului se face dinamic (la fel ca în Python).Valoarea de pornire a unui indice este 0.

    3

    www.sagemath.orgmaxima.sourceforge.nethttps://www.gnu.org/software/octavehttps://www.gnu.org/software/octavehttps://www.r-project.orghttps://sagecell.sagemath.org

  • 4 CAPITOLUL 1. SAGE

    Figure 1.1: Interfaţa grafică Sage din navigator

    1.1 Entităţi Sage

    Inele şi corpuri predefinite

    Z Z inelul numerelor întregiQQ corpul numerelor raţionaleRR corpul numerelor reale (flotante)CC corpul numerelor complexeIntegers(n) Inelul / corpul Zn

    R. < x >= PolynomialRing(E)R. < x >= E [′x ′]R. < x >= E []

    Inelul polinoamelor în xcu coeficienţi din E .

    K . < a >= QuadraticField(n) K = {u + vpn : u, v ∈Q}, a =pn

    Exemplul 1.1

    r=Integers(6)print r(2)*r(3)

    Exemplul 1.2

    S.=PolynomialRing(ZZ)f=y^3-6*y^2+11*y-6print f

  • 1.1. ENTITĂŢI SAGE 5

    Exemplul 1.3

    K.=QuadraticField(3)x=2+3/2*ay=2-3/2*aprint x*y

    Constante

    pi πe ei , I itr ue,Tr uef al se,F al seIn f i ni t y, oo ∞

    VariabileVariabila x este predefinită. Orice altă variabilă trebuie

    • definită print-o atribuire;

    • declarată prin

    – var (′i denti f i cator V ar1, . . .′)

    – i denti f i cator V ar = SR.var (′i denti f i cator V ar ′) (SR SymbolicRing).O asemenea variabilă se numeşte variabilă simbolică.

    var(’y,z’)print expand((y+z)^3)

    y^3 + 3*y^2*z + 3*y*z^2 + z^3

    a=SR.var(’a’)print expand((a+1)^2)

    a^2 + 2*a + 1

    Funcţii / MetodeSage posedă funcţii care se pot comporta ca şi metode.

    n(·), N (·), ∗.n(), ∗.N () Evaluare numericănumer i cal_appr ox(expr,di g i t s = nrCi f r e)pr i nt ∗, pr i nt (·) Afişaresqr t (expr, al l = tr ue)

  • 6 CAPITOLUL 1. SAGE

    sqrt(4,all=true)

    [2, -2]

    Tipuri de date

    • Tipuri simple

    – numerice

    * integer

    * float

    * complex

    – String

    • Tipuri compuse

    – lista

    – dicţionar (tuple)

    ŞiruriDefinirea unui şir:

    • Prin enumerarea elementelor:

    s = [x1, . . . , xn]s = [1,2,3] introduce un şir de numere întregi iar s

    • Prin valorile unei funcţii:

    f(x)=x^2s=[f(i) for i in range(5)]

    Rezultă s = 0,1,4.9.16.

    • Şir de elemente din inelul / corpul E

    vector(E , [ lista_elementelor ])vector([ lista_elementelor ])

  • 1.1. ENTITĂŢI SAGE 7

    Accesul la un element al matricei m se face prin sintaxa s[i ndi ce].

    Funcţii cu argument şiruri:

    len(s) Numărul elementelor din şir

    Matrice

    Definirea unei matrice

    • Matrice Mm,n(E) Sage

    – matrix(E ,m,n,[ lista_elementelor ])

    – matrix(m,n,[ lista_elementelor ])

    – matrix([[a1,1, . . . , a1,n], [a2,1, . . . , a2,n], . . . , [am,1, . . . , am,n]])

    • Prin intermediul unui tablou Python

    import numpypyA=numpy.array(matrice_Sage,float)A=matrix(pyA)

    from scipy import ∗A = mat(′[a1,1, . . . , a1,n ; a2,1, . . . , a2,n ; . . . ; am,1, . . . , am,n]′)

    Matrice speciale

    identity_matrix(E ,n) Matricea In ca elemente din Eidentity_matrix(n) Matricea In ca elemente din Z

    Accesul la un element al matricei m se face prin sintaxa

    m[l i ni a,coloana].

  • 8 CAPITOLUL 1. SAGE

    Funcţii / metode cu argument matrice:

    A.nrows() Numărul liniilorA.ncols() Numărul coloanelordet(A) = A.det() Determinantul matricei Arank(A) = A.rank() Rangul matricei AA.inverse() Inversa matricei AA.conjugate) Matricei AA.transpose) Transpusa matricei AA.conjugate_transpose) Transpusa matricei AA.exp) Matricei e A

    PolinoameDefinirea polinomului p(x) = c0xn + c1xn−1 + . . .+ cn−1x + cn este• import numpycoeff=[c_0,c_1,. . .,c_n]p=numpy.poly1d(coeff)

    • R. < x >= PolynomialRing(E)f = c0xn + c1xn−1 + . . .+ cn

    Funcţii / metode cu argument polinom:

    f .roots() Rădăcinile polinomului f aparţinândinelului din care aparţine f

    Instrucţiuni

    Funcţii definite de utilizatorAceste funcţii pot fi definite

    • Potrivit sintaxei din Python;

    • Prin sintaxa Sage

    numeFuncţie(listă argumente)=expresie

    1.2 Facilităţi grafice

    2D

    • pl ot ( f (x) Reprezintă graficul funcţiei f in intervalul [-1,1].

  • 1.2. FACILITĂŢI GRAFICE 9

    • pl ot ( f (x), a,b) Reprezintă graficul funcţiei f in intervalul [a,b].

    • pl ot ( f (x), a,b, var i abi l eOpti onal e)

    Variabilele opţionale pot fi:

    ymi n = A, ymax = Baxes = f al seleg end_l abel =′ str i ng ′

    • pl ot (. . .)+pl ot (. . .)+ . . . Reprezentarea grafică a mai multor funcţii.• par ametr i c_pl ot ((x, y), (t , t0, t1)), unde x = x(t ), y = y(t ).

    3D

    • var(’y ’)plot3d( f (x, y), (x, x0, x1), (y, y0, y1))

    • var(’y ’)line3d([(x(t ), y(t ), z(t )) for t in srange(t0, t1, step)])

  • Capitolul 2

    Algebră liniară numerică

    Cap. 1 Cap. 3

    Calculele se fac în corpurile Q sau R după cum sunt definite matricele dereferinţă.

    2.1 Factorizarea unei matrice

    Funcţiile

    • P,L,U = A.LU () calculează factorizarea LU a matricei A : PA = LU .• Q,R = X .QR() calculează factorizarea QR a matricei X : X =QR

    Dacă X ∈ Mn,k (R) atunci Q ∈ Mn(R), R ∈ Mn,k (R).

    Exemplul 2.1 Să se calculeze factorizarea LU a matricei

    A =

    1 2 −1 3 22 4 −2 5 1−1 −2 1 −3 −43 6 2 10 71 2 4 0 4

    .

    • Calcule înQ.

    10

  • 2.1. FACTORIZAREA UNEI MATRICE 11

    A=matrix([[1,2,-1,3,2],[2,4,-2,5,1],[-1,-2,1,-3,-4],[3,6,2,10,7],[1,2,4,0,4]])P,L,U=A.LU()print L[ 1 0 0 0 0][ 2/3 1 0 0 0][ 1/3 0 1 0 0][ 1/3 0 -1/2 1 0][-1/3 0 1/2 -1 1]print U[ 3 6 2 10 7][ 0 0 -10/3 -5/3 -11/3][ 0 0 10/3 -10/3 5/3][ 0 0 0 -2 1/2][ 0 0 0 0 -2]print P[0 0 0 1 0][0 1 0 0 0][0 0 0 0 1][1 0 0 0 0][0 0 1 0 0]

    Verificarea rezultatului se face calculând P ∗ A−L∗U , rezultat care trebuiesă fie matricea nulă.

    print P*A-L*U[0 0 0 0 0][0 0 0 0 0][0 0 0 0 0][0 0 0 0 0][0 0 0 0 0]

    • Calcule în R.

    import numpypyA=numpy.array([[1,2,-1,3,2],[2,4,-2,5,1],[-1,-2,1,-3,-4],[3,6,2,10,7],[1,2,4,0,4]],float)A=matrix(pyA)P,L,U=A.LU()

    Exemplul 2.2 Să se calculeze factorizarea QR a matricei

    X = 6 6 13 6 1

    2 1 1

    • Calcule înQ

    X=matrix([[6,6,1],[3,6,1],[2,1,1]])Q,R=X.QR()print Q[ 6/7 -2/7 -3/7][ 3/7 6/7 2/7][ 2/7 -3/7 6/7]print R[ 7 8 11/7][ 0 3 1/7][ 0 0 5/7]

  • 12 CAPITOLUL 2. ALGEBRĂ LINIARĂ NUMERICĂ

    Verificarea

    print X-Q*R[0 0 0][0 0 0][0 0 0]

    • Calcule în R.

    import numpypyX=numpy.array([[6,6,1],[3,6,1],[2,1,1]],float)X=matrix(pyX)Q,R=X.QR()print X-Q*R

    2.2 Rezolvarea sistemelor algebrice de ecuaţii liniare

    Pentru rezolvarea unui sistem algebric de ecuaţii liniare Ax = b, în cazul încare

    • numărul ecuaţiilor coincide cu numărul necunoscutelor;

    • determinantul sistemului este diferit de zero;

    se procedează după cum urmează:

    1. se fixează matricele A şi b;

    2. se calculează x = A.inverse()∗b sau x = A (̂−1)∗b.

    Exemplul 2.3 Să se rezolve sistemul algebric de ecuaţii liniarex1 + 2x2 + 3x3 + 4x4 = 11

    2x1 + 3x2 + 4x3 + x4 = 123x1 + 4x2 + x3 + 2x4 = 134x1 + x2 + 2x3 + 3x4 = 14

    • Rezolvarea înQ

    A=matrix([[1,2,3,4],[2,3,4,1],[3,4,1,2],[4,1,2,3]])b=vector([11,12,13,14])x=A.inverse()*bprint x

    (2, 1, 1, 1)

  • 2.2. REZOLVAREA SISTEMELOR ALGEBRICE DE ECUAŢII LINIARE 13

    • Rezolvarea în R

    import numpypyA=numpy.array([[1,2,3,4],[2,3,4,1],[3,4,1,2],[4,1,2,3]],float)A=matrix(pyA)pyB=numpy.array([11,12,13,14],float)b=vector(pyB)x=A.inverse()*bprint x

    (1.9999999999999996, 1.0, 1.0, 1.0000000000000004)

    În cazul unui sistem algebric de ecuaţii liniare incompatibil se poate calculaelementul care minimizează funcţionala J (x) = ‖b − Ax‖22. Acest element estesoluţia sistemului algebric de ecuaţii liniare compatibil AT Ax = AT b şi este datde funcţia numpy.linalg.lstsq prin x=lstsq(A,b)[0].

    Exemplul 2.4 Să se rezolve sistemul algebric de ecuaţii liniare2x − y + 3z = 7x + y + z = 4

    3x − 3y + 5z = 8

    în sensul celor mai mici pătrate.

    Rezolvarea este

    import numpyfrom numpy import linalgA=numpy.array([[2,-1,3],[1,1,1],[3,-3,5]])b=numpy.array([7,4,8])pyX=linalg.lstsq(A,b)[0]x=vector(pyX)print x

    (1.487179487179488, 1.2948717948717945, 1.551282051282051)

    Probleme

    1. Rezolvarea sistemelor algebrice de ecuaţii liniare non-Cramer

  • Capitolul 3

    Rezolvarea sistemelor şi ecuaţiiloralgebrice

    Cap. 2 Cap. 4

    3.1 Rezolvarea sistemelor algebrice de ecuaţii neliniare

    Pentru rezolvarea sistemului algebric de ecuaţii neliniaref1(x1, . . . , xn) = 0...fn(x1, . . . , xn) = 0

    sau scris sub formă concentrată f (x) = 0 cu

    x =

    x1...xn

    f (x) = f1(x1, . . . , xn)...

    fn(x1, . . . , xn)

    ,există posibilităţile:

    • Prin utilizarea funcţiei solve( f , x0) din pachetul scipy.optimize.

    Semnificaţia parametrilor este:

    14

  • 3.1. REZOLVAREA SISTEMELOR ALGEBRICE DE ECUAŢII NELINIARE 15

    – x0 reprezintă o aproximaţie iniţială a soluţiei sistemului.

    – f identificatorul funcţiei sau metodei Python care defineţte sistemulneliniarf (x) = 0.

    • Prin utilizarea funcţiei solve([ f1, . . . , fn], x1, . . . , xn) din Sage.

    Semnificaţia parametrilor este:

    – f1, . . . , fn expresiile funcţiilor;

    – x1, . . . , xn identificatorii variabilelor.

    Exemplul 3.1 Să se rezolve sistemul algebric de ecuaţii neliniare10x1 + x21 − 2x2x3 − 0.1 = 010x2 − x22 + 3x1x3 + 0.2 = 010x3 + x23 + 2x1x2 − 0.3 = 0

    Rezolvările sunt:

    • def fct(p):x=p[0]y=p[1]z=p[2]q=[10*x+x*x-2*y*z-0.1]q.append(10*y-y*y+3*x*z+0.2)q.append(10*z+z*z+2*x*y-0.3)return q

    from scipy import optimizeq=optimize.fsolve(fct,[0,0,0])print str(q)

    [ 0.00987017 -0.02004849 0.02994988]

    • var(’x,y,z’)f1=10*x+x^2-2*y*z-0.1f2=10*y-y^2+3*x*z+0.2f3=10*z+z^2+2*x*y-0.3s=solve([f1,f2,f3],x,y,z)print s

    [[x == 0.01397520235244187, y == 10.01996927803379, z == 0.001993385584197889],[x == (3.386875154789319 + 2.010478368431056*I),y == (1.781218037948081 - 5.365095109585582*I),z == (-1.682676176647445 + 4.398065359877499*I)],

    [x == (3.38687515478932 - 2.010478368431056*I),y == (1.781218037948081 + 5.365095109585582*I),z == (-1.682676176647445 - 4.3980653598775*I)],

    [x == (-4.551213064815993 - 0.1136691071105193*I),y == (-0.6210537689446403 - 3.830020696733519*I),

  • 16 CAPITOLUL 3. REZOLVAREA SISTEMELOR ŞI ECUAŢIILOR ALGEBRICE

    z == (0.5268149212853188 - 3.166712674504137*I)],[x == (-4.55121306481599 + 0.1136691071105085*I),y == (-0.6210537689446403 + 3.830020696733519*I),z == (0.5268149212853118 + 3.166712674504138*I)],

    [x == 0.009870167921038656, y == -0.02004848936963819, z == 0.02994987468671679],[x == -10.0099846390169, y == -0.01398811010640955, z == 0.001995448583567817],[x == 0.007122591322851401, y == 0.001431885449164067, z == -10.02990897269181]]

    3.2 Rezolvarea ecuaţiilor algebrice

    Dacă n = 1, adică dimensiunea spaţiului este 1, atunci f (x) = 0 cu f : I ⊂ R →R reprezintă o ecuaţie algebrică.

    Variante de rezolvare:

    • Utilizând funcţia optimize.fsolve.

    • Utilizând funcţia find_root cu sintaxa

    find_root( f (x), a,b)

    unde

    – f (x) este o funcţie Sage;

    – a,b definesc intervalul în care se caută soluţia ecuaţiei f (x) = 0.

    Exemplul 3.2 Să se rezolve ecuaţia 2x = x2.

    Graficul funcţiei f este reprezentat în Fig. 3.1.Se observă că ecuaţia are 3 soluţii dintre care x1 = 2 şi x2 = 4 se ghicesc ime-

    diat. Prezintă interes determinarea soluţiei negative.Rezolvarea ecuaţiei f (x) = 2x −x2 = 0 este• def f(x):

    return 2**x-x*xfrom scipy.optimize import fsolver=fsolve(f,-0.5)print(r)

    [-0.7666647]

    • f(x)=x^2-2^xy=find_root(f(x),-1,0)print y

    -0.766664695962

  • 3.3. REZOLVAREA ECUAŢIILOR POLINOMIALE 17

    Figure 3.1: y = 2x −x2

    3.3 Rezolvarea ecuaţiilor polinomiale

    În cazul particular al ecuaţiilor polinomiale se cere determinarea tuturor rădăcinilorreale sau complexe.

    Pentru aflarea rădăcinilor unui polinom se procedează astfel:

    • Utilizând funcţia numpy.roots

    1. Se defineşte vectorul coe f f cu coeficienţii polinomului.

    2. Se defineşte polinomul p = numpy.poly1d(coe f f ).3. r = numpy.roots(p).4. afişarea rezultatelor print str(r ).

    • Utilizând funcţia solve

    1. Se defineşte polinomul p(x) în variabila x.

  • 18 CAPITOLUL 3. REZOLVAREA SISTEMELOR ŞI ECUAŢIILOR ALGEBRICE

    2. Rădăcinile polinomului sunt calcutate ajutorul funcţiei solve cu opţi-unea to_poly_solve = True

    r = solve(p(x) == 0, x, to_poly_solve = True)3. print r.

    • Utilizând funcţia roots a ecuaţiei

    1. Se defineşte ecuaţia:

    eq = a0 +a1x + . . .+an xn == 0.

    2. Se apelează

    r = eq.roots(x, ring =CC ,multiplicities = Tr ue)

    3. print r.

    Exemplul 3.3 Să se determine rădăcinile polinomului p = x4+2x3+3x2+2x+1.

    Rezolvarea constă din:

    • import numpycoeff=[1,2,3,2,1]p=numpy.poly1d(coeff)r=numpy.roots(p)print str(r)

    [-0.50000002+0.8660254j-0.50000002-0.8660254j-0.49999998+0.8660254j-0.49999998-0.8660254j

    ]

    • p(x)=x^4+2*x^3+3*x^2+2*x+1x=solve(p(x)==0,x,to_poly_solve = True)print x

    [x == -1/2*I*sqrt(3) - 1/2, x == 1/2*I*sqrt(3) - 1/2]

    • eq=x^4+2*x^3+3*x^2+2*x+1==0r=eq.roots(x,ring=CC,multiplicities=True)print r

    [(-0.500000000000000 - 0.866025403784439*I, 2),(-0.500000000000000 + 0.866025403784439*I, 2)]

  • Capitolul 4

    Rezolvarea problemelor deinterpolare

    Cap. 3 Cap. 5

    Fie F o familie interpolatoare de ordin n pe axa reală. Dându-se nodurile(xi )1≤i≤n şi numerele (yi )1≤i≤n , dacă ϕ ∈F este funcţia de interpolare care satis-face condiţiile ϕ(xi ) = yi , 1 ≤ i ≤ n, se cere să se calculeze ϕ(z), unde z este unpunct dat.

    4.1 Interpolare polinomială

    Pentru F = Pn−1 soluţia problemei de interpolare Lagrange este polinomul

    L(Pn−1; x1, . . . , xn ; y1, . . . , yn)(z) =n∑

    i=1yi

    n∏j=1j 6=i

    z −x jxi −x j

    Codul Sage pentru calculul polinomului de interpolare Lagrange este

    points=[(x_1,y_1),. . .(x_n,y_n)]R=RR[’x’]L(x)=R.lagrange_polynomial(points)

    19

  • 20 CAPITOLUL 4. REZOLVAREA PROBLEMELOR DE INTERPOLARE

    Exemplul 4.1 Să se calculeze L(Pn ; x0, . . . , xn ; f )(z) pentru

    f (x) = x2xi = i , i ∈ {0,1, . . . ,5}z = 0.5,3.5,10

    Rezolvarea este:

    f(x)=x^2points=[]for i in range(6):

    tp=(i,f(i))points.append(tp)

    print pointsR=RR[’x’]L(x)=R.lagrange_polynomial(points)z=[0.5,3.5,10]for i in range(len(z)):

    print z[i],L(z[i])

    1.00000000000000*x^20.500000000000000 0.2500000000000003.50000000000000 12.250000000000010 100.000000000000

  • Capitolul 5

    Derivare numerică

    Cap. 4 Cap. 6

    5.1 Derivarea funcţiilor de o variabilă reală

    Sage oferă funcţia diff pentru calculul derivatei unei funcţii. Dacă f este ofuncţie Sage de variabila x atunci sintaxa de utilizare este

    • diff( f , x) defineşte o funcţia derivată.

    • diff( f , x,n) defineşte derivata de ordin n.

    Exemplul 5.1 Să se calculeze f ′(1) şi f ′′(1) pentru f (x) = x3.Rezolvarea este:

    f(x)=x^3df1(x)=diff(f,x)print df1(x)

    3*x^2print df1(1)3df2(x)=diff(f,x,2)print df2(x)6*xprint df2(1)6

    21

  • 22 CAPITOLUL 5. DERIVARE NUMERICĂ

    5.2 Cazul funcţiilor de mai multe variabile

    În cazul unei funcţii de mai multe variabile diff( f ) returnează un tablouavând drept componente funcţiile date de derivatele parţiale.

    Exemplul 5.2 Să se calculeze jacobianul şi hessianul functiei f (x, y) =(

    x2 yx3 + y

    )în (1,2).

    Jacobianul şi hessianul funcţiei f sunt

    f ′(x, y) =(

    2x y x2

    3x2 1

    )

    f ′′(x, y) =(

    2y 2x 2x 06x 0 0 0

    )Astfel rezultatele exacte sunt

    f ′(1,2) =(

    4 13 1

    )

    f ′′(1,2) =(

    4 2 2 06 0 0 0

    )Rezolvarea Sage este

    var(’y’)f(x,y)=[x^2*y,x^3+y]print diff(f)

    [(x, y) |--> 2*x*y (x, y) |--> x^2][(x, y) |--> 3*x^2 (x, y) |--> 1]

    J=diff(f)(1,2)print J

    [4 1][3 1]

    print [diff(f[0],2).transpose(),diff(f[1],2).transpose()]

    [[(x, y) |--> 2*y (x, y) |--> 2*x][(x, y) |--> 2*x (x, y) |--> 0], [(x, y) |--> 6*x (x, y) |--> 0][ (x, y) |--> 0 (x, y) |--> 0]]

    H=[diff(f[0],2)(1,2).transpose(),diff(f[1],2)(1,2).transpose()]print H

    [[4 2][2 0], [6 0][0 0]]

  • Capitolul 6

    Construirea unei funcţiide aproximare prin metodacelor mai mici pătrate

    Cap. 5 Cap. 7

    Cazul liniar. Determinarea unui polinom de aproximare construit prin metodacelor mai mici pătrate de grad m pentru datele (xi , yi )1≤i≤n (m

  • 24 CAPITOLUL 6. METODA CELOR MAI MICI PĂTRATE

    1 def lsq (n , x , y ) :2 u= l i s t ( )3 m=len ( x )4 for i in range (n+ 1 ) :5 v= l i s t ( )6 for j in range (m) :7 v . append( x [ j ] * * i )8 u . append( v )9 import numpy as np

    10 U=np . mat(u)11 A=U*U. T12 b=U*np . mat( y ) . T13 from scipy import l i n a l g14 c=np . l i n a l g . solve (A , b)15 coeff= l i s t ( )16 c l =c . t o l i s t ( )17 for i in range (n+ 1 ) :18 coeff . append( c l [ i ] [ 0 ] )19 return ( coeff )

    Exemplul 6.1 Să se calculeze polinoamele de aproximare de grad unu şi doi, con-stituite prin metoda celor mai mici pătrate, pentru datele (xi , yi )0≤i≤20 unde xi =−2+0.2i , yi = f (xi ), f (x) = |x|. Să se reprezinte grafic funcţiile astfel obţinute.

    import numpy as npt=np.linspace(-2,2,21)y=abs(t)n=1c=lsq(n,t,y)X=list()for i in range(n+1):

    X.append(x^i)P1(x)=vector(c).dot_product(vector(X))print P1(x)

    (8.513769638436575e-17)*x + 1.047619047619048

    n=2c=lsq(2,t,y)X=list()for i in range(n+1):

    X.append(x^i)P2(x)=vector(c).dot_product(vector(X))

  • 25

    print P2(x)

    0.44949329846355*x^2 + (4.524923702424678e-19)*x + 0.3883622098725076

    plot([abs(x),P1(x),P2(x)],x,-2,2)

    Graficele celor trei funcţii sunt date Fig. 6.1.

    Figure 6.1: Aproximarea funcţiei x2 prin polinom de grad 1 şi 2.

    Probleme

    1. Cazul neliniar

  • Capitolul 7

    Integrare numerică

    Cap. 6 Cap. 8

    7.1 Integrarea numerică a funcţiilorde o variabilă reală

    Calculul integralei

    I =∫ b

    af (x)dx

    unde f : [a,b] →R este o funcţie continuă se poate obţine prin

    • Utilizarea functiei integrate:

    – itemize( f (x), x) calculează o primitivă a funcţiei Sage f (x).

    – itemize( f (x), x, a,b) calculează integrala definită mai sus.

    • Utilizarea funcţiei quad, ale cărei argumente sunt:

    1. funcţia Python a cărei integrală se calculează;

    2. limitele de integrare.

    26

  • 7.2. CALCULUL NUMERIC AL INTEGRALELOR DUBLE 27

    Exemplul 7.1 Să se calculeze integralele:

    1.∫ 1

    016∗x15dx

    2.∫ π

    2

    0

    sin(x)

    xdx

    Rezolvările sunt:

    • def f(x):return 16*x**15

    import scipyfrom scipy.integrate import quadr=quad(f,0,1)print(r)

    (1.0000000000000002, 1.1102230246251569e-014)

    def g(x):return sin(x)/x

    r=quad(g,0,pi/2)print(r)

    (1.3707621681544881, 1.5218517203702133e-014)

    Primul număr reprezintă integrala, iar al doilea este o evaluare a erorii ab-solute.

    • f(x)=16*x^15print integrate(f(x),x)

    x^16

    print integrate(f(x),x,0,1)

    1

    g(x)=sin(x)/xprint integrate(g(x),x)

    -1/2*I*Ei(I*x) + 1/2*I*Ei(-I*x)

    print integrate(g(x),x,0,pi/2).n()

    1.37076216815

    7.2 Calculul numeric al integralelor duble

    Pentru domeniul D = {(x, y) : a ≤ x ≤ b, f i n f (x) ≤ y ≤ f sup(x)} integrala∫∫D

    f ct (x, y)dxdy

  • 28 CAPITOLUL 7. INTEGRARE NUMERICĂ

    este calculată de funcţia dblquad a pachetului scipy.integrate Semnificaţia parametrilorformali este:

    • funcţia f a cărei integrare se cere. Dacă descompunerea în integrale iterateeste ∫ ∫

    Df ct (x, y)dxdy =

    ∫ ba

    (∫ f sup(x)f i n f (x)

    f (x, y)dy

    )dx.

    atunci la definirea funcţiei f , ordinea argumentelor trebuie să fie y, x;

    • limitele de integrare ale lui x;

    • limitele de integrare ale lui y - identificatorii funcţiilor f i n f şi f sup.

    Exemplul 7.2 Să se calculeze∫∫

    D x ydxdy unde domeniul D este delimitat de curbeley = x2 şi y =px.

    Programul de calcul este

    def fct(y,x):return x*y

    def finf(x):return x*x

    def fsup(x):return sqrt(x)

    import scipyfrom scipy.integrate import dblquadr=dblquad(fct,0,1,finf,fsup)print(r)

    (0.083333333333333343, 9.2518585385429718e-016)

  • Capitolul 8

    Integrarea numerică a ecuaţiilordiferenţiale ordinare

    Cap. 7

    Sage permite rezolvarea ecuaţiilor diferenţiale atât numeric cât şi simbolic.Suntem preocupaţi doar de rezolvarea numerică.

    8.1 Rezolvarea problemei cu valori iniţiale

    Considerăm problema Cauchy

    ẏ(x) = f (x, y(x)) x ∈ [x0, x f ], (8.1)y(x0) = y0, (8.2)

    unde f : [x0, x f ]×Rn → Rn , despre care presupunem că admite o soluţie unicăy : [x0, x f ] → Rn .

    Sage oferă mai multe funcţii pentru rezolvarea problemei cu valori iniţiale:

    • desolve_rk4Pentru cazul unei singure ecuaţii diferenţiale. Sintaxa de utilizare:

    desol ve_r k4 (de,d var, i cs = None, i var = None,end_poi nt s = None, step = 0.1,out put =′ l i st ′)

    29

  • 30 CAPITOLUL 8. INTEGRAREA NUMERICĂ A E.D.O.

    unde

    de f (x, y) sau di f f (y, x) == f (x, y)În prealabil se declară y = f uncti on(′y ′)(x)

    d var variabila dependentă, yi cs condiţiile iniţiale [x0, y0]i var variabile adiţionale sau

    variabila curentă în cazul ecuaţiei autonomeend_poi nt x f , valoarea implicită x0 +10step pasulout put ‘list’, ‘plot’, ‘slope_field’

    • desolve_system_rk4Pentru cazul unui sistem de ecuaţii diferenţiale. Sintaxa de utilizare:

    desol ve_s y stem_r k4 (des, var s, i cs = None, i var = None,end_poi nt s = None, step = 0.1)

    unde

    des f (x, y)var s variabilele dependente, yi cs condiţiile iniţiale [x0, y0]i var variabile adiţionale sau

    variabila curentă în cazul ecuaţiei autonomeend_poi nt x f , valoarea implicită x0 +10step pasul

    • desolve_odeint Sintaxa de utilizare:

    desol ve_odei nt (des, i cs, t i mes,d var s, i var = None,compute_ j ac = F al se, ar g s = (),r tol = None,atol = None, tcr i t = None,h0 = 0.0,hmax = 0.0,hmi n = 0.0, i xpr = 0,mxstep = 0,mxhni l = 0,mxor dn = 12,mxor d s = 5, pr i ntmessg = 0)

    unde

  • 8.1. REZOLVAREA PROBLEMEI CU VALORI INIŢIALE 31

    des f (x, y)i cs condiţiile iniţiale y0t i mes punctele în care se furnisează soluţiad var yi var variabila independentăcompute_ j ac True, dacă se utilizează jacobianulr tol , atol parametri de control a precizieitcr i t puncte criticeh0 valoarea pasului iniţialhmax,hmi n limite ale pasului de integrarei xprmxstep numărul maxim de paşi la un pas

    de integrare numericămxhni l număr maxim de mesajemxor dn ordinul maxim admis pentru metodele Adamsmxor d s ordinul maxim pentru metodele stiffpr i ntmessg

    Exemplul 8.1 Să se rezolve problema Cauchy

    ẏ(x) = y(x) x ∈ [0,1]y(0) = 1

    Rezolvarea numerică este• desolve_rk4

    var(’y’)desolve_rk4(y,y,ics=[0,1],ivar=x,step=0.1,output=’plot’)

    y = function(’y’)(x)desolve_rk4(diff(y,x)==y,y,ics=[0,1],ivar=x,step=0.1,end_points=1,output=’plot’)

    • desolve_odeint

    var(’y’)times=srange(0,1,0.1)sol=desolve_odeint(y,1,times,y,ivar=x)print sol

    [[ 1. ][ 1.10517091][ 1.22140275][ 1.34985882][ 1.49182469][ 1.64872127][ 1.8221188 ][ 2.01375273][ 2.22554103][ 2.45960316]]

  • 32 CAPITOLUL 8. INTEGRAREA NUMERICĂ A E.D.O.

    Graficul se generează prin

    var(’y’)times=srange(0,1,0.1)sol=desolve_odeint(y,1,times,y,ivar=x)line(zip(times,sol))

    Graficul soluţiei numerice este dat în Fig. 8.1.

    Figure 8.1: Graficul soluţiei problemei 8.1.

    Exemplul 8.2 Să se rezolve problema Cauchy

    ẏ1 = y1 y2 y1(1) = 1 x ∈ [1,2]ẏ2 =− 1x y1 y2(1) = 1

    Soluţia problemei Cauchy este y1(x) = x, y2(x) = 1x .Rezolvarea numerică este

    • desolve_system_rk4

    var(’y1,y2’)desolve_system_rk4([y1*y2,-1/(x*y1)],[y1,y2],ics=[1,1,1],ivar=x,end_points=2)

    generează lista

  • 8.1. REZOLVAREA PROBLEMEI CU VALORI INIŢIALE 33

    [[1, 1, 1],[1.1, 1.099999062782266, 0.9090898284015374],[1.2, 1.199998197662835, 0.8333315578803533],[1.3, 1.299997350250417, 0.769228512125845],[1.4, 1.399996486112265, 0.7142830996988473],[1.5, 1.499995582224642, 0.6666637704655819],[1.6, 1.599994622378164, 0.6249968705732485],[1.7, 1.699993594592612, 0.5882319635702522],[1.8, 1.799992489603481, 0.5555520459865894],[1.9, 1.899991299944595, 0.5263121166291054],[2.0, 1.999990019374667, 0.4999961754696077]]

    Generarea graficelor soluţiilor numerice se obţine cu

    var(’y1,y2’)P=desolve_system_rk4([y1*y2,-1/(x*y1)],[y1,y2],ics=[1,1,1],ivar=x,end_points=2)Q1=[[i,j] for i,j,k in P]Q2=[[i,k] for i,j,k in P]show(list_plot(Q1,plotjoined=True,color=’red’)+list_plot(Q2,plotjoined=True,color=’blue’))

    • desolve_odeint

    var(’y1,y2’)sol=desolve_odeint([y1*y2,-1/(x*y1)],[1,1],srange(1,2,0.1),[y1,y2],ivar=x)print sol

    generează lista

    [[ 1. 1. ][ 1.10000001 0.90909097][ 1.20000001 0.8333334 ][ 1.30000002 0.76923084][ 1.40000004 0.71428578][ 1.50000005 0.66666673][ 1.60000006 0.62500006][ 1.70000008 0.58823535][ 1.80000009 0.55555561][ 1.90000011 0.52631584]]

    Generarea graficelor soluţiilor numerice se obţine cu

    var(’y1,y2’)times=srange(1,2,0.1)sol=desolve_odeint([y1*y2,-1/(x*y1)],[1,1],times,[y1,y2],ivar=x)p1=line(zip(times,sol[:,0]),color=’red’)p2=line(zip(times,sol[:,1]),color=’blue’)show(p1+p2)

    Graficele funcţiilor y1(x) şi y2(x) generate pe datele numerice rezultate sunt dateîn Fig. 8.2.

  • 34 CAPITOLUL 8. INTEGRAREA NUMERICĂ A E.D.O.

    Figure 8.2: Graficele soluţiilor din Exemplul 8.2.

    Probleme

    1. Rezolvarea problemelor bilocale

  • Bibliografie

    [1] BARD V. GREGORY, Sage for Undergraduates (online version). http://www.sagemath.org/. 1

    [2] ZIMMERMANN P., CASAMAYOU A., COHEN N., CONNAN G., DUMONTT., FOUSSE L., MALTEY F., MEULIEN M., MEZZAROBBA M., PERNET C.,THIÉRY M. N., BRAY E., CREMONA J., FORETS M., GHITZA A., THOMASH., Computational Mathematics with SageMath. http://www.sagemath.org/. 1

    35

    http://www.sagemath.org/http://www.sagemath.org/http://www.sagemath.org/http://www.sagemath.org/

    SageEntitati SageFacilitati grafice

    Algebra liniara numericaFactorizarea unei matriceRezolvarea sistemelor algebrice de ecuatii liniare

    Rezolvarea sistemelor si ecuatiilor algebriceRezolvarea sistemelor algebrice de ecuatii neliniareRezolvarea ecuatiilor algebriceRezolvarea ecuatiilor polinomiale

    Rezolvarea problemelor de interpolareInterpolare polinomiala

    Derivare numericaDerivarea functiilor de o variabila realaCazul functiilor de mai multe variabile

    Metoda celor mai mici patrateIntegrare numericaIntegrarea functiilor de o variabila realaCalculul numeric al integralelor duble

    Integrarea numerica a E.D.O.Rezolvarea problemei cu valori initiale

    Bibliografie