Introduction to Mathematica

Vito, 30/3/2017

Hidding variables

There are a few constructs to hide the variables in a function and/or avoid propagating local changes to the global namespace. We will see the Module[ ] construct, very akin to functions in C or Fortran. Later we will see how to define another namespace, with the Package construction. We will not discuss  neither Block[ ] nor With[ ], which are complementary to Module[ ], but that happen less often in practice.

Comparing the performance of different location estimators of the mean

x0=20;σ0=3;

u=RandomVariate[NormalDistribution[x0,σ0],100];

{Mean[u],Median[u],(Max[u]+Min[u])/2}

location[x0_,σ0_,n_]:=Module[{u},u=RandomVariate[NormalDistribution[x0,σ0],n];
{Mean[u],StandardDeviation[u],(Max[u]+Min[u])/2}]

v=Table[ location[20,3,10],{1000}];

StandardDeviation[v]

simulation[n_,histories_]:=StandardDeviation[Table[ location[20,3,n],{histories}]]

simulation[10,1000]

low=Table[Flatten[{n,simulation[n,1000]}],{n,2,30}]

ListPlot[{low[[All,{1,2}]] ,low[[All,{1,3}]],low[[All,{1,4}]]}]

ListPlot[Table[low[[All,{1,i}]],{i,2,4}] ]

high=Table[Flatten[{n,simulation[n,1000]}],{n,10,300,10}]

ListPlot[Table[high[[All,{1,i}]],{i,2,4}] ]

Rules

Many functions return their results as Rules. We need to learn to pick the desired answer, using the operator ReplaceAll, /.

solution=Solve[x^4-2x^3-13x^2+14x+24==0,x]

solution[[1]]

x/.solution[[1]]

a=x/.solution[[2]]

v=x/.solution

v[[1]]

Clear[x,x0,ω]

funcRule=DSolve[{x''[t]+ω^2 x[t]==0, x'[0]==0,x[0]==x0},x[t],t,Assumptions->ω>0]

Plot[x[t]/.funcRule/.{x0->10,ω->1/10},{t,0,20}]

func=(x[t]/.funcRule)[[1]]

x[t]/.funcRule[[1]]

Interactive objects

How the normal Limit is approached

d=RandomVariate[ ChiSquareDistribution[5],10]

Mean[d]

Histogram[ Table[ Mean[ RandomVariate[ ChiSquareDistribution[5],10] ],{1000}] ]

Manipulate[ Histogram[ Table[ Mean[ RandomVariate[ ChiSquareDistribution[n],10] ],{1000}] ],{n,1,30,1}]

Manipulate[ Histogram[ Table[ Mean[ RandomVariate[ ChiSquareDistribution[n],m] ],{1000}] ],{n,1,30,1},{m,1,30,1}]

Using Mathematica in place of the tables of t, (χ^2), etc

CDF[StudentTDistribution[ν],x]

CDF[StudentTDistribution[5],1]//N

Table[ CDF[StudentTDistribution[n],1],{n,10}]

Note CDF[StudentTDistribution[n],1] -CDF[StudentTDistribution[n],-1] ==2 CDF[StudentTDistribution[n],1] -1 ONLY because pdf(t) is symmetric around 0

TableForm[ Table[ {n,N[2 CDF[StudentTDistribution[n],1] -1]},{n,10}] ,TableHeadings->{None,{ν,"P(|t|<1)"}}]

TableForm[ Table[ {n,1-N[CDF[ChiSquareDistribution[n],2n] ]},{n,10}] ,TableHeadings->{None,{ν,"P((χ^2)>2ν)"}}]

NSolve[ 1-CDF[ChiSquareDistribution[7],x] ==0.05 , x]

FindRoot[ 1-CDF[ChiSquareDistribution[7],x] ==0.05 , {x,14}]

Table[ {n,FindRoot[ 1-CDF[ChiSquareDistribution[n],x] ==0.05 , {x,2n}]},{n,10}]

tab=Table[ {n,x/.FindRoot[ 1-CDF[ChiSquareDistribution[n],x] ==0.05 , {x,2n}]},{n,10}]

TableForm[tab,TableHeadings->{None,{ν,"(Subscript[((χ^2)), critico]) | P((χ^2)>(Subscript[((χ^2)), critico]))=5%"}}]

Exercício 10

Em uma medição com N dados, todos distribuídos normalmente com média (Subscript[x, 0]) e desvio-padrão (Subscript[σ, 0]) , os níveis de confiança associados aos intervalos 
(OverBar[x]) - (Subscript[σ, m,0]) ≤  (Subscript[x, 0]) ≤ (OverBar[x]) + (Subscript[σ, m,0]) ,      (OverBar[x]) - 2(Subscript[σ, m.0]) ≤  (Subscript[x, 0]) ≤ (OverBar[x]) + 2(Subscript[σ, m.0])      e       (OverBar[x]) - 3 (Subscript[σ, m,0]) ≤  (Subscript[x, 0]) ≤ (OverBar[x]) + 3 (Subscript[σ, m,0]) 
são 68,3%; 95,4% e 99,7%, respectivamente.
Se o desvio-padrão verdadeiro da média é desconhecido e usamos sua estimativa convencional no lugar de (Subscript[σ, m,0]) nos intervalos acima, a fiim de manter esses níveis de confiança usuais precisamos usar intervalos
(OverBar[x]) - (Subscript[t, I]) (Subscript[σ, m]) ≤  (Subscript[x, 0]) ≤ (OverBar[x]) +  (Subscript[t, I]) (Subscript[σ, m]),      (OverBar[x]) - (Subscript[t, II]) (Subscript[σ, m]) ≤  (Subscript[x, 0]) ≤ (OverBar[x]) +  (Subscript[t, II]) (Subscript[σ, m])     e      (OverBar[x]) - (Subscript[t, III]) (Subscript[σ, m]) ≤  (Subscript[x, 0]) ≤ (OverBar[x]) +  (Subscript[t, III]) (Subscript[σ, m])
com valores adequados de (Subscript[t, I]), (Subscript[t, II]) e (Subscript[t, III]), que devem ser obtidos a partir da distribuição de t de Student.
Construa uma tabela de  (Subscript[t, I]), (Subscript[t, II]) e (Subscript[t, III]) para um número de dados 2<N<10 e N=20, 30, 40, ...100 (de 10 em 10). Você pode seguir qualquer caminho que deseje para montar essa tabela, mas se quiser uma receita passo a passo, siga os itens abaixo.
i. Determine os níveis de probabilidade convencionais para m=1,2 e 3 desvios-padrões, usando a CDF[NormalDistribution[ ], m]
ii Escreva uma função que retorna o valor de t’ tal que P(-t’ ≤ t ≤ t’) = p dado a probabilidade p e o número de dados N. Use FindRoot para resolver a equação.
iii. Monte uma tabela de valores críticos para N entre 2 e 10, outra para N entre 20 e 100 de 10 em 10, e junte as tabelas.
iv. Use TableForm para exibir a tabela, usando como legendas das linhas os valores de N, obtidos com a função Range[ ].