from __future__ import division
from sympy import *
x, y, z, t = symbols('x y z t')
k, m, n = symbols('k m n', integer=True)
f, g, h = symbols('f g h', cls=Function)

print
print
print
print 'polinomi'
print 80 * '-'
print

print
print 'p1 = x**2 + 2 * x + 1'
p1 = x**2 + 2 * x + 1
print p1
pprint(p1)
raw_input('more . . .')

print
print 'p2 = x + 1'
p2 = x + 1
pprint(p2)
raw_input('more . . .')

print
print 'p3 = x**2 - 4'
p3 = x**2 - 4
pprint(p3)
raw_input('more . . .')

print
print 'p123 = p1 * p2 * p3'
p123 = p1 * p2 * p3
pprint(p123)
raw_input('more . . .')

print
print 'p123.expand()'
pprint(p123.expand())
raw_input('more . . .')



print
print
print
print 'expand i apart'
print 80 * '-'
print

print
print 'r12 = p1 / p2'
r12 = p1 / p2
pprint(r12)
raw_input('more . . .')

print
print 'ra = r12.expand()'
ra = r12.expand()
pprint(ra)
raw_input('more . . .')

print
print 'rb = r12.apart()'
rb = r12.apart()
pprint(rb)
raw_input('more . . .')

print
print 'rc = apart(r12, x)'
rc = apart(r12, x)
pprint(rc)
raw_input('more . . .')

print
print 'f = 1 / (x**2 * (x + 1))'
f = 1 / (x**2 * (x + 1))
pprint(f)
raw_input('more . . .')

print
print 'f = apart(f, x)'
f = apart(f, x)
pprint(f)
raw_input('more . . .')

print
print 'f = together(f, x)'
f = together(f, x)
pprint(f)
raw_input('more . . .')

print
print 'f = f.expand()'
f = f.expand()
pprint(f)
raw_input('more . . .')

print
print 'f = f.factor()'
f = f.factor()
pprint(f)
raw_input('more . . .')

print
print 'f = f.subs(x, 3)'
f = f.subs(x, 3)
pprint(f)
raw_input('more . . .')



print
print
print
print 'razlomci'
print 80 * '-'
print

print
print '1 / 3'
pprint(1 / 3)
raw_input('more . . .')

print
print 'Rational(1, 3)'
pprint(Rational(1, 3))
raw_input('more . . .')

print
print "S('1/3')"
pprint(S('1/3'))
raw_input('more . . .')

print
print "S('1 / 2')"
pprint(S('1 / 2'))
raw_input('more . . .')

print
print "S('1/2') - S('1/3')"
pprint(S('1/2') - S('1/3'))
raw_input('more . . .')



print
print
print
print 'konstante i izracunavanje'
print 80 * '-'
print

print
print 'p2 = pi**2'
print 'p2'
p2 = pi**2
pprint(p2)
raw_input('more . . .')

print
print '(p2).evalf()'
pprint((pi**2).evalf())
raw_input('more . . .')

print
print '(p2).evalf(100)'
pprint((p2).evalf(100))
raw_input('more . . .')

print
print '(p2).n()'
pprint((p2).n())
raw_input('more . . .')

print
print '(p2).n(200)'
pprint((p2).n(200))
raw_input('more . . .')

print
print 'N(p2)'
pprint(N(p2))
raw_input('more . . .')

print
print 'N(p2, 300)'
pprint(N(p2, 300))
raw_input('more . . .')

print
print 'exp(1)'
pprint(exp(1))
raw_input('more . . .')

print
print 'E'
pprint(E)
raw_input('more . . .')

print
print 'E.evalf()'
pprint(E.evalf())
raw_input('more . . .')

print
print 'I**2'
pprint(I**2)
raw_input('more . . .')

print
print 'exp(I * pi) + 1'
pprint(exp(I * pi) + 1)
raw_input('more . . .')

print
print 'E**(I * pi) + 1'
pprint(E**(I * pi) + 1)
raw_input('more . . .')



