Computergestützte Mathematik zur Analysis¶

Vorlesung vom 03.11.2022

© 2022 Prof. Dr. Rüdiger W. Braun

In [1]:
from sympy import *
x = S('x')
n = S('n')

Ableitungen¶

In [2]:
f = x**n
In [3]:
f.diff(x)
Out[3]:
$\displaystyle \frac{n x^{n}}{x}$
In [4]:
f.diff(x).powsimp()
Out[4]:
$\displaystyle n x^{n - 1}$
In [5]:
f.diff(x,x,x)
Out[5]:
$\displaystyle \frac{n x^{n} \left(n^{2} - 3 n + 2\right)}{x^{3}}$
In [6]:
f.diff(x,x,x).powsimp().factor()
Out[6]:
$\displaystyle n x^{n - 3} \left(n - 2\right) \left(n - 1\right)$
In [7]:
f.diff(x,7).powsimp().factor()
Out[7]:
$\displaystyle n x^{n - 7} \left(n - 6\right) \left(n - 5\right) \left(n - 4\right) \left(n - 3\right) \left(n - 2\right) \left(n - 1\right)$
In [8]:
f.diff(x,0)
Out[8]:
$\displaystyle x^{n}$
In [11]:
#f.diff()   # Fehler:  ValueError
In [12]:
g = sin(x**2)*cos(x**2)
g.diff().trigsimp()
Out[12]:
$\displaystyle - 4 x \sin^{2}{\left(x^{2} \right)} + 2 x$

Unterschied:

  • bei $f$ ist nicht klar, ob nach $x$ oder nach $n$ differenziert werden soll
  • bei $g$ gibt es nur eine Veränderliche

Beispiel: Grenzwert mit Regel von l'Hôpital¶

In [13]:
a = (cos(pi*x))/(2*x-1)
a
Out[13]:
$\displaystyle \frac{\cos{\left(\pi x \right)}}{2 x - 1}$
In [14]:
n = numer(a)   # numer ist keine Methode
d = denom(a)
In [15]:
n.diff(x)
Out[15]:
$\displaystyle - \pi \sin{\left(\pi x \right)}$
In [16]:
n1 = n.diff(x).subs(x, Rational(1,2))
n1
Out[16]:
$\displaystyle - \pi$
In [17]:
d1 = d.diff(x).subs(x, Rational(1,2))
d1
Out[17]:
$\displaystyle 2$
In [18]:
l = n1/d1
l
Out[18]:
$\displaystyle - \frac{\pi}{2}$
In [19]:
l ==  a.limit(x, Rational(1,2))
Out[19]:
True

Ableitungen mit Parameter¶

In [20]:
a = Symbol('a')
In [21]:
g = cos(a*x**2)
In [22]:
dg4 = g.diff(x, 4)
dg4
Out[22]:
$\displaystyle 4 a^{2} \cdot \left(4 a^{2} x^{4} \cos{\left(a x^{2} \right)} + 12 a x^{2} \sin{\left(a x^{2} \right)} - 3 \cos{\left(a x^{2} \right)}\right)$
In [23]:
dg4.expand().collect(g)
Out[23]:
$\displaystyle 48 a^{3} x^{2} \sin{\left(a x^{2} \right)} + \left(16 a^{4} x^{4} - 12 a^{2}\right) \cos{\left(a x^{2} \right)}$
In [24]:
f = exp(-a**2*x**2)
In [25]:
d10 = diff(f, x, 10)
d10
Out[25]:
$\displaystyle 32 a^{10} \cdot \left(32 a^{10} x^{10} - 720 a^{8} x^{8} + 5040 a^{6} x^{6} - 12600 a^{4} x^{4} + 9450 a^{2} x^{2} - 945\right) e^{- a^{2} x^{2}}$
In [27]:
#d10.limit(x, oo)   # NotImplementedError

Annahmen (assumptions)¶

In [28]:
aplus = Symbol('a', positive=True)
aplus
Out[28]:
$\displaystyle a$
In [30]:
aplus == a
Out[30]:
False
In [31]:
a == S('a')
Out[31]:
True
In [32]:
fplus = f.subs(a, aplus)
fplus
Out[32]:
$\displaystyle e^{- a^{2} x^{2}}$
In [33]:
fplus.diff(x, 10).limit(x, oo)
Out[33]:
$\displaystyle 0$
In [34]:
aplus._assumptions
Out[34]:
{'positive': True,
 'infinite': False,
 'extended_nonzero': True,
 'imaginary': False,
 'finite': True,
 'nonnegative': True,
 'extended_nonnegative': True,
 'commutative': True,
 'extended_positive': True,
 'nonpositive': False,
 'extended_negative': False,
 'zero': False,
 'negative': False,
 'nonzero': True,
 'extended_nonpositive': False,
 'extended_real': True,
 'complex': True,
 'hermitian': True,
 'real': True,
 'rational': None,
 'integer': None,
 'even': None,
 'irrational': None,
 'algebraic': None,
 'prime': None,
 'composite': None,
 'odd': None,
 'polar': None}

