Podobno kot enačb, se tudi neenačb lotimo s knjižnico Sympy. Bolj konkretno z modulom solvers.inequalities.
In [1]:
    
import sympy as sym
sym.init_printing() # lepši izpis formul
    
Za neenačbe z eno neznanko uporabimo splošno funkcijo solve_univariate_inequality, ki prepozna tip neeenačbe in uporabi primerno metodo. Ko definiramo spremenljivko x, posebej označimo, da gre za realno število.
In [10]:
    
from sympy.solvers.inequalities import solve_univariate_inequality
from sympy import Symbol
x = Symbol('x', real=True) #  x simbol, ki je realno število
neenacba = x**2 -2 >= x
solve_univariate_inequality(neenacba,x)
    
    Out[10]:
Če želimo rešitev v obliki intervalov, ukazu solve_univariate_inequality dodamo parameter relational=False.
In [11]:
    
solve_univariate_inequality(neenacba, x, relational=False) # rešitev neenačbe v obliki intervala
    
    Out[11]:
In [57]:
    
# grafična rešitev
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
t = np.linspace(-3,3) # zaporedje x-ov, v katerih bomo tabelirali funkcijo
leva_f = sym.lambdify(x,neenacba.lhs)
desna_f = sym.lambdify(x,neenacba.rhs)
plt.plot(t,leva_f(t))
plt.plot(t,desna_f(t))
plt.title("Rešitev neenačbe sta intervala, kjer je modra črta nad zeleno")
plt.plot([-3,-1],[-3.9,-3.9],'ro-')
plt.plot([2,3],[-3.9,-3.9],'ro-')
plt.show()
    
    
In [50]:
    
nen2 = abs(x**2 -2) >= x
solve_univariate_inequality(nen2, x, relational=False)
    
    Out[50]:
In [78]:
    
# grafična rešitev
leva_f = sym.lambdify(x,nen2.lhs)
t = np.linspace(-3,3) # zaporedje x-ov, v katerih bomo tabelirali funkcijo
plt.plot(t,[leva_f(ti) for ti in t])
plt.plot(t,sym.lambdify(x,nen2.rhs)(t))
plt.title("Rešitev neenačbe sta intervala, kjer je modra črta nad zeleno")
plt.plot([-3,1],[-3.9,-3.9],'-or')
plt.plot([2,3],[-3.9,-3.9],'-or')
plt.show()
    
    
In [54]:
    
# Prav tako ni težav, če je več absolutnih vrednosti
solve_univariate_inequality(abs(x-1) <= 2*abs(x)-2, x, relational=False)
    
    Out[54]:
In [56]:
    
# težave se pojavijo, če so absolutne vrednosti gnezdene
solve_univariate_inequality(abs(x-1) <= abs(2*abs(x)-2), x, relational=False)
    
    
In [68]:
    
nen3 = sym.cos(x)<=1/2
nen3
    
    Out[68]:
In [69]:
    
solve_univariate_inequality(nen3,x,relational=False)
    
    Out[69]:
Rešitev smo dobili v obliki decimalnih števil. Če želimo rešitev v obliki ulomkov, lahko uporabimo sympy.S ali sympy.Rational.
In [70]:
    
from sympy import S
nen3 = sym.cos(x)<= S(1)/2
nen3
    
    Out[70]:
In [71]:
    
solve_univariate_inequality(nen3,x,relational=False)
    
    Out[71]:
In [76]:
    
# grafična rešitev
t = np.linspace(0,7)
leva_f = sym.lambdify(x,nen3.lhs)
desna_f = sym.lambdify(x,nen3.rhs)
plt.plot(t,[leva_f(ti) for ti in t])
plt.plot(t,[desna_f(ti) for ti in t])
plt.title("Rešitev neenačbe je interval, kjer je modra črta pod zeleno")
plt.show()
    
    
In [1]:
    
import disqus
%reload_ext disqus
%disqus matpy