[PYTHON] Mach dir mit Sympy keine Sorgen

Berechnung mit Sympy

Vorbereitung für die Verwendung mit Google Colab

#Sympy 1 im aktuellen Google Colab.1.Enthält 1.
# Sympy 1.Da ich die später beschriebene "Speziallösung" nicht berechnen kann, 1.Upgrade auf 3.
!pip install sympy==1.3
Collecting sympy==1.3
[?25l  Downloading https://files.pythonhosted.org/packages/dd/f6/ed485ff22efdd7b371d0dbbf6d77ad61c3b3b7e0815a83c89cbb38ce35de/sympy-1.3.tar.gz (5.9MB)
      |████████████████████████████████| 5.9MB 4.1MB/s 
[?25hRequirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.6/dist-packages (from sympy==1.3) (1.1.0)
Building wheels for collected packages: sympy
  Building wheel for sympy (setup.py) ... [?25l[?25hdone
  Created wheel for sympy: filename=sympy-1.3-cp36-none-any.whl size=5199947 sha256=bc14a07ac6744969566fce4c541612a22adecb5bc83223ccc225ed28f415c38d
  Stored in directory: /root/.cache/pip/wheels/6c/59/86/478e3c0f298368c119095cc5985dedac57c0e35a85c737f823
Successfully built sympy
Installing collected packages: sympy
  Found existing installation: sympy 1.1.1
    Uninstalling sympy-1.1.1:
      Successfully uninstalled sympy-1.1.1
Successfully installed sympy-1.3
import sympy as sym
from sympy.plotting import plot
sym.init_printing(use_unicode=True)
%matplotlib inline
#Wenn Sie Google Colab verwenden, führen Sie es aus, um die TeX-Anzeige von Sympy zu unterstützen
def custom_latex_printer(exp,**options):
    from google.colab.output._publish import javascript
    url = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=default"
    javascript(url=url)
    return sym.printing.latex(exp,**options)

sym.init_printing(use_latex="mathjax",latex_printer=custom_latex_printer)

Symboldefinition

Behandelt das angegebene Zeichen als Symbol (Zeichen, das eine Variable darstellt).

a = sym.Symbol('a')

Wenn Sie sie alle zusammen definieren möchten, gehen Sie wie folgt vor.

a, b, c, x, y = sym.symbols("a b c x y")

Behandelt das angegebene Zeichen als Funktion.

f = sym.Function('f')
g = sym.Function('g')

Einfaches Polypoly

#Die Formel ist ein numerischer Ausdruck oder eine numerische Formel in Englisch
expr = x**2-12*x+8
expr
x^{2} - 12 x + 8
#Illustrierte die erhaltene Funktion
plot(expr, (x, -20, 20))

output_12_0.png

<sympy.plotting.plot.Plot at 0x7faf57ced080>

Faktor

#Factoring
expr = x**2 + 2*x + 1
sym.factor(expr)
\left(x + 1\right)^{2}

Löse die Gleichung

#Gleichung oder Gleichheit in Englisch
eq = sym.Eq(expr)
eq
x^{2} - 12 x + 8 = 0
#Sie können die rechte Seite wie folgt angeben
eq = sym.Eq(x**2-12*x, -8)
eq
x^{2} - 12 x = -8
#Löse die Gleichung
sym.solve(eq)
\left [ - 2 \sqrt{7} + 6, \quad 2 \sqrt{7} + 6\right ]
#Kann Ausdrücke mit Algebra verarbeiten
eq = sym.Eq(a * x ** 2 + b * x + c)
eq
a x^{2} + b x + c = 0
#Löse nach x
sym.solve(eq, x)
\left [ \frac{- b + \sqrt{- 4 a c + b^{2}}}{2 a}, \quad - \frac{b + \sqrt{- 4 a c + b^{2}}}{2 a}\right ]
#Simultangleichungen
eq1 = 3 * x + 5 * y - 29
eq2 = x + y - 7

sym.solve([eq1, eq2])
x : 3, y : 4

Differential

expr = 2 * x ** 2 + 5 * x - 3
expr
2 x^{2} + 5 x - 3
#Differential
sym.Derivative(expr)
\frac{d}{d x} \left(2 x^{2} + 5 x - 3\right)
#Berechnen Sie das Differential
sym.Derivative(expr).doit()
4 x + 5
#Es ist das gleiche, auch wenn es so geschrieben ist
sym.diff(expr)
4 x + 5
# sym.Notiert als Gleichung mit Gl
sym.Eq(sym.Derivative(expr), sym.diff(expr))
\frac{d}{d x} \left(2 x^{2} + 5 x - 3\right) = 4 x + 5
#Es hat die gleiche Bedeutung wie oben, aber wenn es nur eine Variable gibt, kann es wie oben weggelassen werden.
#Wenn zwei oder mehr Variablen vorhanden sind, müssen Sie angeben, was Sie unterscheiden möchten.
sym.Eq(sym.Derivative(expr, x), sym.diff(expr, x))
\frac{d}{d x} \left(2 x^{2} + 5 x - 3\right) = 4 x + 5
#Differential zweiter Ordnung
sym.Eq(sym.Derivative(expr, x, 2), sym.diff(expr, x, 2))
\frac{d^{2}}{d x^{2}} \left(2 x^{2} + 5 x - 3\right) = 4
#Unterscheide über x x=Ersatz 1
sym.diff(expr).subs(x, 1)
9
#Unterscheide über x
expr = a * x ** 2 + b * x * y + c * y ** 2
sym.diff(expr, x)
2 a x + b y
#Unterscheide über x x=Ersatz 1
sym.diff(expr, x).subs(x, 1)
2 a + b y

Übung 1

Vervollständigen Sie die folgende Differentialformel mit Sympy. [Hinweis] Wenn Sie eine Funktion wie sin in Sympy verwenden, schreiben Sie sie als sym.sin.

1-1.

\frac{\partial}{\partial x} x^{a} =

1-2.

\frac{d}{d x} \sin{\left (x \right )} =

1-3.

\frac{d}{d x} \cos{\left (x \right )} =

1-4.

\frac{d}{d x} e^{x} =

1-5.

\frac{\partial}{\partial x} a^{x} =

1-6.

\frac{d}{d x} \log{\left (x \right )} =

1-7.

\frac{d}{d x} \sqrt{x} =

1-8.

\frac{d}{d x} \tan{\left (x \right )} =

1-9.

\frac{\partial}{\partial x} \sin^{a}{\left (x \right )} =

1-10.

\frac{\partial}{\partial x} \cos^{a}{\left (x \right )} =

1-11.

\frac{\partial}{\partial x} \tan^{a}{\left (x \right )} =

1-12.

\frac{\partial}{\partial x} \log{\left (x \right )}^{a} =

1-13.

\frac{d}{d x} f{\left (x \right )} g{\left (x \right )} =

1-14.

\frac{d}{d x} \frac{f{\left (x \right )}}{g{\left (x \right )}} =

Normale Differentialgleichung

Löse $ 2 f '(x) + 5 f (x) = 0 $

#Normale Differentialgleichung
eq = sym.Eq(2 * f(x).diff(x,1) + 5 * f(x))
eq
5 f{\left (x \right )} + 2 \frac{d}{d x} f{\left (x \right )} = 0
#Allgemeine Lösung
ans = sym.dsolve(eq)
print(ans)
ans
Eq(f(x), C1*exp(-5*x/2))
f{\left (x \right )} = C_{1} e^{- \frac{5 x}{2}}
#Spezielle Lösung
ans = sym.dsolve(eq, ics={f(0):1})
print(ans)
ans
Eq(f(x), exp(-5*x/2))
f{\left (x \right )} = e^{- \frac{5 x}{2}}
plot(ans.rhs, (x, -10, 10)) #rhs ist die rechte Seite(Right-hand side)Bedeutung von

output_52_0.png

<sympy.plotting.plot.Plot at 0x7faf54dd4320>
#Sonderlösung x=Wann
print(ans.subs(x, 2))
ans.subs(x, 2)
Eq(f(2), exp(-5))
f{\left (2 \right )} = e^{-5}
#Wenn Sie eine Methode namens evalf verwenden, wird sie zum Gleitkomma erweitert
ans.subs(x, 2).evalf()
f{\left (2 \right )} = 0.00673794699908547

Übung 2

Beantworten Sie die folgenden Fragen zur normalen Differentialgleichung $ f '' (x) + f '(x) + 4 f (x) = 0 $.

[Hinweis] Schreiben Sie ics = {f (0): 1, f (_) .diff (x, 1) .subs (_, _): 1} und füllen Sie _ entsprechend aus, um das Problem zu lösen.

Integration

#Integrationsgleichung
expr  = x ** a
integ = sym.Integral(expr, x)
print(integ)
integ
Integral(x**a, x)
\int x^{a}\, dx
#Führen Sie die Integration durch
integ.doit()
\begin{cases} \frac{x^{a + 1}}{a + 1} & \text{for}\: a \neq -1 \\\log{\left (x \right )} & \text{otherwise} \end{cases}
#Es ist das gleiche, auch wenn es so geschrieben ist
sym.integrate(expr, x)
\begin{cases} \frac{x^{a + 1}}{a + 1} & \text{for}\: a \neq -1 \\\log{\left (x \right )} & \text{otherwise} \end{cases}
# sym.Notiert als Gleichung mit Gl
eq = sym.Eq(sym.Integral(expr, x), sym.integrate(expr, x))
print(eq)
eq
Eq(Integral(x**a, x), Piecewise((x**(a + 1)/(a + 1), Ne(a, -1)), (log(x), True)))
\int x^{a}\, dx = \begin{cases} \frac{x^{a + 1}}{a + 1} & \text{for}\: a \neq -1 \\\log{\left (x \right )} & \text{otherwise} \end{cases}

Herausforderung 3

Vervollständigen Sie die folgende Integrationsformel mit Sympy.

3-1.

\int \frac{1}{x}\, dx =

3-2.

\int a^{x}\, dx =

3-3.

\int e^{x}\, dx =

3-4.

\int \sin{\left (x \right )}\, dx =

3-5.

\int \cos{\left (x \right )}\, dx =

3-6.

\int \tan{\left (x \right )}\, dx =

3-7.

\int \log{\left (x \right )}\, dx =

3-8.

\int \frac{1}{\cos^{2}{\left (x \right )}}\, dx =

3-9.

\int \frac{1}{\sin^{2}{\left (x \right )}}\, dx =

3-10.

\int \left(- a + x\right)^{b}\, dx =

3-11.

\int \frac{1}{\sin{\left (x \right )}}\, dx =

Ständige Integration

expr = (x-a)*(b-x)
eq = sym.Eq(sym.Integral(expr, (x, a, b)), sym.integrate(expr, (x, a, b))).factor()
print(eq)
eq
Eq(-Integral((-a + x)*(-b + x), (x, a, b)), -(a - b)**3/6)
- \int_{a}^{b} \left(- a + x\right) \left(- b + x\right)\, dx = - \frac{\left(a - b\right)^{3}}{6}
expr = x/(x**2 + 1)
eq = sym.Eq(sym.Integral(expr, (x, 1, 2)), sym.integrate(expr, (x, 1, 2)))
print(eq)
eq
Eq(Integral(x/(x**2 + 1), (x, 1, 2)), -log(2)/2 + log(5)/2)
\int_{1}^{2} \frac{x}{x^{2} + 1}\, dx = - \frac{\log{\left (2 \right )}}{2} + \frac{\log{\left (5 \right )}}{2}
sym.integrate(expr, (x, 1, 2)).evalf()
0.458145365937078

Übung 4

Lösen Sie die folgende konstante Integralgleichung mit Sympy.

\int_{0}^{1} \frac{4}{x^{2} + 1}\, dx =

Recommended Posts

Mach dir mit Sympy keine Sorgen
Überlagern Sie Diagramme mit Sympy
Bewegungsgleichung mit Sympy
Spielen Sie mit Poancare-Serien und SymPy
Schreiben der C-Sprache mit Sympy (Metaprogrammierung)
Frei von der harten Codierung von Funktionen mit SymPy
Mehrfachintegration mit Python und Sympy
Versuchen Sie, die β-Funktion von Godel mit SymPy zu berechnen