SCIPY 数据相关的 UnivariateSpline 插值问题
我在尝试使用 UnivariateSpline 函数插入数据时遇到一个奇怪的问题。对所有点 (s=0) 和样条函数进行插值不会给出整个数据集的结果。 s>=1 的结果也很奇怪。因为我认为这与我正在使用的数据有关,所以我将它们加入到附件中。
我被困住了,所以如果有人对解决方案有好主意,我将非常感激。
谢谢,
这里是部分代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline
def openfile(infilename):
ifile = open(infilename, 'r') # open file for reading
lines = ifile.readlines()
ifile.close()
return lines
def extractData(lines):
data=[]
CV=[]
for i in range(len(lines)):
item=lines[i].split()
for j in range(len(item)):
item[j]=float(item[j])
data.append(item[j])
CV=np.array(data)
CV.shape = (len(CV)/3,3)
return CV
if __name__ == "__main__":
lines=openfile("D:\capamos\LOCOS\cap15L1_rec_mod.csv")
CV=extractData(lines)
Vg1=CV[:,0]
C1=CV[:,1]
Cmax=C1.max()
Cmin=C1.min()
S=0.002
Cfb=compute(Cmax,Cmin,S) #compute the flat band capacitance
print "Cfb=",Cfb
splineCV= UnivariateSpline(Vg1,C1,s=0)
x = linspace(-5, 5, 1000) # just to draw the spline function
y=splineCV(x)
Vfb=splineCV(Cfb) # find the flat band voltage at Cfb
print "Vfb=",Vfb
print y
plt.figure(1)
p1=plot(Vg1,C1,'b',label='edge')
p2=plot(x,y,'g')
plt.axis([-6,6,1e-11,80e-12])
这里是数据:
5 6.35E-011 -4.79E-010
4.95 6.35E-011 -1.91E-010
4.9 6.35E-011 -2.19E-010
4.85 6.35E-011 -4.57E-010
4.8 6.35E-011 -1.24E-010
4.75 6.35E-011 -3.50E-010
4.7 6.35E-011 -4.15E-010
4.65 6.34E-011 2.37E-010
4.6 6.35E-011 -2.84E-010
4.55 6.34E-011 -2.18E-010
4.5 6.35E-011 1.90E-010
4.45 6.34E-011 -7.71E-011
4.4 6.34E-011 -6.89E-010
4.35 6.34E-011 -2.79E-010
4.3 6.33E-011 -3.37E-010
4.25 6.33E-011 -4.32E-010
4.2 6.33E-011 -7.29E-010
4.15 6.33E-011 -2.17E-012
4.1 6.33E-011 1.62E-010
4.05 6.32E-011 -1.63E-010
4 6.32E-011 -2.73E-010
3.95 6.33E-011 -9.93E-011
3.9 6.32E-011 1.77E-010
3.85 6.32E-011 -3.26E-010
3.8 6.32E-011 -2.47E-010
3.75 6.32E-011 -1.59E-010
3.7 6.30E-011 -1.03E-010
3.65 6.30E-011 -7.15E-011
3.6 6.31E-011 -3.02E-010
3.55 6.30E-011 2.52E-010
3.5 6.31E-011 -2.98E-010
3.45 6.29E-011 -1.21E-010
3.4 6.29E-011 -1.97E-010
3.35 6.29E-011 -6.97E-011
3.3 6.29E-011 -1.68E-010
3.25 6.28E-011 2.52E-010
3.2 6.28E-011 -2.66E-010
3.15 6.28E-011 -6.52E-010
3.1 6.27E-011 2.78E-011
3.05 6.27E-011 -4.69E-010
3 6.27E-011 -2.63E-010
2.95 6.26E-011 -3.00E-010
2.9 6.26E-011 -2.23E-010
2.85 6.25E-011 -4.05E-010
2.8 6.25E-011 -2.68E-010
2.75 6.25E-011 -5.19E-010
2.7 6.23E-011 9.14E-011
2.65 6.24E-011 -5.05E-010
2.6 6.22E-011 -4.39E-010
2.55 6.21E-011 -4.11E-010
2.5 6.21E-011 1.71E-010
2.45 6.20E-011 2.35E-010
2.4 6.19E-011 -1.20E-010
2.35 6.18E-011 -9.91E-012
2.3 6.18E-011 -6.99E-011
2.25 6.17E-011 -2.35E-010
2.2 6.15E-011 -6.35E-010
2.15 6.14E-011 -2.10E-010
2.1 6.13E-011 -3.70E-010
2.05 6.11E-011 -2.89E-010
2 6.10E-011 1.06E-010
1.95 6.09E-011 -3.23E-010
1.9 6.07E-011 1.37E-010
1.85 6.05E-011 -2.40E-010
1.8 6.03E-011 -1.04E-010
1.75 6.00E-011 -1.72E-010
1.7 5.98E-011 -4.59E-011
1.65 5.96E-011 -4.71E-010
1.6 5.91E-011 -4.40E-010
1.55 5.88E-011 -2.11E-010
1.5 5.84E-011 -3.97E-010
1.45 5.78E-011 -1.37E-010
1.4 5.74E-011 -2.56E-010
1.35 5.66E-011 -3.33E-010
1.3 5.58E-011 -1.61E-011
1.25 5.50E-011 -3.73E-011
1.2 5.39E-011 -2.02E-010
1.15 5.27E-011 2.62E-011
1.1 5.12E-011 1.48E-010
1.05 4.94E-011 -5.94E-011
1 4.75E-011 -2.22E-010
0.95 4.52E-011 5.05E-011
0.9 4.27E-011 -2.08E-010
0.85 4.02E-011 -3.30E-011
0.8 3.77E-011 2.84E-010
0.75 3.52E-011 -2.50E-010
0.7 3.30E-011 7.79E-010
0.65 3.11E-011 9.33E-010
0.6 2.93E-011 9.51E-010
0.55 2.78E-011 7.86E-010
0.5 2.65E-011 5.22E-010
0.45 2.54E-011 7.77E-011
0.4 2.44E-011 7.67E-011
0.35 2.36E-011 -2.22E-010
0.3 2.28E-011 -1.93E-010
0.25 2.21E-011 -1.78E-010
0.2 2.15E-011 4.91E-011
0.15 2.09E-011 -1.97E-010
0.1 2.04E-011 -4.07E-010
0.05 1.99E-011 -1.37E-0 10
0 1.95E-011 -1.58E-010
-0.05 1.91E-011 -2.27E-010
-0.1 1.88E-011 -4.24E-010
-0.15 1.86E-011 -3.00E-010
-0.2 1.83E-011 2.35E-010
-0.25 1.81E-011 2.87E-010
-0.3 1.79E-011 -7.89E-011
-0.35 1.78E-011 5.05E-010
-0.4 1.77E-011 8.43E-011
-0.45 1.76E-011 -1.67E-010
-0.5 1.75E-011 -3.21E-010
-0.55 1.74E-011 -1.39E-010
-0.6 1.74E-011 -2.56E-010
-0.65 1.73E-011 6.28E-011
-0.7 1.72E-011 -1.39E-010
-0.75 1.71E-011 1.07E-010
-0.8 1.70E-011 2.98E-010
-0.85 1.69E-011 -4.11E-011
-0.9 1.68E-011 -2.59E-010
-0.95 1.68E-011 -4.53E-010
-1 1.67E-011 -4.97E-010
-1.05 1.66E-011 -3.11E-010
-1.1 1.65E-011 1.02E-010
-1.15 1.64E-011 3.58E-010
-1.2 1.64E-011 2.33E-011
-1.25 1.63E-011 -1.96E-011
-1.3 1.62E-011 -2.55E-010
-1.35 1.61E-011 -1.24E-010
-1.4 1.60E-011 9.76E-011
-1.45 1.60E-011 -1.30E-010
-1.5 1.59E-011 -1.94E-010
-1.55 1.59E-011 3.96E-010
-1.6 1.58E-011 -9.73E-013
-1.65 1.58E-011 -3.42E-011
-1.7 1.56E-011 2.40E-010
-1.75 1.56E-011 -2.59E-010
-1.8 1.55E-011 -2.25E-010
-1.85 1.55E-011 -2.09E-010
-1.9 1.54E-011 6.10E-011
-1.95 1.54E-011 -1.91E-010
-2 1.53E-011 -5.28E-011
-2.05 1.52E-011 -1.15E-010
-2.1 1.52E-011 -1.54E-010
-2.15 1.51E-011 -9.81E-011
-2.2 1.51E-011 -2.18E-011
-2.25 1.50E-011 -4.79E-011
-2.3 1.50E-011 4.71E-011
-2.35 1.50E-011 -3.73E-010
-2.4 1.49E-011 1.50E-010
-2.45 1.48E-011 1.08E-010
-2.5 1.48E-011 -1.51E-010
-2.55 1.48E-011 1.72E-010
-2.6 1.47E-011 -3.49E-011
-2.65 1.47E-011 -2.53E-010
-2.7 1.46E-011 -1.64E-010
-2.75 1.46E-011 -2.40E-011
-2.8 1.45E-011 -7.15E-011
-2.85 1.45E-011 -2.91E-010
-2.9 1.45E-011 6.30E-011
-2.95 1.45E-011 -2.76E-010
-3 1.45E-011 2.01E-010
-3.05 1.44E-011 -2.15E-010
-3.1 1.44E-011 -9.85E-011
-3.15 1.43E-011 2.53E-011
-3.2 1.44E-011 5.78E-012
-3.25 1.43E-011 -3.54E-010
-3.3 1.43E-011 3.60E-011
-3.35 1.44E-011 -1.14E-010
-3.4 1.44E-011 -2.33E-010
-3.45 1.44E-011 -3.83E-010
-3.5 1.44E-011 -3.10E-010
-3.55 1.43E-011 -9.04E-011
-3.6 1.43E-011 -1.86E-010
-3.65 1.43E-011 -3.67E-010
-3.7 1.44E-011 8.13E-011
-3.75 1.43E-011 -1.46E-010
-3.8 1.43E-011 2.34E-010
-3.85 1.44E-011 -1.07E-011
-3.9 1.44E-011 -2.10E-010
-3.95 1.44E-011 -1.86E-010
-4 1.45E-011 -4.67E-011
-4.05 1.44E-011 -1.51E-010
-4.1 1.45E-011 1.09E-010
-4.15 1.44E-011 1.94E-010
-4.2 1.45E-011 -8.02E-011
-4.25 1.45E-011 -1.25E-010
-4.3 1.46E-011 -1.47E-010
-4.35 1.46E-011 -2.76E-010
-4.4 1.46E-011 5.60E-011
-4.45 1.47E-011 -6.24E-011
-4.5 1.48E-011 1.79E-010
-4.55 1.49E-011 -1.71E-010
-4.6 1.49E-011 1.49E-010
-4.65 1.50E-011 -4.05E-011
-4.7 1.50E-011 8.56E-012
-4.75 1.51E-011 -3.71E-010
-4.8 1.52E-011 2.12E-010
-4.85 1.53E-011 -2.04E-010
-4.9 1.54E-011 -1.97E-012
-4.95 1.56E-011 -4.94E-010
-5 1.58E-011 -2.03E-010
I'm having a weird problem trying to interpolate data using the UnivariateSpline function. Interpolating through all the points (s=0) and the spline function does not give a result on the entire set of data. The result for s>=1 is also very weird. As I think it is related to the data I'm using, I join them in attachement.
I'm stuck, so if anyone have a good idea on a solution, I will really appreciate.
Thanks,
here part of the code:
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline
def openfile(infilename):
ifile = open(infilename, 'r') # open file for reading
lines = ifile.readlines()
ifile.close()
return lines
def extractData(lines):
data=[]
CV=[]
for i in range(len(lines)):
item=lines[i].split()
for j in range(len(item)):
item[j]=float(item[j])
data.append(item[j])
CV=np.array(data)
CV.shape = (len(CV)/3,3)
return CV
if __name__ == "__main__":
lines=openfile("D:\capamos\LOCOS\cap15L1_rec_mod.csv")
CV=extractData(lines)
Vg1=CV[:,0]
C1=CV[:,1]
Cmax=C1.max()
Cmin=C1.min()
S=0.002
Cfb=compute(Cmax,Cmin,S) #compute the flat band capacitance
print "Cfb=",Cfb
splineCV= UnivariateSpline(Vg1,C1,s=0)
x = linspace(-5, 5, 1000) # just to draw the spline function
y=splineCV(x)
Vfb=splineCV(Cfb) # find the flat band voltage at Cfb
print "Vfb=",Vfb
print y
plt.figure(1)
p1=plot(Vg1,C1,'b',label='edge')
p2=plot(x,y,'g')
plt.axis([-6,6,1e-11,80e-12])
And here the datas:
5 6.35E-011 -4.79E-010
4.95 6.35E-011 -1.91E-010
4.9 6.35E-011 -2.19E-010
4.85 6.35E-011 -4.57E-010
4.8 6.35E-011 -1.24E-010
4.75 6.35E-011 -3.50E-010
4.7 6.35E-011 -4.15E-010
4.65 6.34E-011 2.37E-010
4.6 6.35E-011 -2.84E-010
4.55 6.34E-011 -2.18E-010
4.5 6.35E-011 1.90E-010
4.45 6.34E-011 -7.71E-011
4.4 6.34E-011 -6.89E-010
4.35 6.34E-011 -2.79E-010
4.3 6.33E-011 -3.37E-010
4.25 6.33E-011 -4.32E-010
4.2 6.33E-011 -7.29E-010
4.15 6.33E-011 -2.17E-012
4.1 6.33E-011 1.62E-010
4.05 6.32E-011 -1.63E-010
4 6.32E-011 -2.73E-010
3.95 6.33E-011 -9.93E-011
3.9 6.32E-011 1.77E-010
3.85 6.32E-011 -3.26E-010
3.8 6.32E-011 -2.47E-010
3.75 6.32E-011 -1.59E-010
3.7 6.30E-011 -1.03E-010
3.65 6.30E-011 -7.15E-011
3.6 6.31E-011 -3.02E-010
3.55 6.30E-011 2.52E-010
3.5 6.31E-011 -2.98E-010
3.45 6.29E-011 -1.21E-010
3.4 6.29E-011 -1.97E-010
3.35 6.29E-011 -6.97E-011
3.3 6.29E-011 -1.68E-010
3.25 6.28E-011 2.52E-010
3.2 6.28E-011 -2.66E-010
3.15 6.28E-011 -6.52E-010
3.1 6.27E-011 2.78E-011
3.05 6.27E-011 -4.69E-010
3 6.27E-011 -2.63E-010
2.95 6.26E-011 -3.00E-010
2.9 6.26E-011 -2.23E-010
2.85 6.25E-011 -4.05E-010
2.8 6.25E-011 -2.68E-010
2.75 6.25E-011 -5.19E-010
2.7 6.23E-011 9.14E-011
2.65 6.24E-011 -5.05E-010
2.6 6.22E-011 -4.39E-010
2.55 6.21E-011 -4.11E-010
2.5 6.21E-011 1.71E-010
2.45 6.20E-011 2.35E-010
2.4 6.19E-011 -1.20E-010
2.35 6.18E-011 -9.91E-012
2.3 6.18E-011 -6.99E-011
2.25 6.17E-011 -2.35E-010
2.2 6.15E-011 -6.35E-010
2.15 6.14E-011 -2.10E-010
2.1 6.13E-011 -3.70E-010
2.05 6.11E-011 -2.89E-010
2 6.10E-011 1.06E-010
1.95 6.09E-011 -3.23E-010
1.9 6.07E-011 1.37E-010
1.85 6.05E-011 -2.40E-010
1.8 6.03E-011 -1.04E-010
1.75 6.00E-011 -1.72E-010
1.7 5.98E-011 -4.59E-011
1.65 5.96E-011 -4.71E-010
1.6 5.91E-011 -4.40E-010
1.55 5.88E-011 -2.11E-010
1.5 5.84E-011 -3.97E-010
1.45 5.78E-011 -1.37E-010
1.4 5.74E-011 -2.56E-010
1.35 5.66E-011 -3.33E-010
1.3 5.58E-011 -1.61E-011
1.25 5.50E-011 -3.73E-011
1.2 5.39E-011 -2.02E-010
1.15 5.27E-011 2.62E-011
1.1 5.12E-011 1.48E-010
1.05 4.94E-011 -5.94E-011
1 4.75E-011 -2.22E-010
0.95 4.52E-011 5.05E-011
0.9 4.27E-011 -2.08E-010
0.85 4.02E-011 -3.30E-011
0.8 3.77E-011 2.84E-010
0.75 3.52E-011 -2.50E-010
0.7 3.30E-011 7.79E-010
0.65 3.11E-011 9.33E-010
0.6 2.93E-011 9.51E-010
0.55 2.78E-011 7.86E-010
0.5 2.65E-011 5.22E-010
0.45 2.54E-011 7.77E-011
0.4 2.44E-011 7.67E-011
0.35 2.36E-011 -2.22E-010
0.3 2.28E-011 -1.93E-010
0.25 2.21E-011 -1.78E-010
0.2 2.15E-011 4.91E-011
0.15 2.09E-011 -1.97E-010
0.1 2.04E-011 -4.07E-010
0.05 1.99E-011 -1.37E-0 10
0 1.95E-011 -1.58E-010
-0.05 1.91E-011 -2.27E-010
-0.1 1.88E-011 -4.24E-010
-0.15 1.86E-011 -3.00E-010
-0.2 1.83E-011 2.35E-010
-0.25 1.81E-011 2.87E-010
-0.3 1.79E-011 -7.89E-011
-0.35 1.78E-011 5.05E-010
-0.4 1.77E-011 8.43E-011
-0.45 1.76E-011 -1.67E-010
-0.5 1.75E-011 -3.21E-010
-0.55 1.74E-011 -1.39E-010
-0.6 1.74E-011 -2.56E-010
-0.65 1.73E-011 6.28E-011
-0.7 1.72E-011 -1.39E-010
-0.75 1.71E-011 1.07E-010
-0.8 1.70E-011 2.98E-010
-0.85 1.69E-011 -4.11E-011
-0.9 1.68E-011 -2.59E-010
-0.95 1.68E-011 -4.53E-010
-1 1.67E-011 -4.97E-010
-1.05 1.66E-011 -3.11E-010
-1.1 1.65E-011 1.02E-010
-1.15 1.64E-011 3.58E-010
-1.2 1.64E-011 2.33E-011
-1.25 1.63E-011 -1.96E-011
-1.3 1.62E-011 -2.55E-010
-1.35 1.61E-011 -1.24E-010
-1.4 1.60E-011 9.76E-011
-1.45 1.60E-011 -1.30E-010
-1.5 1.59E-011 -1.94E-010
-1.55 1.59E-011 3.96E-010
-1.6 1.58E-011 -9.73E-013
-1.65 1.58E-011 -3.42E-011
-1.7 1.56E-011 2.40E-010
-1.75 1.56E-011 -2.59E-010
-1.8 1.55E-011 -2.25E-010
-1.85 1.55E-011 -2.09E-010
-1.9 1.54E-011 6.10E-011
-1.95 1.54E-011 -1.91E-010
-2 1.53E-011 -5.28E-011
-2.05 1.52E-011 -1.15E-010
-2.1 1.52E-011 -1.54E-010
-2.15 1.51E-011 -9.81E-011
-2.2 1.51E-011 -2.18E-011
-2.25 1.50E-011 -4.79E-011
-2.3 1.50E-011 4.71E-011
-2.35 1.50E-011 -3.73E-010
-2.4 1.49E-011 1.50E-010
-2.45 1.48E-011 1.08E-010
-2.5 1.48E-011 -1.51E-010
-2.55 1.48E-011 1.72E-010
-2.6 1.47E-011 -3.49E-011
-2.65 1.47E-011 -2.53E-010
-2.7 1.46E-011 -1.64E-010
-2.75 1.46E-011 -2.40E-011
-2.8 1.45E-011 -7.15E-011
-2.85 1.45E-011 -2.91E-010
-2.9 1.45E-011 6.30E-011
-2.95 1.45E-011 -2.76E-010
-3 1.45E-011 2.01E-010
-3.05 1.44E-011 -2.15E-010
-3.1 1.44E-011 -9.85E-011
-3.15 1.43E-011 2.53E-011
-3.2 1.44E-011 5.78E-012
-3.25 1.43E-011 -3.54E-010
-3.3 1.43E-011 3.60E-011
-3.35 1.44E-011 -1.14E-010
-3.4 1.44E-011 -2.33E-010
-3.45 1.44E-011 -3.83E-010
-3.5 1.44E-011 -3.10E-010
-3.55 1.43E-011 -9.04E-011
-3.6 1.43E-011 -1.86E-010
-3.65 1.43E-011 -3.67E-010
-3.7 1.44E-011 8.13E-011
-3.75 1.43E-011 -1.46E-010
-3.8 1.43E-011 2.34E-010
-3.85 1.44E-011 -1.07E-011
-3.9 1.44E-011 -2.10E-010
-3.95 1.44E-011 -1.86E-010
-4 1.45E-011 -4.67E-011
-4.05 1.44E-011 -1.51E-010
-4.1 1.45E-011 1.09E-010
-4.15 1.44E-011 1.94E-010
-4.2 1.45E-011 -8.02E-011
-4.25 1.45E-011 -1.25E-010
-4.3 1.46E-011 -1.47E-010
-4.35 1.46E-011 -2.76E-010
-4.4 1.46E-011 5.60E-011
-4.45 1.47E-011 -6.24E-011
-4.5 1.48E-011 1.79E-010
-4.55 1.49E-011 -1.71E-010
-4.6 1.49E-011 1.49E-010
-4.65 1.50E-011 -4.05E-011
-4.7 1.50E-011 8.56E-012
-4.75 1.51E-011 -3.71E-010
-4.8 1.52E-011 2.12E-010
-4.85 1.53E-011 -2.04E-010
-4.9 1.54E-011 -1.97E-012
-4.95 1.56E-011 -4.94E-010
-5 1.58E-011 -2.03E-010
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的问题是您输入的 x 坐标按递减顺序排列。
UnivariateSpline
期望它们按递增顺序排列。这是上面代码的更紧凑版本,它重现了您遇到的问题。 (您问题中的数据预计位于名为
data.txt
的文件中)。显然,这不起作用。
但是,如果您查看输入数据,您的“x”坐标将按降序排列。如果我们简单地反转输入“x”和“y”数据,它就可以完美工作。
Your problem is that your input x-coordinates are in decreasing order.
UnivariateSpline
expects them to be in increasing order.Here's a more compact version of your code above that reproduces the problems you were having. (The data you had in your question is expected to be in a file called
data.txt
).Obviously, that didn't work right.
However, if you take a look at your input data, your "x" coordinates are in decreasing order. If we simply reverse the input "x" and "y" data, it works perfectly.