Dreiwertige Logik

  • True
  • False
  • None

Unbestimmte Integrale¶

In [35]:
g = x**7*cos(x) 
In [38]:
I1 = Integral(g, x)  # Warum darf diese Variable nicht I heißen?
I1
Out[38]:
$\displaystyle \int x^{7} \cos{\left(x \right)}\, dx$
In [39]:
G = I1.doit()
G
Out[39]:
$\displaystyle x^{7} \sin{\left(x \right)} + 7 x^{6} \cos{\left(x \right)} - 42 x^{5} \sin{\left(x \right)} - 210 x^{4} \cos{\left(x \right)} + 840 x^{3} \sin{\left(x \right)} + 2520 x^{2} \cos{\left(x \right)} - 5040 x \sin{\left(x \right)} - 5040 \cos{\left(x \right)}$
In [42]:
G.collect(cos(x)).collect(sin(x))
Out[42]:
$\displaystyle \left(7 x^{6} - 210 x^{4} + 2520 x^{2} - 5040\right) \cos{\left(x \right)} + \left(x^{7} - 42 x^{5} + 840 x^{3} - 5040 x\right) \sin{\left(x \right)}$
In [43]:
G.collect([cos(x), sin(x)])
Out[43]:
$\displaystyle \left(7 x^{6} - 210 x^{4} + 2520 x^{2} - 5040\right) \cos{\left(x \right)} + \left(x^{7} - 42 x^{5} + 840 x^{3} - 5040 x\right) \sin{\left(x \right)}$
In [44]:
n = Symbol('n')
In [45]:
f = x**n
In [46]:
I2 = Integral(f, x)
I2
Out[46]:
$\displaystyle \int x^{n}\, dx$
In [47]:
F = I2.doit()
F
Out[47]:
$\displaystyle \begin{cases} \frac{x^{n + 1}}{n + 1} & \text{for}\: n \neq -1 \\\log{\left(x \right)} & \text{otherwise} \end{cases}$
In [48]:
F.diff(x).simplify()
Out[48]:
$\displaystyle \begin{cases} x^{n} & \text{for}\: n > -1 \vee n < -1 \\\frac{1}{x} & \text{otherwise} \end{cases}$
In [49]:
m = Symbol('m', nonnegative=True)
In [50]:
I3 = I2.subs(n, m)
I3.doit()
Out[50]:
$\displaystyle \frac{x^{m + 1}}{m + 1}$
In [51]:
delta = Symbol('delta', nonzero=True)
In [52]:
k = -1 + delta
k
Out[52]:
$\displaystyle \delta - 1$
In [53]:
I4 = I2.subs(n, k)
I4
Out[53]:
$\displaystyle \int x^{\delta - 1}\, dx$
In [54]:
I4.doit().subs(delta, k+1)
Out[54]:
$\displaystyle \frac{x^{\delta}}{\delta}$

Warum klappt das nicht?

Gleichheit nicht immer klar¶

In [55]:
h = 1/(1+x**4)
I5 = Integral(h, x)
I5
Out[55]:
$\displaystyle \int \frac{1}{x^{4} + 1}\, dx$
In [56]:
H = I5.doit()
H
Out[56]:
$\displaystyle - \frac{\sqrt{2} \log{\left(x^{2} - \sqrt{2} x + 1 \right)}}{8} + \frac{\sqrt{2} \log{\left(x^{2} + \sqrt{2} x + 1 \right)}}{8} + \frac{\sqrt{2} \operatorname{atan}{\left(\sqrt{2} x - 1 \right)}}{4} + \frac{\sqrt{2} \operatorname{atan}{\left(\sqrt{2} x + 1 \right)}}{4}$
In [57]:
H.diff(x) == h
Out[57]:
False
In [58]:
H.diff(x)
Out[58]:
$\displaystyle - \frac{\sqrt{2} \cdot \left(2 x - \sqrt{2}\right)}{8 \left(x^{2} - \sqrt{2} x + 1\right)} + \frac{\sqrt{2} \cdot \left(2 x + \sqrt{2}\right)}{8 \left(x^{2} + \sqrt{2} x + 1\right)} + \frac{1}{2 \left(\left(\sqrt{2} x + 1\right)^{2} + 1\right)} + \frac{1}{2 \left(\left(\sqrt{2} x - 1\right)^{2} + 1\right)}$
In [59]:
H.diff(x).ratsimp()
Out[59]:
$\displaystyle \frac{1}{x^{4} + 1}$

