Computergestützte Mathematik zur Analysis¶

Vorlesung vom 27.10.2022

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

In [1]:
from sympy import *

Ersetzungen¶

In [2]:
x = S('x')
In [4]:
f = 5*x + 13
f
Out[4]:
$\displaystyle 5 x + 13$
In [5]:
f.subs(x, 0)
Out[5]:
$\displaystyle 13$
In [12]:
x = 10
In [13]:
f
Out[13]:
$\displaystyle 5 x + 13$
In [14]:
f.subs(x, 10)
Out[14]:
$\displaystyle 5 x + 13$
In [15]:
x
Out[15]:
10
In [16]:
x = S('x')
In [17]:
f.subs(x, 10)
Out[17]:
$\displaystyle 63$

factor und expand¶

In [18]:
x = S('x')
y = S('y')
In [20]:
(x+y)**2
Out[20]:
$\displaystyle \left(x + y\right)^{2}$
In [21]:
a = (x+y)**2
a.expand()
Out[21]:
$\displaystyle x^{2} + 2 x y + y^{2}$
In [22]:
c = (x+y)*(x-y)
c.expand()
Out[22]:
$\displaystyle x^{2} - y^{2}$
In [23]:
d = (4 + 4*x + x**2)**3
In [24]:
expand(d)
Out[24]:
$\displaystyle x^{6} + 12 x^{5} + 60 x^{4} + 160 x^{3} + 240 x^{2} + 192 x + 64$
In [25]:
factor(d)
Out[25]:
$\displaystyle \left(x + 2\right)^{6}$
In [26]:
alpha = (x**4 + 20*x**3 + 150*x**2 + 500*x + 625) / (x+5)**2
alpha
Out[26]:
$\displaystyle \frac{x^{4} + 20 x^{3} + 150 x^{2} + 500 x + 625}{\left(x + 5\right)^{2}}$
In [27]:
expand(alpha)
Out[27]:
$\displaystyle \frac{x^{4}}{x^{2} + 10 x + 25} + \frac{20 x^{3}}{x^{2} + 10 x + 25} + \frac{150 x^{2}}{x^{2} + 10 x + 25} + \frac{500 x}{x^{2} + 10 x + 25} + \frac{625}{x^{2} + 10 x + 25}$
In [29]:
expand(alpha, denom=True)
Out[29]:
$\displaystyle \frac{x^{4} + 20 x^{3} + 150 x^{2} + 500 x + 625}{x^{2} + 10 x + 25}$
  • denom = denominator = Nenner
  • numer = numerator = Zähler
In [30]:
cancel(alpha)
Out[30]:
$\displaystyle x^{2} + 10 x + 25$
In [31]:
factor(alpha)
Out[31]:
$\displaystyle \left(x + 5\right)^{2}$
In [32]:
beta = cos(2*x+y)
expand(beta)
Out[32]:
$\displaystyle \cos{\left(2 x + y \right)}$
In [33]:
expand(beta, trig=True)
Out[33]:
$\displaystyle - 2 \sin{\left(x \right)} \sin{\left(y \right)} \cos{\left(x \right)} + 2 \cos^{2}{\left(x \right)} \cos{\left(y \right)} - \cos{\left(y \right)}$
In [34]:
delta = (x*y)**(2+x)
expand(delta)
Out[34]:
$\displaystyle x^{2} y^{2} \left(x y\right)^{x}$
In [35]:
expand(delta, power_exp=True, force=True)
Out[35]:
$\displaystyle x^{2} x^{x} y^{2} y^{x}$

Statt force = True verwendet man, wo möglich, besser Annahmen.

Die folgende Umformung ist korrekt, weil $2$ positiv ist.

