Introduction to Mathematica
Download
Report
Transcript Introduction to Mathematica
Introduction to Mathematica
Scientific Computing and Visualization
Boston University
Katia Oleinik
[email protected]
Getting Started
Notebook and Text-Based Interfaces
To start Mathematica on SCC cluster, type mathematica (or Mathematica) at the prompt:
% mathematica
To start Mathematica Kernel ( text-base interface), type math at the prompt:
% math
Getting Started
Notebook and Text-Based Interfaces
To start Mathematica on Windows:
Start -> Wolfram Mathematica -> Wolfram Mathematica 9
To start Mathematica Kernel ( text-base interface) on Windows:
Start -> Wolfram Mathematica -> Wolfram Mathematica 9 Kernel
Getting Started
Notebook and Text-Based Interfaces
Notebook Interface
Text-Based Interface
Start
mathematica
math
Execute command
Shift-Enter
Enter
Exit
Choose the Quit menu item
Cntr-D or Quit[]
Numerical Calculations
21.7 + 19.94
Press Shift + Enter
In[1] := 21.7 + 19.94
Out[1] := 41.64
Numerical Calculations
x+y+z
x y z
or
add
x-y
subtract
x/y
divide
x*y*z
x^y
x*(y+z)
multiply
power
control grouping by parentheses
Note: You can use space or a * sign for multiplication
Numerical Calculations
You get exact result with Mathematica unless you request otherwise.
In[1] := 2 ^ 100
(* get exact result *)
Out[1] := 1267650600228229401496703205376
In[2] := 2 ^ 100 //N
Out[2] := 1.26765x1030
(* get approximation *)
In[3] := 1/3 + 2/7 (* get exact result *)
Out[3] :=
13
21
In[4] := 1/3 + 2/7 //N
Out[4] := 0.619048
(* get approximation *)
Numerical Calculations
If an input number contains an explicit decimal point, Mathematica produces an
approximate numerical result.
In[5] := 11/3 + 2/7 (* exact result *)
Out[5] :=
83
21
In[6] := 1.1/3 + 2/7 (* approximation *)
Out[6] := 0.652381
Numerical Calculations
Common Mathematical Functions
Sqrt[x]
𝑥
Exp[x]
ex
Log[x]
ln x
Log[b,x]
Sin[x], Cos[x], Tan[x]
ArcSin[x], ...
n!
FactorInteger[n]
Abs[x]
Round[x]
Max[x,y,...], Min[x,y,...]
logb x
trigonometric functions
inverse trigonometric functions
factorial
prime factors of n
|x|
closest integer to x
maximum and minimum of a set
Mod[n,m]
remainder of division of n by m
Random[]
random number between 0 and 1
Numerical Calculations
Functions in Mathematica
•
The arguments of ALL Mathematica functions are enclosed in square brackets;
•
The names of built-in Mathematica functions begin with capital letters;
•
Unless //N option or decimal point is present, Mathematica tries to output exact
value
Numerical Calculations
Common Mathematical Constants
Pi
π
E
e
Degree
I
Infinity
π/180
i = −1
∞
The names of all built-in constants begin with capital letters.
Numerical Calculations
Specify the degree of precision
In[1] := N[Pi, 30] (* approximation *)
Out[1] := 3.14159265358979323846264338328
In[2] := N[Sqrt[7], 10]
Out[2] := 2.645751311
Numerical Calculations
Using Previous Results - use with care!
•
%
•
%% the next-to-last result
•
%n the result on output line Out[n]
the last result generated
In[1] := 7 + 3
Out[1] := 10
In[2] := % + 1
Out[2] := 11
Note: % is always defined to be the last result that Mathematica generated. It can be
anywhere in the script!
Numerical Calculations
Variables definition
x = value
x = y = value
x = .
or
Clear[x]
assign a value to the variable x
assign a value to both x and y
remove any value assigned to x
Notes:
• Mathematica is case-sensitive;
• To avoid confusion with built-in functions, choose names that start with lower-case
letters;
• x y means x times y;
• xy with no space means variable name xy;
• 5x means 5 times x;
Numerical Calculations
Lists of Objects
List is a collection of several objects in Mathematica
In[1] := vec = {2, 4, 1.8}
Out[1] := {2, 4, 1.8}
In[2] := vec^2
Out[2] := {4, 16, 3.24}
In[3] := vec/(vec-1)
Out[3] := {1,
4
,
3
2.25}
In[4] := vec[[2]]
Out[4] := 4
(* extract second element *)
In[5] := Part[vec,1]
Out[5] := 2
(* extract first element *)
Graphics
Partial list of Mathematica’s graphs
•
Graphics, Graphics3D
•
Plot, Plot3D
•
ListPlot, ListLinePlot, ListContourPlot, ListPlot3D
•
ListLogPlot, ListPolarPlot, ListSurfacePlot3D, ListContourPlot3D
•
PrarametricPlot, PolarPlot, RevolutionPlot3D, SphericalPlot3D,
•
DensityPlot, ReliefPlot
•
GraphPlot, ArrayPlot
•
RegionPlot, ContourPlot, RegionPlot3D
Graphics
Partial List of Graphics Options
option name
default value
AspectRatio
1/GoldenRatio the height-to-width ratio for the plot;
Axes
True
whether to include axes
AxesLabel
None
labels to be put on the axes
Frame
False
draw a frame around the plot
GridLines
None
what grid lines to include
PlotLabel
None
an expression to be printed as a label for the plot
PlotRange
Automatic
the range of coordinates to include in the plot
Ticks
Automatic
what tick marks to draw if there are axes
Graphics
Basic Features for Visualization Functions
Feature Classes:
• Styles
• Colors, thickness, pointsize, opacity, …
• Element appearance and shape
• Labels
• Textual labels and tooltips
• Legends
• Interactions
• Built-in highlighting effects
• Use elements for buttons, popup windows and other events
• Metadata
• Wrapper used to include additional information
• ChartElementFunction[] for custom appearances
Graphics
Feature Scope
Options:
• Specified globally and uniformly
• Examples: ChartStyle, CHartLabels, LabelingFunction, Background
Wrappers:
•
Wrapped directly around data
•
Can be used at any level, allows for targeted use
•
Can be nested
•
Examples: Tooltip, Style, Button, Labeled
Data Visualization
Basic Statistics Plots
Bar Chart, PieChart, BubbleChart
Histogram, SmoothHistogram, Density Histogram, Histogram3D
QuantilePlot,
ProbabilityPlot, ProbabilityScalePlot
BoxWhiskerChart,
DistributionChart
Functions
Function Definition
Use underscore _ after a variable name (function argument)
f([x_] := x^2 + 4 x + 4
To execute a function, simply call it with a given value:
f[1]
Mathematica’s built-in functions start with upper-case letter. Start with lower case letter for
the user defined function.
Functions
Using Functions
Show function definition:
?f
Expend function:
Expand[f[x + y + 1]]
Find derivative of a function:
D[f[x], x]
Find integral of a function:
Integrate[f[x] ,x]
Find definite integral of a function:
Integrate[f[x] ,{x,0,1}]
Clear the definition of a function:
Clear[f]
Equations
Solving equations
Define equation using double equal sign ==
Solve[4 x^2 + 4 x + 1 == 0]
Mathematica can solve an equation for one variable in terms of another
Solve[5 x^2 -2 Log[y] == 3 x,y]
Solve system of equations:
Solve[{x + 2 y == 5, 7 x – 5 x == -3},{x,y}]
Equations
Solving equations
Mathematica can solve algebraic equations in one variable for power less than 5 and
sometimes even higher. But there are some equations for which it is impossible to find the
root(s) algebraically. Mathematica will use Root object to represent the solution. Use N[%]
to evaluate the solution numerically.
In some cases Mathematica can solve equations involving other functions:
In[1] := Solve[Sin[x] == a, x]
Out[1] := {{ x -> ArcSin[a]}}
Equations
Solving equations
You can also find an approximate numerical solution using FindRoot[]:
In[1] := FindRoot[Cos[x] == x, {x,0}]
Out[1] := { x -> 0.739085}
Mathematica can solve system of simultaneous equations.
It can eliminate a variable in a system, using Eliminate[] function, or
simplify the system using Reduce[] function.
Programs
Programming Constructs
Assignments:
=
+=
++
Loops:
Do While For Table Nest
Conditionals:
If Which Switch And(&&) Equal(==) Less(<) …
Flow Control:
Return Throw Catch TimeConstrained
Scope Constructs:
Module
I/O:
Print
With
Input
*=
AppendTo
Block
Pause
Import
OpenRead
…
Code Optimization
How to speedup Mathematica code
Use Timing and AbsoluteTiming commands to measure the time of execution:
In[1] := Module[{x = 1/Pi},
Do[x = 3.5 x (1 - x),
{10^6}]; x] //AbsoluteTiming
Code Optimization
How to speedup Mathematica code
1. Use floating point approximation if you can and as early in the
code as possible
2. Compile Functions
3. Use parallelization options if possible
4. Use built-in functions
5. Use CudaLink if possible
HPC: Vectorization
Automatic parallelization
Making a Compiled Function run in parallel is simple - the user only has to pass the
option RuntimeAttributes->"Listable". From there, Compile will run in as
many threads as there are on the system.
raySpheresIntersectionColor =
Compile[ . . . , CompilationTarget -> "C",
RuntimeAttributes -> Listable];
rayTraceCompile[ . . . , raySpheresIntersectionColor[] ];
width = height = 300;
. . .
imgc = rayTraceCompile[centers, radii, colors, x, y];
Image[imgc]
HPC: GPU Programming
CUDA and OpenCL
•
Programming languages/environments that allow to write to program GPU to
perform general computations.
•
CUDA works only on NVIDIA hardware and is proprietary
•
OpenCL works on AMD and NVIDIA hardware and is an open standard
HPC: GPU Programming
Why GPU
Speed!
Modern GPUs are capable to perform 3 TFlops/sec, while high end CPUs – 80GFlops/sec
Fastest supercomputer at the end on 90s, clocked 1TFlop/sec and now you can buy GPU
with the same speed for less than $500.
Speed comes from the hardware design.
HPC: GPU Programming
CUDALink
A way to use the Graphical Processing Unit (GPU) from within Mathematica integrating
with the user’s workflow
A way to load GPU programs into Mathematica and use them as functions
It is NOT an attempt to make all Mathematica functions utilize the GPU
It is NOT meant to automatically speed up Mathematica code
Require :
1. NVIDIA hardware
2. Recent video card driver
3. Supported C – compiler
HPC: GPU Programming
CUDALink
CUDALink contains many built-in function for performing linear algebra, list and image
processing, and Fourier analysis.
In[1] := Needs["CUDALink`"] (* Load CUDALink *)
In[2] := CUDAQ[] (* Check if system compatible with CUDA *)
Out[2] := TRUE
In[3] := CUDAInformation[] (* Get information about detected GPU *)
Out[3] := {1 -> {"Name" -> "Tesla M2070", "Clock Rate" -> 1147000,
"Compute Capabilities" -> 2., "GPU Overlap" -> 1,
"Maximum Block Dimensions" -> {1024, 1024, 64},
"Maximum Grid Dimensions" -> {65535, 65535, 65535},
HPC: GPU Programming
CUDALink
Once CUDALink is loaded built-in functions can be used:
In[1] := m1 = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}}
In[2] := m2 = {{0, 1, 0}, {1, 1, 1}, {0, 1, 0}}
In[3] := CUDADot[m1,m2] (* Multiply matricies*)
Out[2] := {{1, 3, 1}, {2, 6, 2}, {3, 9, 3}}
HPC: GPU Programming
CUDALink
Image Processing
In[1] := swan = Import["swan.JPG"]
Out[1] :=
In[2] := CUDAImageConvolve[swan, GaussianMatrix[16]] (* Convolution *)
Out[2] :=
This tutorial has been made possible by
Scientific Computing and Visualization
group
at Boston University.
Katia Oleinik
[email protected]
http://www.bu.edu/tech/research/training/tutorials/list/