Useful functions and procedural instructions

Functions for selecting and locating

testList ={ 1, 2.0, "a", 2,Pi}

Cases is mostly used in lists read from files, since it allows to select data types

Cases[testList, _Integer] (* note the Blank, which means anything, but, when followed by a data type, requires that the thing must match the type *)

Cases[testList, _String]

Cases[testList, _Real]

Cases[testList, _Symbol]

%//N

SortBy[ ] allows defining the sorting function

testList=RandomVariate[NormalDistribution[10,4],10]

Sort[testList]

SortBy[testList, FractionalPart[#]&]

Select gives the values, but not the positions

u=Select[testList, 10<#<12&]

If Position returns a void list, { }, either change the range 10<#<12 or repeat the sort.

Position[testList,u[[1]] ] (* the 2nd argument is a number, not a list, then the [[1]] is required *)

Map

Most functions are Listable - they are automatically applied to lists, giving a list

f[x_]:=x^2

f[testList]

r[x_,s_]:=RandomVariate[ NormalDistribution[x,s]]

r[20,1.0]

r[20,{1.0,1.5}] (* this does not work *)

Map[ ] applies the function, which is the first argument, to each element of the second argument

Map[r[20,#]&,{1.0,1.5}]

Map is normally used with runes - /@ is the corresponding rune, and is an infix operator (it comes between the pure function and the list).
This becomes natural with practice.

r[20,#]&/@{1.0,1.5}

It is possible to retrieve the list of selected positions with Map

v=Select[testList, 9<#<16&]

Position[testList,v [[2]]]

Position[testList, v[[#]]]&/@Range[Length[v]]  (* too many {{{, likely you will Flatten the result *)

Displaying many graphics

g1=Histogram[RandomVariate[NormalDistribution[],1000]]

g2=Histogram[RandomVariate[CauchyDistribution[],1000]]

GraphicsRow[{g1,g2}]

GraphicsColumn[{g1,g2}]

g3=Plot[Table[PDF[StableDistribution[0,α,1/2,0,2],x],{α,{1/2,1,2}}]//Evaluate,{x,-6,6},Filling->Axis]

g4=Plot[Table[PDF[StableDistribution[0,α,1/2,0,2],x],{α,{1/2,1,2}}]//Evaluate,{x,-6,6},Filling->Axis]

GraphicsGrid[{{g1,g2},{g3,g4}}] (* This is the instruction used to prepare a slide show with mathematica *)

Procedural Commands

Print["anything ",v] (* can be used inside large functions to provide clues about what is happening *)

% (* it does not return anything, just outputs to the notebook *)

Do[ ] works as expected, but it takes too long

list={}

Do[AppendTo[list,i+I j],{i,1,3},{j,0,2,0.5}] (* Table will do much better and AppendTo is slow *)

list

For[i=1,i < 4, i++, AppendTo[list2,i] ] is similar, but not identical, to most languages

list2={}

For[i=1,i<4,i++,AppendTo[list2,i]] (* the previous instruction requires two nested For[ ]s *)

list2

If[ ] is different: it has branches for True, False, and Indeterminate

a=2

b=3

If[a==b,Print[True],Print[ False],Print[Indeterminate] ]

b=2

If[a==b,Print[True],Print[ False],Print[Indeterminate] ]

b=anything

If[a==b,Print[True],Print[ False],Print[Indeterminate] ]

Exercício - Propagar incerteza por simulação

6) Propagar incerteza por simulação
Desenvolver um método de propagar incerteza de uma variável aleatória para uma função dessa variável, baseado em simulação. Investigar o comportamento do algoritmo com funções suaves e com a função exponencial.
i.	Defina uma função da variável x, por exemplo f(x) = sen(5x)
ii.	Simule uma medida de x com 10 dados, {x}, com média e desvio-padrão x0 e s0 a sua escolha.
iii.	Defina duas variáveis xm e sm que correspondam à média e ao desvio-padrão da média dessa medida.
iv.	Construa um grande conjunto de valores aleatórios, {z}, de média xm e desvio-padrão sm.
v.	Determine o conjunto dos valores calculados de f(zi).
vi.	Determine a média e o desvio-padrão dos valores do conjunto do item anterior.
vii.	Compare o resultado obtido por simulação com aquele obtido com a fórmula analítica aproximada de propagação de incerteza.
viii.	Prepare uma função que reúna os itens ii a vi e tenha como parâmetros o nome da função f e os valores x0 e s0.
ix.	Teste a função com as escolhas dos itens i e ii. Explique porque os valores obtidos variam a cada repetição do cálculo e se essa variação está de acordo com o que lidamos na prática.
x.	Aplique sua função nos casos:
a)	s(x) = π  (x^2), com x0 = 10.0 e σ0 = 1.0
b)	g(x) = exp( - 5 t ) com t0 = 2,110 e s0 = 0,012
c)	h(x) = exp( -5 t ) com t0 = 2,11 e s0 = 0,12
Nesses casos, compare os resultados de simulação com aqueles da fórmula analítica.