Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб. 7 КП МатАн.docx
Скачиваний:
4
Добавлен:
30.08.2024
Размер:
951.4 Кб
Скачать

ЛР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