Download Python Programming - Institute of Computational Mechanics and

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
by
What advantages has it?
The Reasons for Choosing Python
 Python
is free
 It is object-oriented
 It is interpreted
 It is operating-system independent
 It has an excellent optimization
module
 It offers modern COM modules for
interfacing with Solids Works
Getting Started with Python


Python(x,y) package from http://code.google.com/p/pythonxy
The Python(x,y) package comes with all numerical and scientific Python
modules.
Python(x,y) is a free scientific and engineering development
software for numerical computations, data analysis and data
visualization based on Python programming language. Spyder is
excellent integrated development environment (IDE).
Index for some packages related to python
http://pypi.python.org/pypi?%3Aaction=index
SfePy is a software for solving systems of coupled partial differential
equations (PDEs) by the finite element method in 2D and 3D
http://stepy.org
http://plateformesn-m2p.ensam.eu/SphinxDoc/cnem/index.html
http://femhub.org/
Basic Objects
Since Python is an object-oriented language,
everything one creates in Python is an object, including integers, float,
strings, arrays, etc.
Examples
>>> i=4
>>> x=3.56
>>> a=“hello”
Associated with objects are methods that act on these objects. By
Typing a ‘dot’ after the object variable name, we can access a list
of methods associated with it.
Examples
>>> a=“hello”
>>> a.capitalize()
‘Hello’
Basic Objects
For integers and floats, it is interpreted as the usual addition; for
strings it is interpreted in Python as a concatenation. We can reassign
the variables.
Examples
>>> i=1+2
>>> i
3
>>>a=“hello”+“world!”
>>>a
“hello world!”
>>>a=“hello”
>>>b=a
>>>print a,b
hello hello
>>>b=“world!”
>>>print a,b
hello world!
Lists
A list is a collection of other Python objects. Lists can contain a variety
of objects (integers, strings, etc). They can contain other list objects as
in b= [3,a]. Addition of lists leads to a concatenation as in c=a+a. There
is an access to individual elements of a list is through the [] operator (as
In a[2]). The indexing of individual elements f a list starts from 0.
Examples
>>> a=[1, 2, “srt”]
>>> b=[3,a]
>>> c=a+a
>>> print a,b,c
[1, 2, “str”][3, [1, 2, “str”]][1, 2, “str”,1, 2, “str”]
>>> b=a
>>>b[2]=3
>>>print a
[1, 2, 3]
>>> range(5)
[0, 1, 2, 3, 4]
Python Scripts
Simple Python program in the Editor (e.g. within Spyder). You can give
a name, e.g. PythonObjects.py, ‘py’ extension refers to a Python file.
PythonObjects.py-…
File Edit Format Run Options Windows Help
# Floats and integers
print 2**10
#2 to the power 10
x=0.5
print 2.5*x/3
# Strings
s=“Hello World!”
print 3*s
# implies concatenation
# Lists
a=[0,1,2,3]
# list, not an array or vector
b=range(4) # list, with the same contents as a
print a,b
print 3*a
# implies concatenation
Output
The following output appears in the Console window after running
the code PythonObjects.py
1024
0.416666666667
Hello World!Hello World!Hello World!
[0, 1, 2, 3] [0, 1, 2, 3]
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
Flow Control
The following example illustrates the use of ‘for’, ‘if’ and ‘while’
commands in Python.
FControl.py-…
File Edit Format Run Options Windows Help
# Flow control in Python
for i in range(10): # does not include 10
if i<=4:
print i, i**2
elif i<=7:
print i,i**2+1
else:
print i,i**2+2
s='-'
while len(s)<25:
s+='-'
print s
Output
The following output appears in the Console window
after running the code FControl.py
00
11
24
39
4 16
5 26
6 37
7 50
8 66
9 83
-------------------------
User Input
Python provides two commands, namely ‘raw_input’ and ‘input’ for user.
The first command returns the user input as a string, while the second
Command will interpret and evaluate the input, and return
the interpreted value if the evaluation is meaningful.
>>> a=raw_input(“Enter data:”)
Enter data: 3*4-5
>>> a
'3*4-5'
>>> a=input(“Enter data:”)
Enter data: 3*4-5
>>> a
7
Numerical Python
There are numerical objects (arrays, dot product, etc) and methods
that are not part of the core Python language, but are part of the numpy
and scipy libraries/modules. They are installed when we install Python.
However, in order to access them in a script file we must import them.
UsingPylab.py-…
File Edit Format Run Options Windows Help
# Using Pylab
import pylab as py #(or e.g. import numpy as py)
x=py.array([0,1,2,3]) # creates an array from a list
y=x+x
# this is now an addition not concatenation
print y
a=py.pi
# the number 3.1415926535897931
theta=py.arange(-a,a,0.1) # sample from -pi to +pi using arange
z=py.sin(theta)
# compute sin(theta) for all samples
print sz.max()
# find the maximum value
Output
The resulting output in the Console window is shown
[0 2 4 6]
0.999923257564
Complex Numbers
Python also supports the use of complex numbers through the use of
symbol “j” that represents −1.
Examples
>>> a=3+4j
>>> a**2
‘(-7+24j)'
>>> sqrt(a) # it is needed to import Numerical Python before
‘(2+1j)
Linear Algebra
There are numerical objects (arrays, dot product, etc) and methods
that are not part of the core Python language, but are part of the numpy
and scipy libraries/modules. They are installed when we install Python.
However, in order to access them in a script file we must import them.
LinearAlgebra.py-…
File Edit Format Run Options Windows Help
# Linear Algebra
import pylab as py
#(or e.g. import numpy as py)
A=py.array([[2,-1],[-1,2]]) # creates an array from a list
B=py.array([1,1])
x=py.solve(A,b)
print “Solution for 2x2 problem is” +str(x)
Linear Algebra (cont.)
LinearAlgebra.py-…
File Edit Format Run Options Windows Help
# Linear Algebra (continuation)
Lambda, V=py.eig(A)
print “Eigenvalues of matrix are” +str(Lambda)
Print “Eigenvectors of matrix are \n” +str(V)
A=py.rand(50,50)
xIn=py.rand(50,1)
B=py.dot(A,xIn)
xOut=py.solve(A,b)
Err=py.norm(xIn-xOut)
print “Error for a random matrix solve is “ +str(err)
Plots
Pylab supports 2D and 3D plotting via matlibplot
(http://matplot.souceforge.net) package that can be
Accessed through pylab.
MatLibPlot.py-…
File Edit Format Run Options Windows Help
# 2-D plots using Python/Pylab
import pylab as py
pi=py.pi
x=py.arrange(0,2*pi,pi/50)
y=py.sin(x)
Z=py.cos(x)
py.plot(x,y)
py.plot(x,z)
py.xlabel(“x”)
py.ylabel(“sin(x)&cos(x)”)
py.legend(“sin(x)’,’cos(x)”))
py.savefig(“Fig2.png”)
py.show()
Plots
The resulting output in the Console window is shown
Modules
One can include multiple functions within a single Python file, and
Access each one of them individually (a distinct advantage over Matlab).
Example: a file containing multiple functions
SampleFunctions.py-…
File Edit Format Run Options Windows Help
# Module consists of 1-D functions, and derivatives of some of these funcs.
import pylab as py
def f1(x):
f=-x*py.exp(-x**2)
# returns -x*exp(-x**2)
return f
def f1_gradient(x):
g=-py.exp(x**2)+2*x*x*py.exp(-x**2) # returns the derivative of f
return g
def f2_hessian(x):
h=6*x*py.exp(x**2)-4*x**3*py.exp(-x**2) # return the second derivative of f
Modules
The resulting output in the Console window is shown below
>>> import SimpleFunctions
>>> SimpleFunctions.f1(2)
-0.036631277777468357
Function Arguments
Python offers a rich set language features for passing arguments into
Functions. We consider the function f1 (together with a testing script)
FunctionsArguments.py-…
File Edit Format Run Options Windows Help
# Example to illustrate function arguments
def f1(x, a=4, s=‘hello’):
print x, a, s
if __name__==“__main__”:
f1(0.3)
f1(x=0.4)
f1(x=0.5,a=5)
f1(0.5, a=5)
f1(x=0.6,s=“world”)
f1(0.6,s=“world”)
f1(s=“world”,a=7,x=0.7)
Function Arguments
The resulting output in the Console window is shown below
0.3 4 hello
0.4 4 hello
0.5 5 hello
0.5 5 hello
0.6 4 world
0.6 4 world
0.7 7 world
Python Quirks
There are a few Python ‘quirks’ that one must keep in mind
Examples
>>> 5.0/2
2.5
>>> 5/2
2
>>> from __future__ import division
>>> 5/2
2.5
>>> A=array([[2,1],[1,2]]); x=array([1,-1])
>>> b=A*x
>>> b
array([[2,-1],
[1,-2]]]) # the ‘*’operator is interpreted as 𝑏𝑖𝑗 = 𝐴𝑖𝑗 𝑥𝑗
>>> b=dot(A,x)
>>> b
array([1,-1]) # the ‘dot’ operator is interpreted as 𝑏𝑖𝑗 = 𝑗 𝐴𝑖𝑗 𝑥𝑗
Python Class
An important concept “class”, in object oriented languages such Python,
Is a collection of objects and methods that are closely related.
PolynomialClass.py
import pylab as py
class Polynomial:
def __init__ (self,aIn):
self.a=py.array(aIn)
import PolynomialClass
from PolynomialClass import Polynomial
def __str__():
string=str(a[0])
for i, coeff in enumerate(a[1:]):
if coeff == 0.0:
continue
elif (coeff<0):
sign=' - '
else:
sign=' + '
string+=sign+str(abs(coeff))+’*x^’+str(i+1)
return string
def evaluate(x):
#v=a[0]+a[1]*x+a[2]*x**2+...
v,temp=0.0,1.0
for coeff in a:
v+=coeff*temp
temp*=x
return v
if __name__=="__main__":
p=Polynomial([1,-1,2])
a=p.a
print a
st=__str__();
print st
p1=evaluate(2.0)
print p1
SfePy - software for solving PDEs in Python
SfePy is a software for solving systems of
coupled partial differential equations (PDEs) by
the finite element method in 2D and 3D
 SfePy can use many terms to build systems of
partial differential equations (PDEs) to be solved
 SfePy comes with a number of examples that can
get you started
 Sources :http://sfepy.org , http://femhub.org/
http://plateformesnm2p.ensam.eu/SphinxDoc/cnem/index.html

Biot problem - deformable
porous mediumm
With using modules/lib.:
numpy, sfepy
Biot problem - deformable
porous medium with the nopenetration boundary
condition on boundary region
With using modules/libraries:
sfepy.linalg,
sfepy.mechanics.matcoefs
Linear viscoelasticity with pressure
traction load on surface and constrained
to one-dimensional motion.
The fading memory terms require an
unloaded initial configuration, so the
load starts in the second time step.
With using modules/libraries
sfepy.base.base
sfepy.mechanics.matcoefs
sfepy.homogenization.utils
References
 Mark
Lutz & David Ascher, Learning
Python, O’Reilly, 1999 (Help for
Programmers)
 Mark Lutz, Programming Python,
O’Reilly, 2001 (Solutions for Python
Programmers)
 Documentations from internet sources