print
print
print
print 'Ramanujan'
print 80 * '-'
print

print
print 'r = E**(pi * sqrt(163))'
print 'r'
r = E**(pi * sqrt(163))
r
pprint(r)
raw_input('more . . .')

print
print 'r.n(20)'
pprint(r.n(20))
raw_input('more . . .')

print
print 'r.n(21)'
pprint(r.n(21))
raw_input('more . . .')

print
print 'r.n(22)'
pprint(r.n(22))
raw_input('more . . .')

print
print 'r.n(23)'
pprint(r.n(23))
raw_input('more . . .')

print
print 'r.n(24)'
pprint(r.n(24))
raw_input('more . . .')

print
print 'r.n(25)'
pprint(r.n(25))
raw_input('more . . .')

print
print 'r.n(28)'
pprint(r.n(28))
raw_input('more . . .')

print
print 'r.n(30)'
pprint(r.n(30))
raw_input('more . . .')

print
print 'r.n(35)'
pprint(r.n(35))
raw_input('more . . .')

print
print 'r.n(500)'
pprint(r.n(500))
raw_input('more . . .')



print
print
print
print 'realni brojevi'
print 80 * '-'
print

print
print 'exp(I * x).expand(complex = True)'
pprint(exp(I * x).expand(complex = True))
raw_input('more . . .')

print
print "Symbol('xr', real = True)"
xr = Symbol('xr', real = True)
pprint(xr)
raw_input('more . . .')

print
print 'exp(I * xr).expand(complex = True)'
pprint(exp(I * xr).expand(complex = True))
raw_input('more . . .')



print
print
print
print 'linearna algebra'
print 80 * '-'
print

print
print 'e1 = 2 * x + y - 4'
e1 = 2 * x + y - 4
pprint(e1)
raw_input('more . . .')

print
print 'e2 = x - y + 1'
e2 = x - y + 1
pprint(e2)
raw_input('more . . .')

print
print 'solve((e1, e2), (x, y))'
pprint(e1)
pprint(e2)
pprint(solve((e1, e2), (x, y)))
raw_input('more . . .')

print
print 'e3 = x - y + 4'
e3 = x - y + 4
pprint(e3)

print 'solve((e2, e3), (x, y))'
pprint(e2)
pprint(e3)
pprint(solve((e2, e3), (x, y)))
raw_input('more . . .')

print
print 'e4 = 3 * x - 3 * y + 12'
e4 = 3 * x - 3 * y + 12
pprint(e4)

print
print 'solve((e3, e4), (x, y))'
pprint(e3)
pprint(e4)
pprint(solve((e3, e4), (x, y)))
raw_input('more . . .')



print
print
print
print 'linearna algebra, opet isto'
print 80 * '-'
print

print
print 'e1 = Eq(2 * x + y, 4)'
e1 = Eq(2 * x + y, 4)
pprint(e1)
raw_input('more . . .')

print
print 'e2 = Eq(x - y, -1)'
e2 = Eq(x - y, -1)
pprint(e2)
raw_input('more . . .')

print
print 'solve((e1, e2), (x, y))'
pprint(e1)
pprint(e2)
pprint(solve((e1, e2), (x, y)))
raw_input('more . . .')

print
print 'e3 = Eq(x - y, -4)'
e3 = Eq(x - y, -4)
pprint(e3)
raw_input('more . . .')

print
print 'solve((e2, e3), (x, y))'
pprint(e2)
pprint(e3)
pprint(solve((e2, e3), (x, y)))
raw_input('more . . .')

print
print 'e4 = Eq(3 * x - 3 * y, -12)'
e4 = Eq(3 * x - 3 * y, -12)
pprint(e4)
raw_input('more . . .')

print
print 'solve((e3, e4), (x, y))'
pprint(e3)
pprint(e4)
pprint(solve((e3, e4), (x, y)))
raw_input('more . . .')



print
print
print
print 'matrice, samo osnovno'
print 80 * '-'
print

