Python 薛定谔方程的变标度

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

我需要改变我在薛定谔方程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.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标签上钉上一些单位也很好。:)