# Doing Math With Python Doing Math With Python

Info: To follow along with the example code in this tutorial, open a Python interactive shell on your local system by running the python3 command. Then you can copy, paste, or edit the examples by adding them after the >>> prompt.

## doing math with python doing math with python

You may be familiar with another acronym for the order of operations, such as BEDMAS or BODMAS. Whatever acronym works best for you, try to keep it in mind when performing math operations in Python so that the results that you expect are returned.

Python can be used just like a pocket calculator. In addition to addition, subtraction, multiplication and division, you can calculate exponents and logarithms with Python. Exponent and logarithm functions are imported from the math module which is part of the Python Standard Library. This means all the functions in the math module are available in any Python installation.

The mpmath can do large calculations using smart tricks whenever applicable. One example is factorial. For large numbers, it can use approximations appropriately without being instructed and give us the result much faster than the default Python math module.

We can throw in rational or complex numbers as easily as floating-point numbers into the mix. For this, we need to use a magic function mpmathify which works with sympy internals to interpret those quantities.

However, calculating approximate solutions with large arguments or non-integer (even complex) arguments is natural and easy for mpmath. This is not so straightforward to achieve using native Python coding.

In this article, we showed a powerful Python library and its capabilities for performing arbitrary-precision numerical computation involving all kinds of numbers and functions. Basically, the main advantage of this library is that it covers a very large swath of mathematical domains (algebraic, number-theory, calculus, special functions, etc.) and everything is available under a single roof without loading multiple libraries.

SymPy uses mpmath in the background, which makes it possible toperform computations using arbitrary-precision arithmetic. Thatway, some special constants, like , , (Infinity),are treated assymbols and can be evaluated with arbitrary precision:

The default method for installing packages is through a program called pip which will come with your installation of python. In the following examples we will assume your version of pip is associated with a python3 installation (which you will possibly need to call through pip3 depending on your platform). If you are running into issues see a TA!

In the tradition of learning a new language, lets start with defining a function. A function can be thought of as a mapping from inputs to outputs. In python the syntax for defining a function is as follows:

When we run this function with the call: another_greeting("Doctor") we should see the line "Hello, Doctor!" printed on the results line. For this course it is important to understand how python manages the underlying references in a function call (i.e. what is copied and what is passed by reference). Python's default is to pass an object (or any complex structure) as a reference. This means the function can modify this argument, causing a side effect (i.e. your outer-scope state could change by calling a function). Primitive types (such as Integers and Floating point numbers) are passed by a copy operation and won't be effected by the internal operations of a function. The following example shows this:

This statement is telling python to only run the code after the conditional if the file is called through python my_file.py. If you have some code in this file that you want to import into another file, you can do so without the main(some_arguments) code being run!

Now that we have the basics of python syntax down we can discuss numpy operations and why numpy is imperative to mathematical computing with python. Whenever using numpy you will need to import the module, which is typically done with the name np (as above and below)

Numpy is a module which wraps BLAS operations written in c (or fortran). This allows python to perform linear algebra operations much more efficiently than doing these operations in the python interpretor. Take for instance a simple inner product between two vectors:

You should see np.dot significantly outperform my_inner_product in terms of performance, and as we get into more complex operations the pure python approach will become considerably burdened by the interpretor. And you will even see np.dot outperform my_innter_product when you past the python lists as arguments (i.e. np.dot(list_1, list_2)). This means you should never do math in pure python and instead favor numpy (or other fully-featured linear algebra packages).

