对于作业,我必须对数据进行插值[线性插值和三次插值],并创建两个图形,将数据显示为点,将插值显示为直线。我还要画出数据的最大值。我把所有这些工作都做了,但最后一部分却被分配到额外的学分,我想不通。V代表电压,I代表电流。在
额外任务:扩展你的程序,这样它也可以确定最大电流,以及相应的电压,使用一种不同的方法称为“寻根”。要实现这一点,需要对函数进行数值微分。(名为“diff”的numpy函数将很有用。)然后要执行根查找,可以使用scipy.optimize公司图书馆。在
from pylab import *
from scipy.interpolate import interp1d
from scipy.optimize import brentq
#load text into two variables V[Voltage] and I[Current]
V, I = loadtxt('data1(1).txt', unpack = True, skiprows = 1)
#voltage and current interpolated[linear]
f_line = interp1d(V, I, 'linear')
new_V = linspace(0, 12, 1000) #array of new voltages created
new_I = f_line(new_V) #array of new currents created from interpolated data
#voltage, current, new voltage, and new current plotted.
plot(V, I, 'ro', new_V, new_I, 'b-')
plot(max(new_I), 'go') #max current plotted
title("Linear Interpolation")
xlabel("Voltage (V)")
xlim(0,12)
ylabel("Current (mA)")
legend(['Data', 'linear Interp', 'Max Current'], loc = 'best')
show()
print "The maximum current is", max(new_I), "mA"
#voltage and current interpolated[cubic]
f_cube = interp1d(V, I, 'cubic')
new_V = linspace(0, 12, 1000) #array of new voltages created
new_I = f_cube(new_V) #array of new currents created from interpolated data
index = argmax(new_I) #index of max current
#voltage, current, new voltage, and new current plotted.
plot(V, I, 'ro', new_V, new_I, 'b-')
plot(new_V[index], max(new_I), 'go') #max current and voltage plotted
title("Cubic Interpolation")
xlabel("Voltage (V)")
xlim(0,12)
ylabel("Current (mA)")
ylim(0,1.4)
legend(['Data', 'linear Interp', 'Max Current'], loc = 'best')
show()
print "The maximum current is", max(new_I), "mA"
print "The corresponding maxium voltage is", new_V[index], "V"
上面所有的代码都可以工作,但这是最后一部分,我不确定如何开始。如有任何建议或帮助,我将不胜感激。我确实尝试过,但它抛出了一个错误,我真的不知道如何处理它,因为我不太了解正在使用的函数(diff,brentq),也不知道如何使用它们来找到最大电流和电压。在
^{pr2}$我明白错误是怎么说的,但我真的不知道正确的论点,为了找到最大的电流和电压,通过“根查找”被要求。如有任何建议,我们将不胜感激。在
目前没有回答
相关问题 更多 >
编程相关推荐