Python 薛定谔方程的变标度
我需要改变我在薛定谔方程y轴上绘图的比例,以显示理论计算和我们的计算之间的差异,大约是0.01%。所以在图上,我得到的比例不够小,不足以显示差异。这是我的项目中的代码Python 薛定谔方程的变标度,python,scaling,Python,Scaling,我需要改变我在薛定谔方程y轴上绘图的比例,以显示理论计算和我们的计算之间的差异,大约是0.01%。所以在图上,我得到的比例不够小,不足以显示差异。这是我的项目中的代码 # -*- coding: utf-8 -*- """ Created on Sat Nov 05 12:25:14 2016 @author: produce """ from __future__ import print_function import numpy as np import matplotlib.pyplo
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 05 12:25:14 2016
@author: produce
"""
from __future__ import print_function
import numpy as np
import matplotlib.pyplot as plt
#
c = .5 / 500 # c = delta x
x = np.arange(0, .5, c) # creates array of argument values from 0 to 1/2 in increments
# of delta x = c
psi = np.zeros(len(x)) # creates array of zeros which will be replaced by y values
k = 20 # starting energy for calculator of E
ans = 0 # The value of k, when we have y as between 0.004 and 0
ansPsi = 0
diff = 0.001
increment = 0.0001
done = False
while 1:
# print k
psi[0] = 1
psi[1] = 1
for i in range(0, len(x) - 2):
psi[i + 2] = psi[i + 1] + (psi[i + 1] - psi[i]) - 2 * k * c * c * psi[i]
# plt.plot(x,psi)
# print(x,psi)
# print (psi[i+2]--->)
if (float(psi[i + 2]) < 0.004 and float(psi[i + 2]) > 0):
ans = k
ansPsi = psi[i + 2]
# print ("NOW ENTERING INNER LOOP")
while 1: # would be an infinite loop, but have a break statement
# k = k - 0.00001
k = k + increment
for i in range(0, len(x) - 2):
psi[i + 2] = psi[i + 1] + (psi[i + 1] - psi[i]) - 2 * k * c * c * psi[i]
plt.plot(x, psi, 'r') #red solid line
if (psi[i + 2] > ansPsi or psi[i + 2] < 0):
done = True
break
else:
ansPsi = psi[i + 2]
ans = k
# print (k, psi[i+2])
if done:
break
k = k - diff
print("Value of k:", ans, "Value of Y:", ansPsi) # prints our answer for energy and psi[1/2]
k1 = 10 # 1st Higher Energy Value
k2 = 7 # 2nd Higher Energy Value
k3 = 3 # 1st Lower Energy Value
k4 = 1 # 2nd Lower Energy Value
kt = np.pi * np.pi * .5 # theoretical value
psi1 = np.zeros(len(x))
psi1[0] = 1
psi1[1] = 1
for i in range(0, len(x) - 2):
psi1[i + 2] = psi1[i + 1] + (psi1[i + 1] - psi1[i]) - 2 * k1 * c * c * psi1[i]
# psi2 = np.zeros(len(x))
# psi2[0] = 1
# psi2[1] = 1
# for i in range (0,len(x)-2):
# psi2[i+2] = psi2[i+1] + (psi2[i+1] - psi2[i]) - 2*k2*c*c*psi2[i]
# plt.plot(x,psi2,'k')
# psi3 = np.zeros(len(x))
# psi3[0] = 1
# psi3[1] = 1
# for i in range (0,len(x)-2):
# psi3[i+2] = psi3[i+1] + (psi3[i+1] - psi3[i]) - 2*k3*c*c*psi3[i]
# plt.plot(x,psi3,'p')
psi4 = np.zeros(len(x))
psi4[0] = 1
psi4[1] = 1
for i in range(0, len(x) - 2):
psi4[i + 2] = psi4[i + 1] + (psi4[i + 1] - psi4[i]) - 2 * k4 * c * c * psi4[i]
plt.plot(x, psi, 'r-', label='Corrected Energy')
psiT = np.zeros(len(x))
psiT[0] = 1
psiT[1] = 1
for i in range(0, len(x) - 2):
psiT[i + 2] = psiT[i + 1] + (psiT[i + 1] - psiT[i]) - 2 * kt * c * c * psiT[i]
plt.plot(x, psiT, 'b-', label='Theoretical Energy')
plt.ylabel("Value of Psi")
plt.xlabel("X value from 0 to 0.5")
plt.title("Schrodingers equation for varying inital energy")
plt.legend(loc=3)
plt.yscale()
plt.show()
#-*-编码:utf-8-*-
"""
创建于2016年11月5日星期六12:25:14
@作者:农产品
"""
来自未来导入打印功能
将numpy作为np导入
将matplotlib.pyplot作为plt导入
#
c=0.5/500#c=δx
x=np.arange(0.5,c)#以增量从0到1/2创建参数值数组
#δx=c的系数
psi=np。零(len(x))#创建零数组,该数组将被y值替换
k=20#E计算器的启动能量
ans=0#当y在0.004和0之间时,k的值
ANPSI=0
差值=0.001
增量=0.0001
完成=错误
而1:
#打印k
磅/平方英寸[0]=1
磅/平方英寸[1]=1
对于范围(0,len(x)-2)内的i:
psi[i+2]=psi[i+1]+(psi[i+1]-psi[i])-2*k*c*c*psi[i]
#plt.绘图(x,psi)
#打印(x,磅/平方英寸)
#打印(磅/平方英寸[i+2]-->)
如果(浮动(psi[i+2])小于0.004且浮动(psi[i+2])>0:
ans=k
ANPSI=psi[i+2]
#打印(“现在进入内部循环”)
而1:#将是一个无限循环,但有一个break语句
#k=k-0.00001
k=k+增量
对于范围(0,len(x)-2)内的i:
psi[i+2]=psi[i+1]+(psi[i+1]-psi[i])-2*k*c*c*psi[i]
plt.绘图(x,psi,'r')#红色实线
如果(psi[i+2]>ansPsi或psi[i+2]<0):
完成=正确
打破
其他:
ANPSI=psi[i+2]
ans=k
#打印(k,磅/平方英寸[i+2])
如果这样做:
打破
k=k-diff
打印(“k的值:,ans,“Y的值:,ansPsi)#打印能量和psi的答案[1/2]
k1=10#第一高能量值
k2=7#第二高能量值
k3=3#第一低能量值
k4=1#第二低能量值
kt=np.pi*np.pi*.5#理论值
psi1=np.零(len(x))
psi1[0]=1
psi1[1]=1
对于范围(0,len(x)-2)内的i:
psi1[i+2]=psi1[i+1]+(psi1[i+1]-psi1[i])-2*k1*c*c*psi1[i]
#psi2=np.零(len(x))
#psi2[0]=1
#psi2[1]=1
#对于范围(0,len(x)-2)内的i:
#psi2[i+2]=psi2[i+1]+(psi2[i+1]-psi2[i])-2*k2*c*c*psi2[i]
#plt.绘图(x,psi2,'k')
#psi3=np.零(len(x))
#psi3[0]=1
#psi3[1]=1
#对于范围(0,len(x)-2)内的i:
#psi3[i+2]=psi3[i+1]+(psi3[i+1]-psi3[i])-2*k3*c*c*psi3[i]
#plt.图(x,psi3,'p')
psi4=np.零(len(x))
psi4[0]=1
psi4[1]=1
对于范围(0,len(x)-2)内的i:
psi4[i+2]=psi4[i+1]+(psi4[i+1]-psi4[i])-2*k4*c*c*psi4[i]
plt.绘图(x,psi,'r-',标签='校正能量')
psiT=np.零(len(x))
psiT[0]=1
psiT[1]=1
对于范围(0,len(x)-2)内的i:
psiT[i+2]=psiT[i+1]+(psiT[i+1]-psiT[i])-2*kt*c*c*psiT[i]
plt.图(x,psiT,'b-',标签='理论能量')
plt.ylabel(“磅/平方英寸值”)
plt.xlabel(“X值从0到0.5”)
plt.title(“改变初始能量的薛定谔方程”)
plt.图例(loc=3)
plt.yscale()
plt.show()
您共享的代码失败,因为plt.yscale()
需要一个参数。我只是把那句话注释掉了
由于理论能量曲线和校正能量曲线相差如此之小,因此不可能缩放y轴,在整个x范围内(即从0到0.5)仍能看到这两条曲线。相反,也许你应该画出两条曲线的差
plt.plot(x, psiT-psi)
plt.title("Size of Correction for Varying Initial Energy")
plt.ylabel(r"$\Delta$E")
plt.xlabel("X value from 0 to 0.5")
plt.show()
另外,在x和y标签上钉上一些单位也很好。:)