MATLAB和Python数值和符号计算可视化物理学气体动能和粒子速度

要点

  1. Python物理学差分数值和符号计算

  2. 热动力学计算:统计力学,分子动力学模型

    1. Python寻找弹性物体的运动,LAMMPS 分子动力学模拟器模拟2D气体分子,Python原子模拟绘图,Python数值计算原子平衡性,Python绘制平衡时原子波动。

    2. MATLAB随机速度原子晶格,编辑读写lammps轨迹文件函数。使用LAMMPS,MATLAB和Python 二维模拟 Lennard-Jones 系统。

    3. Python模拟理想气体热动力学结果:体积,压力和温度。

    4. LAMMPS模拟固体原子数据,Python基于模拟,测量模型左侧粒子的动能。Python计算绘制爱因斯坦晶体宏态的多重性。MATLAB模拟爱因斯坦晶体热运动状态。Python计算两个耦合的晶体熵。MATLAB计算绘制二维晶体热分子运动。

    5. Python数值计算绘图爱因斯坦晶体在微规范系统中谐振子运动概率。Python蒙特卡洛方法模拟亥姆霍兹自由能。Python使用 命中和错过 算法符号计算蒙特卡洛积分估计。MATLAB对比Python 计算热浴的蒙特卡洛伊辛模型。

    6. LAMMPS 模拟低温下液相和气相之间的聚结和相共存,Python基于模拟数值计算。

    7. MATLAB绘制了玻色-爱因斯坦分布和费米-狄拉克分布。

Python物理学数值计算示例 龙格-库塔方法

鉴于计算效率,以下代码只是演示作用

龙格-库塔方法是常微分方程的数值近似,由 Carl Runge 和 Wilhelm Kutta 开发。 通过使用一个区间内的四个斜率值(不一定落在实际解上)并对斜率进行平均,可以获得一个非常好的近似解。在这个例子中,我们将重点关注四阶龙格-库塔方法来帮助我们解决一维散射问题。

为了开始我们的代码,我们将导入一些包来帮助我们进行数学和可视化。

import cmath 
import numpy as np 
import matplotlib.pyplot as plt 

从这里开始,我们开始定义方程的初始参数。

mass = 1.0 
hbar = 1.0 
v0 = 2.0 
alpha = 0.5 
E = 3.0 
i = 1.0j 
x = 10.0 
xf = -10.0 
h = -.001 
xaxis = np.array([], float) 
psi = np.array([], complex) 
psiprime = np.array([], complex) 

一旦我们有了初始值,我们就开始处理定义我们将要使用的方程的函数。我们的主要方程是 k ( x ) k(x) k(x),它是薛定谔方程的重新设计版本,用于求解变量 k k k,以及我们的 Ψ \Psi Ψ 方程,它将由 psione ( x ) (x) (x) 和 psitwo ( x ) (x) (x)定义。

def v(x): return v0/2.0 * (1.0 + np.tanh(x/alpha))
def k(x): return cmath.sqrt((2*mass/(hbar**2))*(E - v(x)))
def psione(x): return np.exp(i*k(x)*x)
def psitwo(x): return i*k(x)*np.exp(i*k(x)*x)

在此,首先,我们需要定义一个包含初始条件波函数的数组。

r = np.array([psione(x), psitwo(x)]) 

在数组中设置这些方程,我们可以通过下面将定义的龙格-库塔方法迭代这两个方程,并让它们为我们为 psione(x) 和 psitwo(x) 定义的方程提供近似解 。 但在我们到达方程的主要部分之前,我们需要定义一个更重要的函数。

def deriv(r,x): return np.array([r[1],-(2.0*mass/(hbar**2) * (E - v(x))*r[0])], complex)

deriv 函数是龙格-库塔的输出经过的地方,该函数从数组 r 中获取我们的值,然后将其推入这些条件。 对于返回的第一个值,非常简单,我们的 x 值将被输入到数组的第二个方程中。 然而,第二个值将经历不同的处理。 这次,x 值将经历薛定谔方程的另一次迭代,其中考虑了波函数 psione(x)。