print
print 'A = Matrix([[x, 1], [1, y]])'
A = Matrix([[x, 1], [1, y]])
print A
pprint(A)
raw_input('more . . .')

print
print 'A**2'
pprint(A**2)
raw_input('more . . .')

print
print 'A**(-1)'
pprint(A**(-1))
raw_input('more . . .')

print
print 'B = A.inv()'
B = A.inv()
pprint(B)
raw_input('more . . .')

print
print 'B - A**(-1)'
pprint(B - A**(-1))
raw_input('more . . .')

print
print 'A * B'
pprint(A * B)
raw_input('more . . .')

print
print 'simplify((A * B))'
pprint(simplify(A*B))
raw_input('more . . .')



print
print
print
print 'ne bas linearna algebra'
print 80 * '-'
print

print
print 'solve(p1, x)'
pprint(p1)
pprint(solve(p1, x))
raw_input('more . . .')

print
print 'solve(p2, x)'
pprint(p2)
pprint(solve(p2, x))
raw_input('more . . .')

print
print 'solve(p3, x)'
pprint(p3)
pprint(solve(p3, x))
raw_input('more . . .')

print
print 'solve(x**4 - 1, x)'
pprint(x**4 - 1)
pprint(solve(x**4 - 1, x))
raw_input('more . . .')

print
print 'solve(Eq(x**4, 1), x)'
pprint(Eq(x**4, 1))
pprint(solve(Eq(x**4, 1), x))
raw_input('more . . .')



print
print
print
print 'limesi'
print 80 * '-'
print

print
print 'f = sin(14 * x) / x'
f = sin(14 * x) / x
pprint(f)
raw_input('more . . .')

print 
print 'g = 1 / x'
g = 1 / x
pprint(g)
raw_input('more . . .')

print
print 'limit(f, x, 0)'
pprint(limit(f, x, 0))
raw_input('more . . .')

print
print 'limit(g, x, 0)'
pprint(limit(g, x, 0))
raw_input('more . . .')

print
print "limit(g, x, 0, dir = '+')"
pprint(limit(g, x, 0, dir = '+'))
raw_input('more . . .')

print
print "limit(g, x, 0, dir = '-')"
pprint(limit(g, x, 0, dir = '-'))
raw_input('more . . .')



print
print
print
print 'izvodi'
print 80 * '-'
print

print
print 'p1'
pprint(p1)
raw_input('more . . .')

print
print 'diff(p1, x)'
pprint(diff(p1, x))
raw_input('more . . .')

print
print 'diff(p1, x, 2)'
pprint(diff(p1, x, 2))
raw_input('more . . .')

print
print 'diff(p1 * p2 * p3, x)'
pprint(diff(p1 * p2 * p3, x))
raw_input('more . . .')

print
print 'diff(p1 * p2 * p3, x).expand()'
pprint(diff(p1 * p2 * p3, x).expand())
raw_input('more . . .')

print
print 'diff(p1 * p2 * p3, x, 14)'
pprint(diff(p1 * p2 * p3, x, 14))
raw_input('more . . .')

print
print 'diff(p1 * exp(3 * x), x)'
pprint(diff(p1 * exp(3 * x), x))
raw_input('more . . .')

print
print 'diff(p1 * exp(3 * x), x).expand()'
pprint(diff(p1 * exp(3 * x), x).expand())
raw_input('more . . .')



print
print
print
print 'integrali'
print 80 * '-'
print

print
print 'p1'
pprint(p1)
raw_input('more . . .')

print
print 'integrate(p1, x)'
pprint(integrate(p1, x))
raw_input('more . . .')

print
print 'integrate(p1, (x, 1, 2))'
pprint(integrate(p1, (x, 1, 2)))
raw_input('more . . .')

print
print 'integrate(cos(x), x)'
pprint(integrate(cos(x), x))
raw_input('more . . .')

print
print 'integrate(sin(x), (x, 0, pi))'
pprint(integrate(sin(x), (x, 0, pi)))
raw_input('more . . .')



