如何在 python 上解决 TISE 的简单边值问题

2024-01-19

我正在尝试求解无限势阱的 TISEV=0在间隔上[0,L]。这个练习给我们提供了波函数及其导数的值0 is 0,1分别。这使我们能够使用scipy.integrate.odeint函数来解决给定能量值的问题。

现在的任务是在给定波函数的进一步边界条件下找到能量特征值L is 0,使用 python 上的求根函数。我做了一些研究,只能找到一种叫做“拍摄方法”的东西,但我不知道如何实施。另外,我遇​​到了求解 BVP scipy 函数,但是我似乎无法理解该函数的第二个输入到底是什么(边界条件残差)

m_el   = 9.1094e-31      # mass of electron in [kg]
hbar   = 1.0546e-34      # Planck's constant over 2 pi [Js]
e_el   = 1.6022e-19      # electron charge in [C]
L_bohr = 5.2918e-11      # Bohr radius [m]

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

def eqn(y, x, energy):              #array of first order ODE's     
    y0 = y[1]
    y1 = -2*m_el*energy*y[0]/hbar**2

    return np.array([y0,y1])

def solve(energy, func):           #use of odeint
    p0 = 0
    dp0 = 1
    x = np.linspace(0,L_bohr,1000)
    init = np.array([p0,dp0])
    ysolve = odeint(func, init, x, args=(energy,))
    return ysolve[-1,0]

这里的方法是在solve(energy,func)中输入eqn作为func。 L_bohr是这个问题中的L值。我们正在尝试使用某种 scipy 方法以数值方式找到能量特征值


对于 scipy 中的所有其他求解器,参数顺序x,y,甚至在odeint可以通过给出选项来使用此命令tfirst=True。从而更改为

def eqn(x, y, energy):              #array of first order ODE's     
    y0, y1 = y
    y2 = -2*m_el*energy*y0/hbar**2

    return [y1,y2]

对于 BVP 求解器,您必须将能量参数视为 具有零导数的额外状态分量,从而添加第三个槽 在边界条件中。西皮的solve_bvp允许将其保留为参数, 这样你就可以在边界条件中得到 3 个槽,从而可以将一阶导数固定在x=0从特征空间中选择一个非平凡的解决方案。

def bc(y0, yL, E):
    return [ y0[0], y0[1]-1, yL[0] ]

接下来构造一个接近疑似基态的初始状态并调用求解器

x0 = np.linspace(0,L_bohr,6);
y0 = [ x0*(1-x0/L_bohr), 1-2*x0/L_bohr ]
E0 = 134*e_el

sol = solve_bvp(eqn, bc, x0, y0, p=[E0])
print(sol.message, "  E=", sol.p[0]/e_el," eV")

然后产生情节

x = np.linspace(0,L_bohr,1000)
plt.plot(x/L_bohr, sol.sol(x)[0]/L_bohr,'-+', ms=1)
plt.grid()

The algorithm converged to the desired accuracy. E= 134.29310361903723 eV

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 python 上解决 TISE 的简单边值问题 的相关文章