while (x >= xf ):xaxis = np.append(xaxis, x)psi = np.append(psi, r[0])psiprime = np.append(psiprime, r[1])k1 = h*deriv(r,x)k2 = h*deriv(r+k1/2,x+h/2)k3 = h*deriv(r+k2/2,x+h/2)k4 = h*deriv(r+k3,x+h)r += (k1+2*k2+2*k3+k4)/6x += h 

在这里,循环几乎涵盖了龙格-库塔的整个过程。通过使用由 k k k 值定义的斜率近似值,每个 k k k 值有助于近似下一个斜率,使我们更接近求解 f ( x ) f(x) f(x)。此外,在获得每个斜率之后,我们获得加权平均值并使用这些新值更新我们的数组,为下一次迭代做好准备。这个过程将在 x \mathrm{x} x​ 轴上我们定义的范围内继续,这最终将为我们提供绘制即将求解的常微分方程所需的值。

龙格-库塔方法可以很容易地适应许多其他方程,大多数时候我们只需要调整导数函数和我们的初始条件方程。 其他示例包括摆常微分方程和行星运动常微分方程。 在下面,我们现在可以找到完整的代码以及额外的步骤,例如求解反射和透射值的函数,以及如何绘制我们的值。

import cmath 
import numpy as np 
import matplotlib.pyplot as plt 
mass = 1.0 
hbar = 1.0 
v0 = 2.0 
alpha = 0.5 
E = 3.0 
i = 1.0j 
x = 10.0 
xf = -10.0 
h = -.001 
xaxis = np.array([], float) 
psi = np.array([], complex) 
psiprime = np.array([], complex) 
def v(x): return v0/2.0 * (1.0 + np.tanh(x/alpha))
def k(x): return cmath.sqrt((2*mass/(hbar**2))*(E - v(x)))
r = np.array([psione(x), psitwo(x)]) 
def deriv(r,x): return np.array([r[1],-(2.0*mass/(hbar**2) * (E - v(x))*r[0])], complex)
while (x >= xf ):xaxis = np.append(xaxis, x)psi = np.append(psi, r[0])psiprime = np.append(psiprime, r[1])k1 = h*deriv(r,x)k2 = h*deriv(r+k1/2,x+h/2)k3 = h*deriv(r+k2/2,x+h/2)k4 = h*deriv(r+k3,x+h)r += (k1+2*k2+2*k3+k4)/6x += h 
psi1 = psi[20000]; psi2 = psiprime[20000]; x = 10; xf = -10
def reflection(x, y):aa = (psi1 + psi2/(i*k(y)))/(2*np.exp(i*k(y)*y))bb = (psi1 - psi2/(i*k(y)))/(2*np.exp(-i*k(y)*y))return (np.abs(bb)/np.abs(aa))**2
def transmission(x,y):aa = (psi1 + psi2/(i*k(y)))/(2.0*np.exp(i*k(y)*y))return k(x)/k(y) * 1.0/(np.abs(aa))**2
print('reflection = ',reflection(x,xf))
print('transmission = ', transmission(x,xf))
print('r + t = ', reflection(x,xf) + transmission(x,xf))
fig, ax = plt.subplots(1,2, figsize = (15,5))
ax[0].plot(xaxis, psi.real, xaxis, psi.imag, xaxis, v(xaxis))
ax[1].plot(xaxis, psiprime.real, xaxis, psiprime.imag, xaxis, v(xaxis))
plt.show()

使用Scipy 改写为:

