Symbolic Math with Python
Many programming languages include libraries to do more complicated math. You can do statistics, numerical analysis or handle big numbers. One topic many programming languages have difficulty with is symbolic math. If you use Python though, you have access to sympy, the symbolic math library. Sympy is under constant development, and it's aiming to be a full-featured computer algebra system (CAS). It also is written completely in Python, so you won't need to install any extra requirements. You can download a source tarball or a git repository if you want the latest and greatest. Most distributions also provide a package for sympy for those of you less concerned about being bleeding-edge. Once it is installed, you will be able to access the sympy library in two ways. You can access it like any other library with the import statement. But, sympy also provides a binary called isympy that is modeled after ipython.
In its simplest mode, sympy can be used as a calculator. Sympy has built-in support for three numeric types: float, rational and integer. Float and integer are intuitive, but what is a rational? A rational number is made of a numerator and a denominator. So, Rational(5,2) is equivalent to 5/2. There is also support for complex numbers. The imaginary part of a complex number is tagged with the constant I. So, a basic complex number is:
a + b*I
You can get the imaginary part with "im", and the real part with "re". You need to tell functions explicitly when they need to deal with complex numbers. For example, when doing a basic expansion, you get:
To get the actual expansion, you need to tell
expand that it is dealing
with complex numbers. This would look like:
All of the standard arithmetic operators, like addition, multiplication
and power are available. All of the usual functions also are available,
like trigonometric functions, special functions and so on. Special
constants, like e and pi, are treated symbolically in sympy. They
won't actually evaluate to a number, so something like "1+pi" remains
"1+pi". You actually have to use evalf explicitly to get a numeric
value. There is also a class, called
oo, which represents the concept
of infinity—a handy extra when doing more complicated mathematics.
Although this is useful, the real power of a CAS is the ability to do symbolic mathematics, like calculus or solving equations. Most other CASes automatically create symbolic variables when you use them. In sympy, these symbolic entities exist as classes, so you need to create them explicitly. You create them by using:
x = Symbol('x') y = Symbol('y')
If you have more than one symbol at a time to define, you can use:
x,y = symbols('x', 'y')
Then, you can use them in other operations, like looking at equations. For example:
You then can apply operations to these equations, like expanding it:
((x+y)**2).expand() x**2 + 2*x*y + y**2
You also can substitute these variables for other variables, or even numbers, using the substitution operator. For example:
You can decompose or combine more complicated equations too. For example, let's say you have the following:
Then, you can do a partial fraction decomposition with:
apart((x+1)/(x-1),x) 1 + 2/(x-1)
You can combine things back together again with:
together(1 + 2/(x-1)) (x+1)/(x-1)
When dealing with trigonometric functions, you need to tell operators like
together about it. For example, you could use:
sin(x+y).expand(trig=True) sin(x)*cos(y) + sin(y)*cos(x)
The really big use case for a CAS is calculus. Calculus is the backbone of
scientific calculations and is used in many situations. One of the
fundamental ideas in calculus is the limit. Sympy provides a function
limit to handle exactly that. You need to provide a function, a
variable and the value toward which the limit is being calculated. So, if
you wanted to calculate the limit of (sin(x)/x) as x goes to 0, you would
limit(sin(x)/x, x, 0) 1
Because sympy provides an infinity object, you can calculate limits as they go to infinity. So, you can calculate:
limit(1/x, x, oo) 0
Sympy also allows you to do differentiation. It can understand basic polynomials, as well as trigonometric functions. If you wanted to differentiate sin(x), then you could use:
x = Symbol('x') diff(sin(x), x) cos(x)
You can calculate higher derivatives by adding an extra parameter to the
diff function call. So, calculating the first derivative of (x**2) can be
diff(x**2, x, 1) 2*x
While the second derivative can be done with:
diff(x**2, x, 2) 2
Sympy provides for calculating solutions to differential equations. You can
define a differential equation with the
diff function. For example:
f(x).diff(x,x) + f(x)
f(x) is the function of interest, and
diff(x,x) takes the second
derivative of f(x) with respect to x. To solve this equation, you would use
dsolve(f(x).diff(x,x) + f(x), f(x)) f(x) = C1*cos(x) + C2*sin(x)
This is a very common task in scientific calculations.
Joey Bernard has a background in both physics and computer science. This serves him well in his day job as a computational research consultant at the University of New Brunswick. He also teaches computational physics and parallel programming.
Fast/Flexible Linux OS Recovery
On Demand Now
In this live one-hour webinar, learn how to enhance your existing backup strategies for complete disaster recovery preparedness using Storix System Backup Administrator (SBAdmin), a highly flexible full-system recovery solution for UNIX and Linux systems.
Join Linux Journal's Shawn Powers and David Huffman, President/CEO, Storix, Inc.
Free to Linux Journal readers.Register Now!
- Server Hardening
- BitTorrent Inc.'s Sync
- Download "Linux Management with Red Hat Satellite: Measuring Business Impact and ROI"
- New Container Image Standard Promises More Portable Apps
- The Humble Hacker?
- The Death of RoboVM
- Open-Source Project Secretly Funded by CIA
- The US Government and Open-Source Software
- EnterpriseDB's EDB Postgres Advanced Server and EDB Postgres Enterprise Manager
- ACI Worldwide's UP Retail Payments
In modern computer systems, privacy and security are mandatory. However, connections from the outside over public networks automatically imply risks. One easily available solution to avoid eavesdroppers’ attempts is SSH. But, its wide adoption during the past 21 years has made it a target for attackers, so hardening your system properly is a must.
Additionally, in highly regulated markets, you must comply with specific operational requirements, proving that you conform to standards and even that you have included new mandatory authentication methods, such as two-factor authentication. In this ebook, I discuss SSH and how to configure and manage it to guarantee that your network is safe, your data is secure and that you comply with relevant regulations.Get the Guide