Bestimmte Integrale¶

In [62]:
I6 = Integral(h, (x,-oo,oo))
I6
Out[62]:
$\displaystyle \int\limits_{-\infty}^{\infty} \frac{1}{x^{4} + 1}\, dx$
In [61]:
I6.doit()
Out[61]:
$\displaystyle \frac{\sqrt{2} \pi}{2}$
In [63]:
H.limit(x, oo) - H.limit(x, -oo)
Out[63]:
$\displaystyle \frac{\sqrt{2} \pi}{2}$
In [64]:
k = sqrt(exp(x)+4)
J = Integral(k, (x,0,1)) 
J
Out[64]:
$\displaystyle \int\limits_{0}^{1} \sqrt{e^{x} + 4}\, dx$
In [65]:
J_Wert = J.doit()
J_Wert
Out[65]:
$\displaystyle - 2 \sqrt{5} - 2 \log{\left(2 + \sqrt{e + 4} \right)} + 2 \log{\left(-2 + \sqrt{e + 4} \right)} - 2 \log{\left(-2 + \sqrt{5} \right)} + 2 \log{\left(2 + \sqrt{5} \right)} + 2 \sqrt{e + 4}$

Das konnte er vor 6 Jahren noch nicht. Probe:

In [67]:
K = Integral(k, x).doit()
K
Out[67]:
$\displaystyle 2 \sqrt{e^{x} + 4} + 2 \log{\left(\sqrt{e^{x} + 4} - 2 \right)} - 2 \log{\left(\sqrt{e^{x} + 4} + 2 \right)}$
In [68]:
K.subs(x,1) - K.subs(x, 0) == J_Wert
Out[68]:
True
In [69]:
K.diff(x) == k
Out[69]:
False
In [70]:
K.diff(x).simplify()
Out[70]:
$\displaystyle \sqrt{e^{x} + 4}$

Numerische Probe:

In [71]:
J_Wert.n()
Out[71]:
$\displaystyle 2.38910363799198$
In [72]:
J.n()
Out[72]:
$\displaystyle 2.38910363799198$

Das sind wirklich verschiedene Rechenwege:

In [73]:
%%timeit
J.doit().n()
1.12 s ± 77 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [74]:
%%timeit
J.n()
5.47 ms ± 578 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Boolesche Operatoren¶

In [75]:
1 == 0
Out[75]:
False
In [76]:
1 != 0
Out[76]:
True
In [77]:
1 <= 2
Out[77]:
True

Die anderen Vergleichsoperatoren sind <, > und >=

Für Symbole sind die binären logischen Operatoren & für "und" sowie | für "oder". Die Verneinung ist ~

In [79]:
y = S('y')
A = x | y
A
Out[79]:
$\displaystyle x \vee y$
In [80]:
(~A).simplify()
Out[80]:
$\displaystyle \neg x \wedge \neg y$
In [81]:
A.subs(x, 2<3)
Out[81]:
$\displaystyle \text{True}$
In [82]:
A.subs(y, 3<0)
Out[82]:
$\displaystyle x$

Fallunterscheidungen¶

In [83]:
F
Out[83]:
$\displaystyle \begin{cases} \frac{x^{n + 1}}{n + 1} & \text{for}\: n \neq -1 \\\log{\left(x \right)} & \text{otherwise} \end{cases}$
In [84]:
print(F)
Piecewise((x**(n + 1)/(n + 1), Ne(n, -1)), (log(x), True))
In [ ]:
# ?Piecewise
In [85]:
g = Piecewise((0, x<-1), (1, (x>=-1) & (x<=1)), (0, x>1))
g
Out[85]:
$\displaystyle \begin{cases} 0 & \text{for}\: x < -1 \\1 & \text{for}\: x \leq 1 \\0 & \text{otherwise} \end{cases}$
In [86]:
print(g)
Piecewise((0, x < -1), (1, x <= 1), (0, True))
In [87]:
g.subs(x, -2)
Out[87]:
$\displaystyle 0$
In [88]:
g.subs(x, Rational(1,2))
Out[88]:
$\displaystyle 1$

Die Bedingungen werden von links nach rechts (bzw. von oben nach unten) abgearbeitet. Bei der ersten zutreffenden wird ausgwertet.