In [36]:
expand((2*y)**x)
Out[36]:
$\displaystyle 2^{x} y^{x}$
In [40]:
expand((2*y)**x)
Out[40]:
$\displaystyle 2^{x} y^{x}$
In [41]:
expand((2*y)**x, power_base=False)
Out[41]:
$\displaystyle \left(2 y\right)^{x}$
In [38]:
eta = cos(2*(x+1)**2+pi)
expand(eta)
Out[38]:
$\displaystyle - \cos{\left(2 x^{2} + 4 x + 2 \right)}$
In [42]:
expand(eta, deep=False)
Out[42]:
$\displaystyle - \cos{\left(2 \left(x + 1\right)^{2} \right)}$
In [43]:
eta.subs(x+1, y).expand(trig=True).subs(y, x+1)
Out[43]:
$\displaystyle 1 - 2 \cos^{2}{\left(\left(x + 1\right)^{2} \right)}$

Objekte¶

f(x): Funktion f angewandt auf Objekt x

x.m(): Methode m des Objekts x angewandt auf leeres Argument

Das Bedürfnis nach objektorientierter Programmierung stammt nicht aus der Mathematik.

Speziell in sympy funktioniert oft beides

In [45]:
c.expand()
Out[45]:
$\displaystyle x^{2} - y^{2}$
In [46]:
expand(c)
Out[46]:
$\displaystyle x^{2} - y^{2}$
In [48]:
p = 1279
p
Out[48]:
1279
In [49]:
p.is_prime
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Input In [49], in <cell line: 1>()
----> 1 p.is_prime

AttributeError: 'int' object has no attribute 'is_prime'
In [50]:
S(p).is_prime
Out[50]:
True
In [51]:
isprime(p)
Out[51]:
True

Primzahltest¶

In [53]:
m = 2**p - 1
m
Out[53]:
10407932194664399081925240327364085538615262247266704805319112350403608059673360298012239441732324184842421613954281007791383566248323464908139906605677320762924129509389220345773183349661583550472959420547689811211693677147548478866962501384438260291732348885311160828538416585028255604666224831890918801847068222203140521026698435488732958028878050869736186900714720710555703168729087
In [54]:
isprime(m)
Out[54]:
True
In [52]:
?isprime

Also arbeitet isprime probabilistisch. In der Zahlentheorie ist das nicht akzeptabel. Die Funktion isprime von http://sagemath.org hat einen Schalter proof=True

Vereinfachungen¶

In [56]:
g = (x**2-y**2)/((x-y)**2)
g
Out[56]:
$\displaystyle \frac{x^{2} - y^{2}}{\left(x - y\right)^{2}}$
In [57]:
g.cancel()
Out[57]:
$\displaystyle \frac{x + y}{x - y}$
In [58]:
g.simplify()
Out[58]:
$\displaystyle \frac{x + y}{x - y}$
In [59]:
g.ratsimp()
Out[59]:
$\displaystyle \frac{2 y}{x - y} + 1$
In [55]:
h = x*x**y
h.simplify()
Out[55]:
$\displaystyle x^{y + 1}$
In [62]:
h.powsimp()
Out[62]:
$\displaystyle x^{y + 1}$
In [61]:
%%timeit
h.simplify()
4.99 ms ± 392 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [65]:
%%timeit
h.powsimp()
394 µs ± 38 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
In [63]:
exp(log(x))
Out[63]:
$\displaystyle x$
In [64]:
log(exp(x))
Out[64]:
$\displaystyle \log{\left(e^{x} \right)}$

Da hat er recht: $\exp$ ist nicht injektiv

In [ ]:
 
In [66]:
exp(2*pi*I)
Out[66]:
$\displaystyle 1$
In [71]:
1j**2
Out[71]:
(-1+0j)
In [67]:
I**2
Out[67]:
$\displaystyle -1$

Wir kommen später zu den komplexen Zahlen zurück.

