Notebook 16
Gaussiana, lorentziana, classes

Este script implementa uma classe para lidar com funções gaussianas de amplitude máxima $A$, média $x_0$ e desvio padrão $\sigma$:

\begin{equation} g(x) = A e^{-\frac{(x-x_0)^2}{2\sigma^2}} \end{equation}

Classes contêm propriedades e métodos que vão ser "agregados" aos objetos instanciados a partir delas, o que as deixam muito mais genéricas, reaproveitáveis e úteis do que uma simples função. Vale a pena estudar um pouco o assunto!

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

Exercícios

  1. 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$).
  2. 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
  3. 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$.
  4. 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
  5. 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.
  6. G $A$ $x_0$ $\sigma$
    110,02,01,0
    28,05,01,5
    37,08,00,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
  7. 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
  8. Utilize a classe implementada no item anterior para calcular o "espectro" com os dados da tabela utilizada para a função gaussiana.
  9. 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