import cmath
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint, solve_ivp
E = 3; m = 1; h = 1; alpha = .5; v0=2; i = 1.0j; xi = 10; xf = -10
def v(x): return v0/2.0 * (1.0 + np.tanh(x/alpha))
def k(x): return cmath.sqrt((2*m/(h**2))*(E - v(x)))
def psione(x): return np.exp(i*k(x)*x)
def psitwo(x): return i*k(x)*np.exp(i*k(x)*x)
def deriv(x, y): return [y[1], -(2.0*m/(h**2.0) * (E - v(x))*y[0])]values = solve_ivp(deriv, [10, -10], [psione(xi), psitwo(xi)], first_step = .001, max_step = .001)
psi1 = values.y[0,20000]; psi2 = values.y[1,20000]; x = 10; xf = -10
def reflection(x, y):aa = (psi1 + psi2/(i*k(y)))/(2*np.exp(i*k(y)*y))bb = (psi1 - psi2/(i*k(y)))/(2*np.exp(-i*k(y)*y))return (np.abs(bb)/np.abs(aa))**2
def transmission(x,y):aa = (psi1 + psi2/(i*k(y)))/(2.0*np.exp(i*k(y)*y))return k(x)/k(y) * 1.0/(np.abs(aa))**2
print('reflection = ',reflection(x,xf))
print('transmission = ', transmission(x,xf))
print('r + t = ', reflection(x,xf) + transmission(x,xf))
fig, ax = plt.subplots(1,2, figsize = (15,5))
ax[0].plot(values.t, values.y[0].real, values.t, values.y[0].imag, values.t, v(values.t))
ax[1].plot(values.t, values.y[1].real, values.t, values.y[1].imag, values.t, v(values.t))
plt.show()
参阅一:计算思维
参阅二:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch实战:索引阻塞 —— 数据保护的终极武器

文章目录 1、索引阻塞的种类2、什么时候使用阻塞?场景1:进行系统维护场景。场景2:保护数据不被随意更改场景。场景3:优化资源使用的场景。场景4:遵守安全规则场景。 3、添加索引阻塞API4、解除设置 API5、小结6、参考 …

Transformer位置编码(Position Embedding)理解

本文主要介绍4种位置编码,分别是NLP发源的transformer、ViT、Sw-Transformer、MAE的Position Embedding 一、NLP transformer 使用的是1d的绝对位置编码,使用sincos将每个token编码为一个向量【硬编码】 Attention Is All You Need 在语言中&#xff0…

FDU 2018 | 1. 求众数

文章目录 1. 题目描述2. 我的尝试 1. 题目描述 AcWing 3685 求众数 给定一个长度为 n 的整数序列,请你求出该序列的众数。 众数就是一个序列中出现次数最多的数字。 如果不唯一,则输出小的那个值。 输入格式 第一行输入一个整数 n,表示有 …

RPG Maker MV 踩坑八 仿新仙剑战斗物品指令菜单

仿新仙剑战斗物品指令菜单 遇到的坑坑一坑二解决方法 遇到的坑 上次做的额外战斗指令菜单和物品战斗指令菜单,突然发现一个大问题,漏风了!!! 其实就是将底部漏出来了,这样整个UI就不完整了,算是…

Wpf-自定义状态控件