随机推荐

  • 如何使用休眠读取地理值?

    在我的 spring boot 应用程序中 我尝试使用 spring data 和 hibernate jpa 来存储空间数据 最小复制示例的完整源代码可在github https github com slartidan sqlserve
  • C# Mersenne Twister 随机整数生成器实现(SFMT)蒙特卡罗模拟

    到目前为止我一直在使用C 梅森扭转者 http en wikipedia org wiki Mersenne twister在这里找到生成随机数 http www centerspace net resources php http www
  • Kubernetes HPA - 延长冷却时间

    我正在运行一个带有 HPA 的 Kubernetes 集群 v1 16 目前 GKE 上的最新版本 它根据自定义指标 特别是从谷歌云监控获取的rabbitmq消息计数 扩展部署 问题 当消息计数暂时较高时 部署会非常快地扩展到最大 Pod
  • .NET - 通过基于表单的身份验证使用 (Domino) 服务器上的 HTTP 服务

    我正在用 C NET 编写一个实用程序 它将使用 HTTP 从 Domino Web 服务器请求数据 但是 该服务器使用基于表单的身份验证 而不是基本的 HTTP 身份验证 我试图找出如何编码以使用具有基于表单的身份验证的服务器执行 HTT
  • 如何在 flutter web 中检测鼠标滚轮滚动?

    如何在 flutter web 中检测鼠标滚轮滚动 它似乎在手势检测器中 但我在那里没有看到它 列表视图如何检测鼠标滚动 包裹你的ListView 或任何其他滚动视图 Listener https api flutter dev flutt
  • 如何按同月对这个字典列表进行分组?

    Python新手 我有一个字典列表 我试图将其组织到同月和同年中 date 2008 04 23 value 1 date 2008 04 01 value 8 date 2008 04 05 value 3 date 2009 04 19
  • 在 Android SQLite 中选择 NULL 值

    我正在执行以下方法 但没有成功 因为 selectArgs 不正确 至少我是这么认为的 findAll public Collection findAllByCodigoSetorOrderByStatusWhereDataAgendame
  • iOS touchstart 和 touchmove 之间有延迟吗?

    我正在尝试将我的网络应用程序转换为移动设备可用的形式 我正在尝试建立对水平滚动等触摸手势的支持 我在我的应用程序中发现一些奇怪的行为 我通过 touchstart 事件启动手势 然后在 touchmove 上滚动 但是 我的应用程序在接收这
  • 在文本文件顶部添加一行

    我的应用程序提取数据并将其附加到文本文件中 但我需要了解如何以编程方式查看文本文件的第一行并查看它是否与以下文本匹配 日期时间 虚拟 IP 虚拟端口 虚拟名称 目标 IP 目标端口 状态 所需 如果确实如此 则继续执行正常功能 下面的片段
  • 如何使用 JavaScript 获取文本字段的值? (jQuery)

    我正在尝试使用 jQuery 获取文本字段的值 但它不起作用 下面是测试 我在 HTML 中有这个
  • Python:从列表中获取多个列表[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Python 中将列表分割成大小均匀的块 https stackoverflow com questions 312443 how do you split a list into evenl
  • 无法中断 lock.acquire() 而我可以中断 time.sleep()

    在 Windows 中 Python 3 4 import threading l threading Lock l acquire l acquire 触发死锁 并且 CTRL C 无法阻止它 你必须杀死该进程 另一方面 import t
  • 如何执行 UITableViewCell 的自定义移动?

    我想像这两种方法一样移动单元格 void tableView UITableView tableView moveRowAtIndexPath NSIndexPath fromIndexPath toIndexPath NSIndexPat
  • gensim word2vec - 使用在线词嵌入更新数组维度

    gensim 0 13 4 1 中的 Word2Vec 无法动态更新词向量 model build vocab sentences update False 工作正常 然而 model build vocab sentences updat
  • Rails 3 模型将某些列映射到不同的模型属性

    我有一个名为 DXFTACCTS 的旧旧表 并且创建了 Rails 模型 Account class Account lt ActiveRecord Base set table name DXFTACCTS end 问题是 DXFTACC
  • Python——函数不返回值

    我想编写一个函数来比较两个值 val1和val2 如果val1大于val2 则为a points添加1分 像A队一样 反之亦然 如果val2更大 则为b points添加1分 如果这两个值是偶数 我不会向 a points 或 b poin
  • NDK/JNI:识别当前线程

    在JNI本地方法中 有没有一种方法可以在不回调Java的情况下知道当前线程的ID 线程本地存储也可以工作 编辑 pthread h 存在于 NDK 包含文件夹中 有谁知道 Java 线程是否对应于 NDK 实现中的 POSIX 线程 您对哪
  • 在编译过程中如何查看解析树、中间代码、优化代码和汇编代码?

    我正在学习编译器课程 程序的编译遵循以下步骤 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成 如何查看每个步骤的输出 例如我想在语法分析后查看解析树 我正在使用 GCC 编译器在 Linux 机器上编译程序 我们可以使用
  • Gitlab-CI 中的上游触发(又名管道依赖项)

    我似乎无法从这样的工具中找到最明显的 CI 功能 在另一个项目的管道完成后运行项目管道 你可以这样做trigger但仅适用于下游触发 这与您想要的相反 如果您有一个项目是 20 个其他项目的核心依赖项 而这些项目都需要重建 在这种情况下 您
  • 如何在 python 上解决 TISE 的简单边值问题

    我正在尝试求解无限势阱的 TISEV 0在间隔上 0 L 这个练习给我们提供了波函数及其导数的值0 is 0 1分别 这使我们能够使用scipy integrate odeint函数来解决给定能量值的问题 现在的任务是在给定波函数的进一步边