Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Document Analysis: Exploration of Mathematica 6 Prof. Rolf Ingold, University of Fribourg Master course, spring semester 2008 Prénom Nom Outline Basics of Mathematica Numerical and symbolic computation List manipulation Variable and functions Transformation rules and patterns Graphics Functional and imperative programming 2 © Prof. Rolf Ingold Mathematica Basics Mathematica runs two process a front end displaying editable notebooks a back end running the kernel for computation Notebooks and the kernel communicate by exchanging expressions input expressions are written in the Mathematica language output expressions (returned by the kernel) are displayed in an appropriate form © Prof. Rolf Ingold Mathematica expressions In Mathematica everything, i.e. data, programs, formulas, graphics, documents are represented as symbolic expressions All expressions have a standard form f[a,b,…] reflecting the internal structure, where f is the head a,b are the arguments The Mathematica language allows richer expressions FullForm[1+x^2+(y+z)^2] Plus[1,Power[x,2],Power[Plus[y,z],2]] © Prof. Rolf Ingold Predefined functions Mathematica offers more than 2'200 predefined functions in Numerical computation evaluation on integer, rational, real, complex numbers, vectors and matrices equation solving numerical calculus Symbolic computation calculus (integral and differential) polynomial and other algebras discrete mathematics Data manipulation (list manipulation, combinatory, statistics, ...) Visualization and graphics (with interactive control) Programming (functional and imperative style) Access to external resources (files, databases, libraries) Various specialized add-ons are available © Prof. Rolf Ingold Numerical computation Mathematica provides exact calculation whenever possible (typically on integer and rational numbers) 2^100 1267650600228229401496703205376 12/234+56/789 418/3419 Mathematica allows the evaluation of numerical expressions with arbitrary precision N[Sqrt[2],30] 1.41421356237309504880168872421 N[12/234+56/789,40] 0.1222579701667154138637028370868675051185 Additionally, Mathematica is able to control accuracy © Prof. Rolf Ingold Symbolic computation Mathematica offers many functions to perform symbolic computation formula manipulation Simplify[(x^2-1)/(x-1)] 1 + x equation solving Solve[x^2-(1+a)*x+a==0,x] {{x -> 1}, {x -> a}} calculus D[Sin[x]^2,x] 2 Cos[x] Sin[x] Integrate[6*x^2,x] 2 x^3 © Prof. Rolf Ingold List manipulation In Mathematica lists are used to represent collections, arrays, sets, vectors and matrices, etc. lists are represented by {a,b,…} or {{a,b},{c,d},…} elements are extracted using the Part operator : lst[[i]] Many functions are "listable", that is are applicable on each element 2*{3,5,x} {6, 10, 2 x} {2,4,x}*{3,5,x} {6, 20, x^2} There are hundreds of other functions generating lists: Range, Array, Table, Join, Take, Drop, Select, Map, etc. © Prof. Rolf Ingold Iterative function The function Table[expr,iter1,…] generates a list by applying one or several iterators iter1, … over the expression expr Table[i^2,{i,10}] {1, 4, 9, 16, 25, 36, 49, 64, 81, 100} Iterators have one of the following forms {max} iterates max times {var,max} iterates with var running from 1 to max {var,min,max} with var running from min to max {var,min,max,step} with var running from min to max by step © Prof. Rolf Ingold Use of variables In Mathematica any expression may be assigned to variable an assignment has the form var=expr then, in subsequent expressions each occurence of var will be replaced by expr x=a+b+c; 2x 2 (a + b + c) a variable is unset (removed) by var=. , Unset[var], or Clear[var] © Prof. Rolf Ingold Definition of functions In Mathematica new functions may be defined a function definition has the form f[x_]:=expr in subsequent expressions f[a] will result in the evaluation of expr by substituting x by a x = a + b + c; f[x_] := x^2; f[{12, a, x}] {144, a^2, (a + b + c)^2} © Prof. Rolf Ingold Immediate and delayed assignments There are two different ways to make assignments in Mathematica lhs=rhs is said immediate assignment because rhs is evaluated when the assignment is made lhs:=rhs is said delayed assignment because rhs is evaluated each time the value of rhs is requested By default, assignments are defining global variables name conflicts are often sources of errors ! By convention user defined variables and functions should start with a lowercase letter © Prof. Rolf Ingold Transformation rules An interesting programming paradigm of Matematica is the concept of transformation rules a transformation rule is written lhs->rhs transformations are obtained by applying rules to expressions using expr/.rule or expr/.{rule,…} {x,x^2,y}/.x->a {a, a^2, y} x+y/.{{x->1,y->2},{x->4,y->2}} {3, 6} f[1]+f[2]+f[4]/.{f[x_]->x^2} {a, a^2, y} Rules are used to define options © Prof. Rolf Ingold Patterns Mathematica defines a pattern language to describe classes of expressions Patterns are used to restrict the functions and rules _ represents any expression x_ (or x:_) represents any expression and is referred to as x x_h (or x:_h) represents an expression (referred to as x) with head h Patterns can be composed recursively and include constraints _[_:List] represents any function having a list as argument _[x_,x_] represents any function having twice the same argument Additionally patterns can be restricted by tests (pat?test) or by conditions (pat/;cond) x_?NumberQ x_/;x<0 © Prof. Rolf Ingold Graphics In Mathematica graphics are generated by expressions ListPlot[ Table[ {k,PDF[BinomialDistribution[50,p],k]}, {p,{0.3,0.5,0.8}}, {k,0,50}], Filling->Axis] © Prof. Rolf Ingold Functional programming Several predefined functions are useful for functional programming Apply[f,expr] replaces the head of expr by f and evaluates it Map[f,list] applies the function f to each element of list Nest[f,expr,n] gives an expression with f applied n times to expr NestList[f,expr,n] does the same but returns the list of all intermediate results Mathematica can handle pure functions, without explicit names they are written body& in which #1, #2, ... represent the arguments (or # for a single argument) Map[(2^#)&,Range[10]] {2, 4, 8, 16, 32, 64, 128, 256, 512, 1024} © Prof. Rolf Ingold Imperative programming Mathematica provides classical control structures expressed with a functional syntax If[condition,ifTrue] If[condition,ifTrue,ifFalse] Which[test1,value1,test2,value2,…] Switch[expr,form1,value1,form2,value2,…] While[test,body] Do[expr,iter1,…] For[start,test,incr,body] Mathematica provides also block structures to control the scope of symbols Module[{x,y,…},expr] with lexical scoping Block[{x,y,…},expr] with dynamic scoping © Prof. Rolf Ingold