后端代码 public class AxisStatus : Control{static AxisStatus(){DefaultStyleKeyProperty.OverrideMetadata(typeof(AxisStatus), new FrameworkPropertyMetadata(typeof(AxisStatus)));}public CornerRadius CornerRadius{get > (CornerRadius)GetValue(CornerRadiusPro…

微服务day04(上)-- RabbitMQ学习与入门

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应,但…

深度学习 | 神经网络

一、神经网络原理 1、神经元模型 虽然叫个神经元,但骨子里还是线性模型。 2、神经网络结构 顾名思义就是由很多个神经元结点前后相连组成的一个网络。虽然长相上是个网络,但是本质上是多个线性模型的模块化组合。 在早期也被称为 多层感知机 Multi-Layer…

Visual Studio 2013 - 调试模式下根据内存地址查看内存

Visual Studio 2013 - 调试模式下根据内存地址查看内存 1. 查看内存References 1. 查看内存 调试 -> 窗口 -> 内存 -> 内存1-4 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

【质押空投】公链Zkasino

据深潮TechFlow报道,游戏公链Zkasino HyperChain宣布上线质押挖矿活动,参与者可通过将ETH跨链到Zkasino链的方式来获取ZKAS代币。本次活动总共将分配25%的总代币供应量给参与者。质押挖矿时间将通过倒计时的方式来限制参与人数,以保护早期质押…

Datawhale 零基础入门数据挖掘-Task1 赛题理解

一、 赛题理解 Tip:此部分为零基础入门数据挖掘的 Task1 赛题理解 部分,为大家入门数据挖掘比赛提供一个基本的赛题入门讲解,欢迎后续大家多多交流。 赛题:零基础入门数据挖掘 - 二手车交易价格预测 地址:零基础入门数据挖掘 -…

【代码分享】四十七种测试函数(关注可免费获取)

智能优化算法测试函数简介 智能优化算法测试函数是为了在优化算法研究和开发中测试算法性能的规范问题集合。这些测试函数模拟了真实世界优化问题的不同方面,包括局部最小值、最大值、全局最优解,以及多种复杂性如高维度、非线性、不连续等。优化算法,如遗传算法、粒子群优…

蓝桥杯之动态规划冲刺

文章目录 动态规划01背包小练一下01背包网格图上的DP完全背包 最长公共字符串最长递增子序列 动态规划 动态规划:确定好状态方程,我们常常是确定前 当状态来到 i 时,前 i 个物体的状态是怎么样的,我们并不是从一个点去考虑&#x…

突破编程_C++_C++11新特性(tuple)

1 std::tuple 简介 1.1 std::tuple 概述 std::tuple 是一个固定大小的不同类型值的集合,可以看作 std::pair 的泛化,即 std::pair 是 std::tuple 的一个特例,其长度受限为 2。与 C# 中的 tuple 类似,但 std::tuple 的功能更为强…

数据库基本介绍及编译安装mysql

目录 数据库介绍 数据库类型 数据库管理系统(DBMS) 数据库系统 DBMS的工作模式 关系型数据库的优缺点 编译安装mysql 数据库介绍 数据:描述事物的的符号纪录称为数据(Data) 表:以行和列的形式组成…

mysql迁移达梦数据库 Java踩坑合集

达梦数据库踩坑合集 文章目录 安装达梦设置大小写不敏感Spring boot引入达梦驱动(两种方式)将jar包打入本地maven仓库使用国内maven仓库(阿里云镜像) 达梦驱动yml配置springboot mybatis-plus整合达梦,如何避免指定数据库名&…

CCAA审核员考试认证通用基础--合格评定基础练习题

合格评定基础练习题 一、单项选择题 1.与适用相同的规定要求、具体规则与程序的特定的合格评定对象有关的合格评定制度是( )。 A.合格评定 B 合格评定制度. C.合格评定方案 D.合格评定规范 2.认证也被称为( ) A.证明 B.…

常用负载均衡详解

一、介绍 在互联网场景下,负载均衡(Load Balance)是分布式系统架构设计中必须考虑的一个环节,它通常是指将负载流量(工作任务、访问请求)平衡、分摊到多个操作单元(服务器、组件)上去…

Vue 计算属性和watch监听

1.1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- 引入vue.js --><script src"node_modules/vue/dist/vue.js"></script> </h…

MySQL 快速学习路径

整理了下MySQL的快速学习路径 最近因为失业一直在家&#xff0c;闲来没事打算学习一下&#xff0c;打发时间。 大家可以订阅关注加转发 \(^o^)/~MySQL安装(Mac系统) MySQL的启停登陆与退出 MySQL的目录结构 MySQL语法分类 DDL&#xff08;1&#xff09; MySQL语法分类 DDL…

蚓链与数字化供应链的融合 带给新零售新福音

蚓链数字化生态与全境供应链的数字化融合&#xff0c;确实为新零售数字化营销带来了新的机遇。这种结合不仅提供了创新的思维和方法&#xff0c;更为新零售企业提供了强大的数字化承载和解决方案&#xff0c;使其能够更快捷地启动动销、实现倍速裂变、高福利宠粉&#xff0c;以…