import sympy as sm
sm.init_printing()
a, b, th, gamma, x, t, y, z = sm.symbols('a, b, theta, gamma, x, t, y, z')
%whos
a, b, th, gamma, x, t, y, z
f = sm.Function('f')
f(t)
f(x, y, z)
a1, a2, a3 = sm.symbols('a1, a2, a3')
a1, a2, a3
expr1 = a + b - x
expr1
expr2 = f(t) + 2*f(x, y, z) + a/b
expr2
expr3 = sm.sin(f(t)) - sm.tan(a/b)/sm.log(gamma)
expr3
print(expr3)
repr(expr3)
sm.srepr(expr1)
sm.pprint(expr3)
print(sm.latex(expr3))
sm.ccode(expr1)
print(sm.octave_code(expr3))
expr3
sm.diff(expr3, a)
part1 = sm.diff(expr3, a)
part2 = sm.diff(part1, b)
part2
expr3.diff(a)
expr3.diff(t)
expr3.diff(t, 2)
expr3.diff(t).diff(t)
expr1
repl = {a: 5, b: -38, x: 102}
repl
expr1.subs(repl)
expr1.xreplace(repl)
type(expr1.subs(repl))
type(-135)
type(int(expr1.subs(repl)))
expr4 = sm.pi/4 + sm.sin(x*y)
expr4
expr4.xreplace({x: 12, y: 24})
expr4.evalf()
expr4.evalf(subs={x: 12, y:24})
type(expr4.evalf(subs={x: 12, y:24}))
type(float(expr4.evalf(subs={x: 12, y:24})))
expr4.evalf(subs={x: 12, y:24}, n=1000)
expr1
eval_expr1 = sm.lambdify((a, b, x), expr1)
eval_expr1(12.0, 34.3, -2.0)
type(eval_expr1(12.0, 34.3, -2.0))
mat1 = sm.Matrix([[1, 2], [3, 4]])
mat1
mat1.shape
mat1.det()
mat2 = sm.Matrix([[expr1, expr2], [expr3, expr4]])
mat2
mat2.diff(t)
mat1 + mat2
mat1 * mat2
sm.hadamard_product(mat1, mat2)
mat1**2
mat1 * mat1
sm.eye(5)
sm.zeros(2,4)
lin_expr_1 = a*x + b**2*y + sm.sin(gamma)*z
lin_expr_1
lin_expr_2 = sm.sin(f(t))*x + sm.log(f(t))*z
lin_expr_2
sm.Eq(lin_expr_1, 0)
sm.Eq(lin_expr_2, 0)
res = sm.solve([lin_expr_1, lin_expr_2], x, z, dict=True)
res
res_dict = res[0]
res_dict
sm.Eq(x, res_dict[x])
lin_mat_exprs = sm.Matrix([lin_expr_1, lin_expr_2])
lin_mat_exprs
A = lin_mat_exprs.jacobian([x, z])
A
b = -lin_mat_exprs.xreplace({x: 0, z: 0})
b
A.LUsolve(b)
sm.simplify(A.LUsolve(b))
sm.cos(gamma)**2 + sm.sin(gamma)**2
sm.trigsimp(sm.cos(gamma)**2 + sm.sin(gamma)**2)
sub_exprs, simp_expr = sm.cse(A.LUsolve(b).diff(t))
simp_expr
sub_exprs