Julia作图示例
虽然我经常利用Origin来作图,但是它的绘图样式现在看起来真的不是特别好看,包括作图的颜色还有一些作图的形式.这里就整理下我之前利用Julia画的一些图,我觉得它的样式还是很符合我的审美的.{:.info} 密度分布我这里的数据是用Fortran计算的,密度图的数据格式为$[x \quad y\quad z]$,在Julia中需要对这中格式的数据进行一定的操作,然后进行绘图.计算得出的数据格式如下 12345678910111213figure(figsize=(10,8)) # 画图大小f = open("corner.dat") # 数据文件名s = readdlm(f)s = reshape(s,(convert(Int32,length(s)/3),3))x = s[:,1]y = s[:,2]z = s[:,3]a1 = scatter(x,y,z*20,c=z,edgecolors="b",cmap="Reds")colorbar(a1) # 加入颜色条xticks(0:5:maximum(x))yticks(0:5:maximum(y))title("CornerState")savefig("cor.eps",bbox_inches="tight",dpi=300) # 保存作图文件 子图1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556# ======================================================figure(figsize=(14,5))subplot(121)f = open("op1.dat")s = readdlm(f)s = reshape(s,(convert(Int32,length(s)/3),3))x = s[:,1]y = s[:,2]z = s[:,3]a1 =...
Python简单并行计算(进程并行)
最近在慢慢复习之前学过的python的内容,毕竟这个语言现成的轮子还是比较多,各种功能实现起来不必自己亲自上手,这里首先学习了一下简单的进程并行计算,但也只是一个很简单的程序.{:.info} 主程序123456789101112131415161718192021# 导入相应的库import os import timeimport multiprocessing as pafrom numba import jit # 导入jit用来对循环进行加速# -------------------------------------------# 定义一个函数,后面并行运算时需要这个函数@jitdef sum1(cont): c = 0 for m in range(cont): for n in range(cont): c = c + m + n return c# --------------------------------------------# 开启一些进程for i in range(pa.cpu_count()): # pa.cpu_count()可以获取当前计算机上最大的进程数 p = pa.Process(target=sum1,args=(100000*(i + 1),)) # 在这里,循环每进行以一次,就创建一个新的进程 ...
Python稀疏矩阵对角化库
平时在做计算的时候,因为总要对哈密顿量进行对角化,但是这个矩阵一般都是稀疏矩阵,虽然Fortran也有专门的稀疏矩阵对角化的程序,但是使用起来并不是很方便,于是就找到了python专门用来做稀疏矩阵对角化的库,而且利用这个库中的函数,还可以只求特殊要求下的本征值和本征矢量,这也是一个很好的优势,因为通常在做哈密顿量的计算时,也只是关系能量最低的本征态上的问题.{:.info} 函数介绍SciPy是一个开源的库,里面包含很多数值计算方面的函数,我也在慢慢学习,这里主要就是介绍一下它对稀疏矩阵对角化的操作.虽然它也是在ARPACK这个Fortran程序之上封装的,但是前面也说过了,如果要使用Fortran还是要花费一定的精力的,毕竟Fortran的接口并不是很好搞定的事情,而python相对来说还是很好用的,所以我也就渐渐转向python的怀抱了,但是不得不说在有些计算方面还是要用Fortran,毕竟计算速度还是杠杠的. eigs1scipy.sparse.linalg.eigs(A, k=6, M=None, sigma=None, which='LM', v0=None, ncv=None, maxiter=None, tol=0, return_eigenvectors=True, Minv=None, OPinv=None, OPpart=None) 虽然这个函数有许多可选参数,但是提前已经设置好了默认值,所以最简单的使用就是只要提供矩阵$A$就可以得到k个本征值和本征矢量,这里默认k=6. A是要求解的矩阵,必须是个方阵,可以是实数型也可以是复数型k是一个整数,用来设置你想计算矩阵A的多少个本征值和本征矢量,当然了这个数是不能大于你矩阵的维数的sigma可以是实数,也可以是复数,它的设置是为了求解在sigma附近的本征值 which, [‘LM’ | ‘SM’ | ‘LR’ | ‘SR’ | ‘LI’ | ‘SI’]which必须是个字符串,它用来控制你想计算那个位置上的本征值‘LM’ : largest magnitude 最大本征值(模)‘SM’ : smallest magnitude 最小本征值(模)‘LR’ : largest real part 实部最大的本征值‘SR’ : smallest real part...
Kubo公式推导(线性响应理论)
物理是个实验学科,在凝聚态物理中,若想知道一个给定物理系统的特性,首先是以某种方式扰动系统(如加外场或者通过粒子辐射),然后观察系统的物理量因外加扰动所引起的改变—-响应.通过扰动于响应的关系即可以知道系统元激发的信息.通常情况下这个外加的场是比较弱的,只有探测作用,所以系统对外场的响应可以认为是线性的,也就是说响应信号正比于外加场的强度.{:.info} 电导计算首先通过一个外加电场来计算系统中诱导出来的电流,在计算过程中推导处Kubo公式,并计算系统的电导,含时的电场可表示为 E^{(ext)}_\alpha(\mathbf{r},t)=\Xi^{(ext)}_\alpha e^{i\mathbf{q}\cdot\mathbf{r}-i\omega t}\qquad (\alpha=x,y,z代表空间方向)外加电场之后,系统中诱导出的电流为 J_\alpha(\mathbf{r},t)=\sum_\beta\sigma^{'}(\mathbf{q},\omega)\Xi_\beta^{(ext)}e^{i\mathbf{q}\cdot\mathbf{r}-i\omega t}上式中尽管$\sigma^{‘}(\mathbf{q},\omega)$有电导率的量纲,但是它并不是最合适的电导率,很明显这只是外加电场引起的,而正真的电导率应该是系统对总电场的响应,这里忽略了由外加电场诱导出的电流产生的额外电场.{:.warning} 将总的电场表示为$E_\alpha$,则电导率的即是系统对总电场的响应 J_\alpha(\mathbf{r},t)=\sum_\beta\sigma_{\alpha\beta}(\mathbf{q},\omega)E_\alpha(\mathbf{r},t)\label{eq1}E_\alpha(\mathbf{r},t)=\Xi\cdot exp[i(\mathbf{q}\cdot\mathbf{r}-\omega t)]上面的式子就是微观电导的基本定义.将电流与总电场之间的关系改写成时空依赖形式即 J_\alpha(\mathbf{r},t)=\int...
做数值计算好用的软件及杂项整理
平时在计算时会用到python和julia,利用anaconda中的jupyter可以在浏览器中很方便的同时使用多种语言,在这里整理一下Anaconda的安装以及jupyter的使用.同时把一些平时计算用的最基本的东西也都整理到一起,算是对新手的一个指引,里面的内容不是很详细,我只是想介绍一下自己平时用到的软件还有编程语言的最基本的一些操作.{:.info} 软件下载1.官网下载 安装过程1)在“Select Installation Type”界面的“Install for”中选择“All Users(requires admin privileges)”单选按钮 2)在“Choose Install Location”界面中查看“Destination Folder”,可能为C:\ProgramData\Anaconda3,注意检查该路径不能包含非英文字符 3)在“Advanced Installation Options”界面中选中“Register Anaconda as my default Python 3.6”复选框。 !png 建议这里不要选则将Anaconda增加到系统的环境变量中,增加太多会导致系统上的环境变量较为混乱.如果单独出来,后面对于Anaconda的包管理来说,也是较为简洁的,可以通过它自带的命令行来进行包管理. 4)安装完成后,开始==>所有程序中,出现文件夹anaconda3(64-bit) Anaconda包管理 1.包更新升级 1conda upgrade --all 2.包安装 123conda install numpy scipy pandasconda install numpy=1.10 安装指定版本的包 3.包移除 1conda remove package_name Jupyter使用 VsCode使用 PlotlyInstallation123pip install plotly==4.10.0conda install -c plotly plotly=4.10.0 Jupyter Notebook Support1conda install "notebook>=5.3"...
Schrodinger,Heisenberg,Interaction绘景的区别与联系
在量子力学进一步的学习中,通常会遇到Schrodinger,Heisenberg,Interaction这三种绘景,在处理不同的问题时,如果选取的绘景合适,那么问题的处理会较为方便,这里合适的绘景只是可以让问题变得容易处理,本质上三种不同的绘景所得到的结果都是相同的,在这里就把三种不同绘景之间的联系与区别进行整理,并整理自己的一些经验和理解.{:.info} Schrodinger绘景最初学习量子力学的时候,接触的其实就是Schrodinger绘景,在自然单位制下的薛定谔方程为 i\frac{\partial}{\partial t}\psi(t)=H\psi(t)$H$是体系的哈密顿量,$\psi$则是体系的波函数,上述方程的解为$\psi(t)=e^{-iHt}\psi(0)$.在Schrodinger绘景中可以看到,波函数是跟时间相关的,而算符H则是与时间无关的,且波函数的时间依赖仅仅是在$e^{-iEt}$中. Heisenberg绘景Heisenberg绘景和Schrodinger绘景的区别就是现在波函数是与时间无关的,而算符则是和时间相关的 O(t)=e^{iHt}O(0)e^{-iHt}上式中H是系统完整的哈密顿量,其中可以包含相互作用等其它外部影响.算符$O(0)$则可以认为就是Schrodinger绘景中的算符,也就是说0时刻的Heisenberg绘景中的算符就是Schrodinger绘景中的算符,而之后的时刻就不是了,因为Schrodinger绘景中的算符是与时间无关的,而对应的,此时波函数就是一个与时间无关的量,即Heisenberg绘景中波函数$\psi(0)$就是Schrodinger绘景中0时刻的波函数$\psi(0)$.对含时间的算符求导,即得到Heisenberg绘景下的运动方程 i\frac{\partial}{\partial...