But isn't that what the MATHS MEANS? It doesn't follow that x will *reach* 0, but if it does, then n/x *must* equal infinity. (Quite often, x=0 is illegal in the problem domain.)> And as for the more general point, calculus deals with real numbers for the most part. Computers operate on floating point and integer numbers. Operations that make sense in one domain don't necessarily translate 1:1 to another. Principle of least surprise. Yes, floating point is a quantum operation, while reals aren't, but given that (I believe) the IEEE definition of floating point includes both NaN and inf, it would be nice if computers actually used them - I believe some popular computers did 40 years ago (DEC Vax), and I guess it's the ubiquity of x86 that killed it :-(And the whole point of fp is to imitate real. Again, principle of least surprise, the fp model should not crash when fed something that is valid in the real domain. It should get as close as possible.People are too eager to accept that "digital is better" "because it's maths", and ignore the fact that it's just a model. And people find it hard to challenge a mathematical model, even when it's blatantly wrong, "because the maths says so".Cheers,Wol Python cryptography, Rust, and Gentoo Posted Feb 13, 2021 11:38 UTC (Sat) by Jonno (guest, #49613) [Link]

What may also surprise you is that when Python displays an array,it shows the element with index [0, 0] in the upper left cornerrather than the lower left.This is consistent with the way mathematicians draw matrices,but different from the Cartesian coordinates.The indices are (row, column) instead of (column, row) for the same reason,which can be confusing when plotting data.

Arrays also know how to perform common mathematical operations on their values.The simplest operations with data are arithmetic:add, subtract, multiply, and divide. When you do such operations on arrays,the operation is done on each individual element of the array.Thus:

If, instead of taking an array and doing arithmetic with a single value (as above)you did the arithmetic operation with another array of the same shape,the operation will be done on corresponding elements of the two arrays.Thus:

SchemePython(define four 4)(define pi 3.14159)(define half 1/2) four = 4pi = 3.14159nothalf = 1/2 (evaluates to 0)half = 1.0/2.0 (evaluates to .5)What happened when we defined nothalf? Unlike Scheme, Python makes a distinction between integer math andfloating point math. This normally isn't that important; when we do mathbetween the same types, the result is the same type, and when we do mathwith a floating point number and an integer, the type returned is afloating point number. However, the result of division of an integer byanother integer is not necessarily an integer -- Python will silentlydiscard the fractional part of the answer. By writing the operands withdecimal points, we ensure that the operation will return a floatingpoint number. This problem only rarely occurs, but you should always beaware of it when searching for bugs.StringsPython treats strings like Scheme: they need quotation marks. You can usesingle quotes ('), double quoteS ("), or triple quotes ("""). However, there is a very importantdifference between triple quotes and other quotes; when you use triple quotes you can breaklines in the string, but when you use single or double quotes you can not.You can concatenate (run together) two strings by using the plus sign (+):

Python provides a convenient mechanism for inheritance:ClassDefinition ::= class SubClassName( SuperClassName ) : FunctionDefinitionscreates a new class named SubClassName that inherits fromSuperClassName. Here's an example from PS6:SchemePython (define (make-lecturer name) (let ((super (make-object name))) (lambda (message) (if (eq? message 'lecture) (lambda (self stuff) (ask self 'say stuff) (ask self 'say (list "you should be taking notes"))) (get-method super message)))))class lecturer (my_object): def lecture(self, stuff): self.say (stuff) print "you should be taking notes" Because of Python's built in support for classes, object-orientedprograms in Python are shorter and more elegant than object-orientedprograms in Scheme. Interacting with Web RequestsProducing OutputWhen a client browser requests a cgi page that is a python program, theweb server runs the Python interpreter on that page and sends the outputback to the client. The output is everything the page prints, so allyou have to do in a Python program to send content back to the client isuse print.The first line of the CGI file should be: #!/uva/bin/pythonThis tells the web server that the rest of the file is a Python programthat should be executed to produce the output page.In order for the output to be interpreted as HTML, we need to print thecontent type at the beginning of the output: print "Content-type:text/html\n"The \n prints a new line.Getting InputCGI is, for a variety of good and bad reasons, extremelycomplicated. Luckily, Python includes a complete CGI handler that takescare of all of the messy details. Instead, at the beginning of everycgi program that expects data from an HTML form, we can begin thatscript with:import cgi form = cgi.FieldStorage() 041b061a72