print
print
print
print 'Taylor'
print 80 * '-'
print

print
print 'sin(x).series(x, 0, 10)'
pprint(sin(x).series(x, 0, 10))
raw_input('more . . .')

print
print 'series(sin(x), x, 0, 10)'
pprint(series(sin(x), x, 0, 10))
raw_input('more . . .')

print
print 'series(sin(x), x, 1, 10)'
pprint(series(sin(x), x, 1, 10))
raw_input('more . . .')

print
print 'series(exp(x), x, 0, 5)'
pprint(series(exp(x), x, 0, 5))
raw_input('more . . .')

print
print 'series(exp(x), x, 5, 5)'
pprint(series(exp(x), x, 5, 5))
raw_input('more . . .')

del f
f = Function('f')



print
print
print
print 'diferencijalne jednacine'
print 80 * '-'
print

print
print 'deq1 = f(t).diff(t, 2) + 4 * f(t)'
deq1 = f(t).diff(t, 2) + 4 * f(t)
pprint(deq1)
raw_input('more . . .')

print
print 'dsolve(deq1, f(t))'
pprint(dsolve(deq1, f(t)))
raw_input('more . . .')

print
print 'f(t).diff(t, 2) + 4 * f(t) - 24 * cos(4 * t)'
deq2 = f(t).diff(t, 2) + 4 * f(t) - 24 * cos(4 * t)
pprint(deq2)
raw_input('more . . .')

print
print 'dsolve(deq2, f(t))'
pprint(dsolve(deq2, f(t)))
raw_input('more . . .')

print
print 'f(x).diff(x, 2) - 4 * f(x)'
deq3 = f(x).diff(x, 2) - 4 * f(x)
pprint(deq3)
raw_input('more . . .')

print
print 'dsolve(deq3, f(x))'
pprint(dsolve(deq3, f(x)))
raw_input('more . . .')

print
print 'deq4 = Eq(f(x).diff(x, 2) - 4 * f(x), - 4 * exp(- 2 * x))'
deq4 = Eq(f(x).diff(x, 2) - 4 * f(x), - 4 * exp(- 2 * x))
pprint(deq4)
raw_input('more . . .')

print
print ''
pprint(dsolve(deq4, f(x)))
raw_input('more . . .')



print
print
print
print 'diferencijalne jednacine, provera'
print 80 * '-'
print

print
print 'deq = Eq(f(t).diff(t, 2) - 4 * f(t), - 4 * exp(-2*t))'
print 'deq'
deq = Eq(f(t).diff(t, 2) - 4 * f(t), - 4 * exp(-2*t))
pprint(deq)
raw_input('more . . .')

print
print 'deq.lhs'
pprint(deq.lhs)
raw_input('more . . .')

print
print 'deq.rhs'
pprint(deq.rhs)
raw_input('more . . .')

print
print 'sol = dsolve(deq, f(t))'
print 'sol'
sol = dsolve(deq, f(t))
pprint(sol)
raw_input('more . . .')

print
print 'sol.lhs'
pprint(sol.lhs)
raw_input('more . . .')

print
print 'sol.rhs'
pprint(sol.rhs)
raw_input('more . . .')

print
print 's = sol.rhs'
print 's'
s = sol.rhs
pprint(s)
raw_input('more . . .')

pprint
print 'ver = deq.subs(f(t), s)'
print 'ver'
ver = deq.subs(f(t), s)
pprint(ver)
raw_input('more . . .')

print
print 'ver = ver.doit()'
print 'ver'
ver = ver.doit()
pprint(ver)
raw_input('more . . .')

print
print 'ver.lhs.expand()'
pprint(ver.lhs.expand())
raw_input('more . . .')

print
print 'ver.rhs'
pprint(ver.rhs)
raw_input('more . . .')

print
print 'ver.expand()'
pprint(ver.expand())
raw_input('more . . .')



print
print
print
print 'T H E   E N D'
print
print
print

