In [43]:
import sympy
import numpy
from sympy import Eq, solve
from matplotlib import pyplot
from sympy.mpmath import quad
from math import log
%matplotlib notebook
def sample_function(f, start, end, step):
xs = numpy.linspace(start=start, stop=end, num=(end-start)/step)
ys = [f(x) for x in xs]
return xs, ys
sympy.init_printing()
Poišči največjo in najmanjšo vrednost, ki jo zavzame funkcija $$f(x) = x^4 + 2x^3 - 2x^2 + 1.$$
In [30]:
f = lambda x: x**4 + 2*x**3 - 2*x**2 + 1
x = sympy.Symbol('x', real=True)
Kandadati za ekstreme so stacionarne točke in krajišči našega intervala. Stacionarne točke poiščemo z rešitvijo enačbe $f'(x)=0$.
In [31]:
eq = Eq(f(x).diff(), 0)
eq
Out[31]:
In [32]:
critical_points = sympy.solve(eq)
critical_points
Out[32]:
In [33]:
end_points = [-3, 1]
points = [(y, f(y)) for y in critical_points + end_points]
points
Out[33]:
In [34]:
min(points, key=lambda point: point[1]), max(points, key=lambda point: point[1])
Out[34]:
Določi tudi intervale naraščanja in padanja.
Funkcija narasca kjer je prvi odvod vecji od nic.
In [35]:
sympy.solvers.reduce_inequalities([f(x).diff(x) > 0])
Out[35]:
Funkcija pada, kjer je prvi odvod manjsi od nic.
In [36]:
sympy.solvers.reduce_inequalities([f(x).diff(x) < 0])
Out[36]:
Odpira se kavna hisa kava. Lastniki hise zelijo mesanico kave prodajati v licnih plocevinastih skatlicah, ki imajo obliko tristrane prizme s prostornino 1. Osnovna ploskev je enakostranicni trikotnik s stranico $a$, visina prizme je $b$. Pomagaj jim poiskati optimalno velikost skatlice: koliksna naj bosta $a$ in $b$, da bodo za izdelavo porabili cim manj plocevine?
In [37]:
a = sympy.Symbol('a', real=True, positive=True)
b = sympy.Symbol('b', real=True, positive=True)
v = lambda a, b: a**2*b*sympy.sqrt(3)/2
p = lambda a, b: a**2*sympy.sqrt(3) + 3*a*b
b = solve(Eq(v(a,b), 1), b)[0]
b
Out[37]:
Izrazavo za $b$ vstavimo v enacbo za povrsino, jo odvajamo in poiscemo resitev enacbe $p'(a) = 0.$
In [38]:
val_a = sympy.solve(p(a, b).diff())[0]
val_b = b.subs(a, val_a)
val_a, val_b
Out[38]:
Izracunaj nedolocena integrala $$\int \frac{(1+\log(x))^2}{x}dx$$ in $$ \int (x^2 -2)e^xdx .$$
In [39]:
x = sympy.Symbol('x')
f = lambda x: (1+sympy.log(x))**2/x
g = lambda x: (x**2 - 2)*sympy.exp(x)
sympy.integrate(f(x))
Out[39]:
In [40]:
sympy.integrate(g(x))
Out[40]:
In [41]:
pyplot.ylim([-1, 5])
pyplot.xlim([-1, 5])
x = numpy.linspace(0, 2, 100)
pyplot.plot([-1, 5], [0, 6], color='g')
[xs, ys] = sample_function(lambda x: 2.0/x + 2, 0.01, 5, 0.01)
pyplot.plot(xs, ys, color='r')
pyplot.axvline(0, color='y')
pyplot.show()
Presečišča na zgornji sliki se nahajajo pri $x_1=1$ in $x_2=2$.
Ploščina lika je enaka $ \log(4) - 0.5 $. Najlažje jo izračunamo tako, da lik razdelimo na dva dela glede na $x$-koordinato: na del med $0$ in $1$ in na del med $1$ in $2$.
Funkcija $F$ ima predpis $$F(x) = \int_{-1}^x \frac{\log(1+t^2)}{t}dt.$$ Poisci odvod funckcije $F$.
Njen odvod je kar enak funkciji pod integralom.
In [42]:
x = sympy.Symbol('x', real=True)
f = lambda x: sympy.log(1+x**2)/x
F = lambda x: sympy.integrate(f(t), (t, -1, x))
f(x)
Out[42]:
Skiciraj graf odvoda $F'$ nato pa na isto sliko se graf $F$.
Z rdečo je narisan odvod, z zeleno pa graf funkcije $F$.
In [141]:
%matplotlib inline
from math import log
pylab.rcParams['figure.figsize'] = (10.0, 8.0)
pylab.ylim([-1, 3])
pylab.xlim([-4, 4])
[xs, ys] = sample_function(f, -5, 5, 0.1)
pyplot.plot(xs, ys, color='r')
[xs, ys] = sample_function(lambda x: F(x), -5, 5, 0.2)
pyplot.plot(xs, ys, color='g')
pyplot.show()