{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "#**Química Computacional - Aula Prática 4**\n", "\n", "**O método variacional**\n", "\n", "\\\\\n", "\n", "---\n", "Bibliografia de Suporte:\n", "\n", "Attila Szabo and Neil S. Ostlund, Modern Quantum Chemistry: Introduction to Advanced Electronic Structure Theory, Dover Publications Inc., New York, 1996, **Capítulo 1, Secção 1.3**\n", "\n", "---\n", "\n", "\\\\\n", "\n", "**1. O método variacional**\n", "\n", "Verificámos na aula teórica que a equação de Schrödinger (em u.a.) de um electrão movendo-se **numa dimensão** sob a influência do potential, $-\\delta(x)$ é dada por\n", "\n", "$(-\\frac{1}{2}\\frac{d}{dx²}-\\delta(x))\\left|{ϕ_T}\\right\\rangle = \\mathcal{E}\\left|{ϕ_T}\\right\\rangle$\n", "\n", "verificámos também que $\\left|{ϕ_T}\\right\\rangle = Ne^{-\\alpha x^{2}}$ pode ser usada função de onda teste.\n", "\n", "**Exercício 1**\n", "\n", "Verifique que $\\left|{ϕ_T}\\right\\rangle$ é normalizada se $N = \\pm (\\frac{2\\alpha}{π})^{1/4}$\n", "\n", "Vai necessitar do integral\n", "\n", "$\\int_{-\\infty}^{\\infty} x^{2m} e^{-\\alpha x^2} \\,dx = \\frac{(2m)! \\, \\pi^{1/2}}{2^{2m} \\, m! \\, \\alpha^{m+1/2}}$\n", "\n", "**Exercício 2**\n", "\n", "Faça uma representação gráfica de $\\left|{ϕ_T}\\right\\rangle$ em função de $x$. Considere inicialmente o valor de $\\alpha$ = 1.\n", "\n", "Nota1: para representar funções, entre várias bibliotecas, podemos usar a biblioteca Matplotlib. Para importar esta biblioteca fazemos `import matplotlib.pyplot as plt`\n", "\n", "Nota2: A sintaxe básica para representar uma função é a seguinte:\n", "\n", "```\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "# Cria um conjunto de 100 valores de x de 0 a 10 (podemos definir o intervalo)\n", "x = np.linspace(0, 10, 100)\n", "\n", "# definir a função\n", "f = 2*x**2 + 3\n", "\n", "# Representar a função f em ordem a x\n", "plt.plot(x, f)\n", "# Colocar uma legenda\n", "plt.legend(['função f'])\n", "# Legendar o eixo dos xx\n", "plt.xlabel('x')\n", "# Legendar o eixo dos yy\n", "plt.ylabel('a minha funçãof(x)')\n", "# Limites do eixo dos xxx\n", "plt.xlim(0, 10)\n", "# mostrar o gráfico\n", "plt.show()\n", "```\n", "\n", "Nota3: a constante $\\pi$ está definida na biblioteca Numpy através de `np.pi`\n", "\n", "Nota4: a função exponencial $e^x$ está definida na biblioteca Numpy através de `np.exp(x)`" ], "metadata": { "id": "KqADZfYeHzHd" } }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n" ], "metadata": { "id": "rCW6VLw-D9E3" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Exercício 3**\n", "\n", "Verificámos também que o valor esperado da energia era dado por\n", "\n", "$\\left\\langle {ϕ_T}\\right| \\mathcal{H}\\left|{ϕ_T}\\right\\rangle = E_0 = \\frac{\\alpha}{2}- (\\frac{\\pi}{2\\alpha})^{-\\frac{1}{2}} \\geq \\mathcal{E}_0$\n", "\n", "Encontre o valor mínimo da energia $E_0$\n", "\n", "Nota1: podemos obter o minimo de uma função calculado $\\frac{dE_0}{d\\alpha} = 0$ e $\\frac{d^2E_0}{d\\alpha^2}$. Se $\\frac{dE_0}{d\\alpha}$ existir e $\\frac{d^2E_0}{d\\alpha^2} > 0$, a função tem um mínimo.\n", "\n", "**Exercício 4**\n", "\n", "Nem sempre temos a facilidade de conseguir explicitamente diferenciar o valor da energia em função do parâmetro variacional. Contudo, existem métodos numéricos que que nos permitem tentar encontrar o mínimo de funções. Alguns desses métodos encontram-se implementados na função `minimize` da biblioteca Scipy. A sintaxe mínima é a seguinte:\n", "\n", "```\n", "import numpy as np\n", "from scipy.optimize import minimize\n", "\n", "# Define a função a minimizar usando o parâmetro x\n", "def min(x):\n", " # Função\n", " E = x*2 + 7/x\n", " # Imprime o valor de x e da função a cada ciclo\n", " print(\"x = {:.6f}, E = {:.16f}\".format(x[0], E[0]))\n", " # devolve o valor de E\n", " return E\n", "\n", "# Estimativa inicial de x\n", "x = 1\n", "\n", "# podemos definir limites e.g. x pode apenas variar entre [0, ∞)\n", "bounds = [(0, None)]\n", "\n", "# Optimiza a função min variando o parâmetro x com uma tolerância de 1e-6\n", "E_min = minimize(min, x, bounds=bounds, tol=1e-6)\n", "```\n", "\n", "Calcule o valor de $\\alpha$ para o qual a energia $E_0$ é minima escrevendo um programa em python." ], "metadata": { "id": "7tBy_ns4snKN" } }, { "cell_type": "code", "source": [ "import numpy as np\n", "from scipy.optimize import minimize\n" ], "metadata": { "id": "6GqipPHh3zXx" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Exercício 5**\n", "\n", "Considere agora a função teste $\\left|{ϕ_T}\\right\\rangle = Ne^{-\\alpha x}$. Faça uma representação gráfica de $\\left|{ϕ_T}\\right\\rangle$ em função de $x$. Considere inicialmente o valor de $\\alpha$ = 1." ], "metadata": { "id": "GpkOwOk8bB7z" } }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n" ], "metadata": { "id": "pVEiATD0LOTX" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Exercício 6**\n", "\n", "Para o átomo de hidrogénio, o operador hamiltoneano $H$ (em unidades atómicas) é dado por\n", "\n", "$$\n", "H = -\\overbrace{\\frac{1}{2}\\nabla^2}^{T} - \\overbrace{\\frac{1}{r}}^{V}\n", "$$\n", "\n", "Usando uma função teste $\\left|{ϕ_T}\\right\\rangle = Ne^{-\\alpha x}$, é possível demonstrar que o valor esperado da energia $E_0$ é dado por\n", "\n", "$$\n", "E_0 = \\frac{\\alpha^2}{2}-\\alpha\n", "$$\n", "\n", "Calcule o valor mínimo e $E_0$\n", "\n", "**Exercício 7**\n", "\n", "Calcule o valor de $\\alpha$ para o qual a energia $E_0$ é minima escrevendo um programa em python. Compare o valor com a energia exacta para o átomo de hidrogénio (-0.5 Hartree)" ], "metadata": { "id": "2S6f7n_2MAeU" } }, { "cell_type": "code", "source": [ "import numpy as np\n", "from scipy.optimize import minimize" ], "metadata": { "id": "vYDlnJsPQWme" }, "execution_count": null, "outputs": [] } ] }