Python 插值与求根

Python 插值与求根,python,max,root,interpolation,Python,Max,Root,Interpolation,对于一个任务,我必须插值数据[线性插值和立方插值],并创建两个图形,将数据显示为点,插值显示为线。我还必须绘制数据的最大值。我得到了所有这些工作,但被分配了额外学分的最后一部分,并不能找出它。V代表电压,I代表电流 额外分配:扩展您的程序,以便它还可以使用另一种称为“根查找”的方法确定最大电流和相应的电压。要实现这一点,您需要对函数进行数字区分。名为“diff”的numpy函数将非常有用。然后,要执行根查找,可以使用scipy.optimize库中的“brentq”函数 from pyl

对于一个任务,我必须插值数据[线性插值和立方插值],并创建两个图形,将数据显示为点,插值显示为线。我还必须绘制数据的最大值。我得到了所有这些工作,但被分配了额外学分的最后一部分,并不能找出它。V代表电压,I代表电流

额外分配:扩展您的程序,以便它还可以使用另一种称为“根查找”的方法确定最大电流和相应的电压。要实现这一点,您需要对函数进行数字区分。名为“diff”的numpy函数将非常有用。然后,要执行根查找,可以使用scipy.optimize库中的“brentq”函数

    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,或者如何使用它们来找到最大电流和电压

   #load text into two variables V[Voltage] and I[Current]
   V, I = loadtxt('data1(1).txt', unpack = True, skiprows = 1)

   f_line = interp1d(V, I, 'linear')
   new_V = linspace(0, 12, 1000) #array of new voltages created
   d = diff(new_V, 1)

   r = brentq(d)
   print r


        10 d = diff(new_V, 1)
        11 
  --->  12 r = brentq(d)
        13 print r

  TypeError: brentq() takes at least 3 arguments (1 given) 

我理解错误的意思,但我真的不知道正确的参数,以便按照要求通过根查找找到最大电流和电压。任何建议都将不胜感激。

请看,它抛出的错误不仅仅是为了让您烦恼,它实际上包含了关于错误的有用信息。您可以使用这些信息来修复代码,如果您愿意提供错误消息,我们也可以。我编辑了以下代码,并在需要时进行了更正。我还包括了错误。同样,真正的问题是我不明白如何使用函数diff和brentq来找出老师问的[最大电压和最大电流]。