我正在尝试编写一个执行以下操作的程序:
- 从数组中获取 V 的值
- 将 V 值传递到与 E 相关的积分中
- 将积分结果输出到数组 I
- 情节 I 反对 V
这个方程看起来很糟糕,但除了 V 之外,一切都是常数。这是方程。方程不是很重要。
我该如何解决这个问题?我的尝试(如下所示)没有计算从文件中读取的每个 V 值的积分。
from scipy import integrate #integrate.quad
from numpy import *
import pylab
import datetime
import time
import os
import math
# import V
fn = 'cooltemp.dat'
V = loadtxt(fn,unpack=True,usecols=[1])
# variables
del1, del2, R, E, fE, fEeV = 1,2,1,2,1,1
e = 1.602176565*10**-19
# eqn = dint(abc)
a = E/( math.sqrt( E**2 - del1**2 ) )
b = ( E+ e*V )/( math.sqrt( ( E + e*V )**2) - del2**2)
c = fE-fEeV
d = 1/(e*R) # integration constant
eqn = a*b*c
# integrate
result = quad(lambda E: eqn,-inf,inf)
# current
I = result*d
# plot IV curve
pylab.plot(V,I,'-r')
## customise graph
pylab.legend(['degree '+str(n),'degree '+str(q),'data'])
pylab.axis([0,max(x),0,max(y)])
pylab.xlabel('voltage (V)')
pylab.ylabel('current (A)')
tc = datetime.datetime.fromtimestamp(os.path.getmtime(fn))
pylab.title('IV curve\n'+fn+'\n'+str(tc)+'\n'+str(datetime.datetime.now()))
pylab.grid(True)
pylab.show()
*更新的尝试:
from scipy import integrate
from numpy import *
import pylab
import datetime
import time
import os
import math
# import V
fn = 'cooltemp.dat'
V = loadtxt(fn,unpack=True,usecols=[1])
# print V
# variables
del1, del2, R, E, fE, fEeV = 1.0,2.0,1.0,2.0,1.0,1.0
e = 1.602176565*10**-19
I=[]
for n in range(len(V)):
constant = 1/(e*R) # integration constant
eqn = (E/( math.sqrt( E**2 - del1**2 ) ))*(( E + e*V[n] )/( math.sqrt( ( E + e*V[n] )**2) - del2**2))*(fE-fEeV)
# integrate
result,error = integrate.quad(lambda E: eqn,-inf,inf)
print result
# current
I.append(result*constant)
I = array(I)
# plot IV curve
pylab.plot(V,I,'-b')