
ЛР7
import numpy as np import sympy as sp from numpy import * from sympy import * import matplotlib.pyplot as plt
Пример 1
import sympy as sp x, y = sp.symbols('x y') z = x**3 + y**2 print('dzdx:') sp.pprint(sp.diff(z, x)) print('\ndzdy:') sp.pprint(sp.diff(z, y)) print('\nd2zdx2:') sp.pprint(sp.diff(z, x, 2)) print('\nd2zdxdy:') sp.pprint(sp.diff(sp.diff(z, x), y))
dzdx: 2 3⋅x dzdy: 2⋅y d2zdx2: 6⋅x d2zdxdy: 0
Упражнение 1
x, y = sp.symbols('x y') z = cos(3*x+y**2) print('dzdx:') print(sp.diff(z, x)) print('\ndzdy:') print(sp.diff(z, y)) print('\nd2zdx2:') print(sp.diff(z, x, 2)) print('\nd2zdy2:') print(sp.diff(z, y, 2)) print('\nd2zdxdy:') print(sp.diff(sp.diff(z, x), y))
dzdx: -3*sin(3*x + y**2) dzdy: -2*y*sin(3*x + y**2) d2zdx2: -9*cos(3*x + y**2) d2zdy2: -2*(2*y**2*cos(3*x + y**2) + sin(3*x + y**2)) d2zdxdy: -6*y*cos(3*x + y**2)
x, y, z = sp.symbols('x y z') i, j, k = sp.symbols('i j k') f = 2*y*x**3+x-z dx=diff(f,x)*i dy=diff(f,y)*j dz=diff(f,z)*k dxsubs=dx.subs(x,1) dxsubs=dxsubs.subs(y,2) dxsubs=dxsubs.subs(z,-3) dysubs=dy.subs(x,1) dysubs=dysubs.subs(y,2) dysubs=dysubs.subs(z,-3) dzsubs=dz.subs(x,1) dzsubs=dzsubs.subs(y,2) dzsubs=dzsubs.subs(z,-3) grad=dxsubs+dysubs+dzsubs print(grad)
13*i + 2*j - k
Пример 2
r, t = sp.symbols('r t') # формулы перехода от декартовой системы координат к полярной x = r * sp.cos(t) y = r * sp.sin(t) # вектор функций перехода для составления матрицы A = sp.Matrix([[x, y]]) sp.pprint(A)
[r⋅cos(t) r⋅sin(t)]
# матрица производных (транспонирована для более удобного составления) B = sp.Matrix([[sp.diff(A,r)], [sp.diff(A,t)]]) sp.pprint(B.T)
⎡cos(t) -r⋅sin(t)⎤ ⎢ ⎥ ⎣sin(t) r⋅cos(t) ⎦
# вычисление якобиана sp.pprint(B.det()) sp.pprint(sp.simplify(B.det())) # упрощение выражения с помощью simplify
2 2 r⋅sin (t) + r⋅cos (t) r
Упражнение 2
r, t, z = sp.symbols('r t z') # формулы перехода от декартовой системы координат к полярной x = r * sp.cos(t) y = r * sp.sin(t) zz= z # вектор функций перехода для составления матрицы A = sp.Matrix([[x, y, zz]]) sp.pprint(A)
[r⋅cos(t) r⋅sin(t) z]
B = sp.Matrix([[sp.diff(A,r)], [sp.diff(A,t)] , [sp.diff(A,z)]]) sp.pprint(B.T)
⎡cos(t) -r⋅sin(t) 0⎤ ⎢ ⎥ ⎢sin(t) r⋅cos(t) 0⎥ ⎢ ⎥ ⎣ 0 0 1⎦
# вычисление якобиана sp.pprint(B.det()) sp.pprint(sp.simplify(B.det())) # упрощение выражения с помощью simplify
2 2 r⋅sin (t) + r⋅cos (t) r
Упражнение 3
x, y = sp.symbols('x y') z = x*y**2+2*y-x**2 dx=diff(z,x)*0.1 dy=diff(z,y)*(-0.2) dxsubs=dx.subs(x,2) dxsubs=dxsubs.subs(y,-1) dysubs=dy.subs(x,2) dysubs=dysubs.subs(y,-1) dz=dxsubs+dysubs print(dz)
0.100000000000000
def firstdif(f, x, y, delx, dely ,x0, y0): dx=diff(f,x)*delx dy=diff(f,y)*dely dxsubs=dx.subs(x,x0) dxsubs=dxsubs.subs(y,y0) dysubs=dy.subs(x,x0) dysubs=dysubs.subs(y,y0) dz=dxsubs+dysubs return dz x, y = sp.symbols('x y') f = x*y**2+2*y-x**2 delx=0.1 dely=-0.2 x0=2 y0=-1 firstdif(f, x, y, delx, dely, x0, y0)
0.100000000000000