In [73]:
f = (sin(3*x)+cos(x)) / ((sin(2*x)**2 - cos(x)**2)*(sin(2*x)-cos(x)))
f
Out[73]:
$\displaystyle \frac{\sin{\left(3 x \right)} + \cos{\left(x \right)}}{\left(\sin{\left(2 x \right)} - \cos{\left(x \right)}\right) \left(\sin^{2}{\left(2 x \right)} - \cos^{2}{\left(x \right)}\right)}$
In [74]:
f.simplify()
Out[74]:
$\displaystyle \frac{\frac{\sin{\left(3 x \right)}}{\cos{\left(x \right)}} + 1}{\left(2 \sin{\left(x \right)} - 1\right)^{2} \cdot \left(2 \sin{\left(x \right)} + 1\right) \cos^{2}{\left(x \right)}}$
In [75]:
f.expand(trig=True)
Out[75]:
$\displaystyle - \frac{4 \sin^{3}{\left(x \right)}}{8 \sin^{3}{\left(x \right)} \cos^{3}{\left(x \right)} - 4 \sin^{2}{\left(x \right)} \cos^{3}{\left(x \right)} - 2 \sin{\left(x \right)} \cos^{3}{\left(x \right)} + \cos^{3}{\left(x \right)}} + \frac{3 \sin{\left(x \right)}}{8 \sin^{3}{\left(x \right)} \cos^{3}{\left(x \right)} - 4 \sin^{2}{\left(x \right)} \cos^{3}{\left(x \right)} - 2 \sin{\left(x \right)} \cos^{3}{\left(x \right)} + \cos^{3}{\left(x \right)}} + \frac{\cos{\left(x \right)}}{8 \sin^{3}{\left(x \right)} \cos^{3}{\left(x \right)} - 4 \sin^{2}{\left(x \right)} \cos^{3}{\left(x \right)} - 2 \sin{\left(x \right)} \cos^{3}{\left(x \right)} + \cos^{3}{\left(x \right)}}$
In [ ]:
 
In [77]:
d = f.expand(trig=true, numer=True)
d
Out[77]:
$\displaystyle \frac{- 4 \sin^{3}{\left(x \right)} + 3 \sin{\left(x \right)} + \cos{\left(x \right)}}{\left(\sin{\left(2 x \right)} - \cos{\left(x \right)}\right) \left(\sin^{2}{\left(2 x \right)} - \cos^{2}{\left(x \right)}\right)}$
In [78]:
  d.factor()
Out[78]:
$\displaystyle \frac{- 4 \sin^{3}{\left(x \right)} + 3 \sin{\left(x \right)} + \cos{\left(x \right)}}{\left(- \sin{\left(2 x \right)} + \cos{\left(x \right)}\right)^{2} \left(\sin{\left(2 x \right)} + \cos{\left(x \right)}\right)}$

Auswertung von Ausdrücken¶

In [76]:
a = cos(pi*x) / (2*x-1)
a
Out[76]:
$\displaystyle \frac{\cos{\left(\pi x \right)}}{2 x - 1}$
In [79]:
a.subs(x, 1)
Out[79]:
$\displaystyle -1$
In [80]:
res = a.subs(x, Rational(1,2))
res
Out[80]:
$\displaystyle \text{NaN}$

Not a Number

Grenzwerte¶

In [82]:
a.limit(x, Rational(1,2))
Out[82]:
$\displaystyle - \frac{\pi}{2}$
In [83]:
b = 1/(1-x)
b.limit(x,1)
Out[83]:
$\displaystyle -\infty$
In [85]:
b.limit(x,1,dir='-')
Out[85]:
$\displaystyle \infty$
In [86]:
b.limit(x,1,dir='+-')
Out[86]:
$\displaystyle \tilde{\infty}$
In [88]:
print(_)
zoo
In [89]:
exp(x).limit(x,-oo)
Out[89]:
$\displaystyle 0$
In [90]:
b*exp(x)
Out[90]:
$\displaystyle \frac{e^{x}}{1 - x}$
In [91]:
(b*exp(x)).limit(x,oo)
Out[91]:
$\displaystyle -\infty$
In [92]:
n = Symbol('n')
c = factorial(n)*exp(n)/n**n/sqrt(n)
c
Out[92]:
$\displaystyle \frac{n^{- n} e^{n} n!}{\sqrt{n}}$
In [93]:
L = Limit(c, n, oo)  # träger Operator 
L
Out[93]:
$\displaystyle \lim_{n \to \infty}\left(\frac{n^{- n} e^{n} n!}{\sqrt{n}}\right)$
In [ ]:
L.doit()

Stirlingsche Formel