Depois da definição da classe são apresentados alguns exemplos do seu uso. Note ainda a adição do método toFizedSize(n,m)
ao objeto global Number
.
Console:
Gaussian(10,0,1):
0.00 0.00 0.11 1.35 6.07 10.00 6.07 1.35 0.11 0.00
Gaussian(5,-1,2):
0.68 1.62 3.03 4.41 5.00 4.41 3.03 1.62 0.68 0.22
Gaussian(-1,2,0.5):
-0.00 -0.00 -0.00 -0.00 -0.00 -0.00 -0.14 -1.00 -0.14 -0.00
Áreas (integrais):
g1.area(): 25.06626806631078
g1.area(0): 12.783133217418596
g2.area(): 7.933187607316666
g2.area(-1,1): 8.57586684154573
g2.area(-1,1,3): 9.155656239411911
Funções estáticas:
A=10, x0=0, s=1, x=-1: 6.065306597126334
A=5, x0=-1, s=2, x=-1: 5
A=-1, x0=2, s=0.5, x=-1: -1.522997974471263e-8
-
Implemente na classe um método não estático
from(y)
que receba o valor de $y = g(x)$ e retorne uma matriz com os dois valores de $x$ correspondentes (no caso de $x = x_0$, os dois valores devem ser $x_0$).
g1 = new Gaussian(10,0,1):
g1.from(10):
0,0
g1.from(5):
-1.1774100225154747,1.1774100225154747
g2 = new Gaussian(5,-1,2):
g2.from(5):
-1,-1
g2.from(2.5):
-3.3548200450309493,1.3548200450309493
-
Implemente na classe um método estático
calcX(y)
que receba os valores de $A$, $x_0$, $s$ e $y = g(x)$ e retorne uma matriz com os dois valores de $x$ correspondentes (no caso de $x = x_0$, os dois valores devem ser $x_0$.
Gaussian.calcX(10,0,1,10):
0,0
Gaussian.calcX(10,0,1,5):
-1.1774100225154747,1.1774100225154747
Gaussian.calcX(5,-1,2,5):
-1,-1
Gaussian.calcX(5,-1,2,2.5):
-3.3548200450309493,1.3548200450309493
-
Faça um programa que utilize a classe para produzir um "espectro" que resulte da combinação (soma) de 3 gaussianas com os parâmetros da tabela que segue e mostre o seu valor para $x$ entre 0 e 10 em passos de 0,5.
G |
$A$ |
$x_0$ |
$\sigma$ |
1 | 10,0 | 2,0 | 1,0 |
2 | 8,0 | 5,0 | 1,5 |
3 | 7,0 | 8,0 | 0,5 |
0.0: 1.38
0.5: 3.34
1.0: 6.29
1.5: 9.35
2.0: 11.08
2.5: 10.82
3.0: 9.35
3.5: 8.10
4.0: 7.76
4.5: 8.01
5.0: 8.11
5.5: 7.59
6.0: 6.41
6.5: 4.93
7.0: 4.24
7.5: 6.24
8.0: 8.08
8.5: 4.77
9.0: 1.18
9.5: 0.17
10.0: 0.03
-
Implemente uma classe
Lorentzian
semelhante à classe Gaussian
para a lorentziana (ou função de Cauchy-Lorentz ou de Breit-Wigner), que tem um papel importante em espectroscopia:
\begin{equation}
f(x) = A \left[ \frac{\gamma^2}{(x - x_0)^2 + \gamma^2} \right]
\end{equation}
Na Lorentziana o parâmetro $x_0$ é chamado de parâmetro de localização e $\gamma$ o parâmetro de escala, que é igual à metade da largura à meia altura da distribuição, que é mais ou menos o papel de $\sigma$ na função gaussiana (em inglês esse parâmetro é conhecido como HWHM, de half width half maximum). Para $A = 1/(\pi\gamma)$ a integral da função entre $-\infty$ e $+\infty$ é 1 e ela funciona como uma distribuição de probabilidade.
x:
-5.00 -4.00 -3.00 -2.00 -1.00 0.00 1.00 2.00 3.00 4.00 5.00
l1 = new Lorentzian(10,0,1):
0.38 0.59 1.00 2.00 5.00 10.00 5.00 2.00 1.00 0.59 0.38
l2 = new Lorentzian(5,-1,2):
1.00 1.54 2.50 4.00 5.00 4.00 2.50 1.54 1.00 0.69 0.50
l3 = new Lorentzian(-1,2,0.5):
-0.01 -0.01 -0.01 -0.02 -0.03 -0.06 -0.20 -1.00 -0.20 -0.06 -0.03
Áreas (integrais):
l1.area(): 27.467768808079054
l1.area(0): 13.974361466841378
l2.area(): 27.467768808079054
l2.area(-1,1): 7.878939967307824
l2.area(-1,1,3): 8.64102564102564
Cálculo de x a partir de y:
l1 = new Lorentzian(10,0,1):
l1.from(10):
0,0
l1.from(5):
-1,1
l2 = new Lorentzian(5,-1,2):
l2.from(5):
-1,-1
l2.from(2.5):
-3,1
Funções estáticas:
Lorentzian.calcY(10,0,1,-1):
5
Lorentzian.calcY(5,-1,2,-1):
-0.02702702702702703
Lorentzian.calcX(10,0,1,10):
0,0
Lorentzian.calcX(10,0,1,5):
-1,1
Lorentzian.calcX(5,-1,2,5):
-1,-1
Lorentzian.calcX(5,-1,2,2.5):
-3,1
-
Utilize a classe implementada no item anterior para calcular o "espectro" com os dados da tabela utilizada para a função gaussiana.
0.0: 2.69
0.5: 3.91
1.0: 6.02
1.5: 9.28
2.0: 11.65
2.5: 10.18
3.0: 7.95
3.5: 7.16
4.0: 7.65
4.5: 8.72
5.0: 9.19
5.5: 8.22
6.0: 6.54
6.5: 5.17
7.0: 4.66
7.5: 5.94
8.0: 8.87
8.5: 4.97
9.0: 2.59
9.5: 1.67
10.0: 1.23