In [1]:
from sympy import *
init_printing()
In [2]:
x = Symbol('x')
a = Symbol('a')
In [3]:
I1 = Integral(x*exp(-a*x), (x,0,oo))
I1
Out[3]:
In [4]:
I1.doit()
Out[4]:
Annahmen über die Variablen
In [5]:
a = Symbol('a', positive=True)
In [6]:
sqrt(a**2)
Out[6]:
In [7]:
I1.doit()
Out[7]:
Das $a$ in I1 wurde nicht verändert.
In [8]:
I2 = Integral(x*exp(-a*x), (x,0,oo)) # neues I1
I2.doit()
Out[8]:
In [9]:
a._assumptions
Out[9]:
In [10]:
n = Symbol('n', integer=True)
cos(pi*n)
Out[10]:
In [11]:
n = Symbol('n')
j = Symbol('j')
q = Symbol('q')
In [12]:
S1 = Sum(j, (j,1,n)) # Sum gibt es nur als trägen Operator
S1
Out[12]:
In [13]:
S1.doit().factor()
Out[13]:
In [14]:
S2 = Sum(1/j**2, (j, 1, oo))
S2
Out[14]:
In [15]:
S2.doit()
Out[15]:
In [16]:
S3 = Sum(q**j, (j, 0, oo))
S3
Out[16]:
In [17]:
S3.doit()
Out[17]:
Da kommen wir nur mit einem häßlichen Hack dran:
In [18]:
S3.doit().args
Out[18]:
In [19]:
S3.doit().args[0]
Out[19]:
In [20]:
S3.doit().args[0][0]
Out[20]:
In [21]:
x = Symbol('x')
y = Symbol('y')
z = x+I*y
z
Out[21]:
In [22]:
w = z**4
w
Out[22]:
In [23]:
re(w).expand()
Out[23]:
In [24]:
x = Symbol('x', real=True)
y = Symbol('y', real=True)
z = x+I*y
z
Out[24]:
In [25]:
w = z**4
re(w)
Out[25]:
In [26]:
im(w)
Out[26]:
auch "universal functions" genannt
In [27]:
import numpy as np
In [28]:
xn = np.linspace(0, 1, 4)
xn
Out[28]:
In [29]:
#sin(pi*xn) # mislingt
np.sin(np.pi*xn)
Out[29]:
In [30]:
f = exp(-x/2) * sin(pi*x)
f
Out[30]:
In [31]:
fn = lambdify(x, f, 'numpy')
fn
Out[31]:
In [32]:
f.subs(x, .5), fn(.5)
Out[32]:
In [33]:
fn(xn)
Out[33]:
In [34]:
plot(f, (x, -pi, pi));
In [35]:
f = sin(pi*x)
g = cos(pi*x)
p1 = plot(f, (x, -2, 2), show=False)
p2 = plot(g, (x, -2, 2), show=False)
p1.extend(p2)
p1[1].line_color = 'green'
p1.legend = True
p1.show()
In [36]:
import matplotlib.pyplot as plt
interaktiv:
In [37]:
#%matplotlib notebook
für den Druck
In [38]:
%matplotlib inline
In [39]:
fn = lambdify(x, f, 'numpy')
gn = lambdify(x, g, 'numpy')
xn = np.linspace(-2, 2, 300)
plt.plot(xn, fn(xn), label='sin')
plt.plot(xn, gn(xn), label='cos')
plt.legend();
In [40]:
xn = np.linspace(-3, 3, 300)
h = exp(-x)/x
hn = lambdify(x, h, 'numpy')
plt.figure() # schreibt sonst in den bereits geöffneten Plot,
# wenn dieser noch nicht abgeschlossen ist
plt.plot(xn, hn(xn));
unbrauchbar
In [41]:
xp = np.linspace(.0001, 3, 150)
xm = -xp
plt.figure()
plt.plot(xp, hn(xp))
plt.plot(xm, hn(xm), 'b') # mögliche Werte rgbcmykw
plt.axis(ymin=-10, ymax=10)
plt.title(str(h));
etwas eleganter
In [42]:
xn = np.linspace(-3, 3, 300)
plt.figure()
yn = hn(xn)
yn[abs(yn)>10] = np.nan
plt.plot(xn, yn)
plt.title(str(h));
In [43]:
xn = np.linspace(-.3, .3, 15)
yn = hn(xn)
In [44]:
yn
Out[44]:
In [45]:
abs(yn) > 10
Out[45]:
In [46]:
yn[abs(yn) > 10] = np.nan
yn
Out[46]:
np.nan wird von den plot-Routinen ignoriert
In [47]:
from sympy.plotting import plot3d
In [48]:
x = Symbol('x')
y = Symbol('y')
f = cos(sqrt(x**2+y**2))
f
Out[48]:
In [49]:
plot3d(f, (x, -3*pi, 3*pi), (y, -3*pi, 3*pi));
In [ ]: