将一个函数生成的多项式系数传递给另一个函数

1 投票
2 回答
528 浏览
提问于 2025-04-16 22:21

我正在为我的项目写一个比较大的Python程序,现在遇到了一个问题,搞不清楚怎么解决。下面是我的代码。

poly = [[k6,3], [k5,2], [k4,1], [k0,0]]

w = 5  # weight for rational bezier curve equation

def time() :
    with open(transcriptionFile, "r") as tFile :
            for line in tFile :
                li = line.split()
                if li :
                    start_time = (int(li[0]) / 10000000.)
                    end_time = (int(li[1]) / 10000000.) 
                    duration = ((int(li[1]) -int(li[0]))/10000000.)
                    print start_time,' ',end_time,' ',duration
                    poly_coeff(start_time, end_time, duration)

def poly_coeff(stime, etime, dur) :
    """The equation is k6 * u^3 + k5 * u^2 + k4 * u + k0 = 0. Computing the        coefficients of this equation."""
    """Substituting the required values we get the coefficients."""
    t_u = dur
    t0 = stime
    t3 = etime
    t1 = t2 = (stime + etime) / 2
    w0 = w1 = w2 = w3 = w
    k0 = w0 * (t_u - t0)
    k1 = w1 * (t_u - t1)
    k2 = w2 * (t_u - t2)
    k3 = w3 * (t_u - t3)
    k4 = 3 * (k1 - k0)
    k5 = 3 * (k2 - 2 * k1 + k0)
    k6 = k3 - 3 * k2 + 3 * k1 -k0 
    print k0, k1, k2, k3, k4, k5, k6

if __name__ == "__main__" :

    if len(sys.argv) != 2 : 
        Usage() 

    else :
        transcriptionFile = sys.argv[1]

        time()

    Newton(poly, 0.42, 1, 0)

我有一个包含开始时间、结束时间和持续时间的列表。所有这些信息都会传递给一个叫做poly_coeff()的函数,用来生成多项式的系数。列表里有多少项,就会生成多少个多项式。然后,对于每个生成的多项式,它对应的系数需要传递给Newton()函数,以进行其他计算。在代码的开头,这个多项式用poly来表示。在poly中,生成的每个k6、k5、k4和k0值都应该被传递过去。当然,我并不是在问怎么做,只是想让大家明白我想要实现的目标。请帮帮我。非常感谢!

2 个回答

1

要返回一个函数或方法计算的结果,你需要使用 return 这个语句。

poly_coeff() 这个函数里:

...
return k0, k1, k2, k3, k4, k5, k6

这样就可以了。你可以像下面这样把结果保存到你 time() 函数里的变量中:

...
k0, k1, k2, k3, k4, k5, k6 = poly_coeff(start_time, end_time, duration)
# do something with the values here ....

更新:脚本中的第一行不工作,因为在那个时候 k6 等并不存在。一个选择是把 poly 在你的 poly_coeff 函数里返回。例如这样:

def poly_coeff(...):
    ...
    return [[k6,3], [k5,2], [k4,1], [k0,0]]

现在,在 time 函数里你可以这样获取 poly

def time():
    ...
    poly = poly_coeff(...)
1

你的代码流程有点让人困惑。我猜测你是想对输入文件中的每一行计算多项式,然后调用 Newton(poly, 0.42, 1, 0)

我把你的 time() 函数改成接受文件名作为参数,并且把你的 poly_coeff 方法改成返回你计算出的多项式。然后在 time() 中的 for line in tFile: 循环里,我从 poly_coeff() 得到结果,并把它传递给 Newton()

希望这能接近你想要做的事情……

def time(fileName) :
    with open(fileName, "r") as tFile :
            for line in tFile :
                li = line.split()
                if li :
                    start_time = (int(li[0]) / 10000000.)
                    end_time = (int(li[1]) / 10000000.) 
                    duration = ((int(li[1]) -int(li[0]))/10000000.)
                    print start_time,' ',end_time,' ',duration

                    poly = poly_coeff(start_time, end_time, duration)
                    Newton(poly, 0.42, 1, 0)

def poly_coeff(stime, etime, dur) :
    """The equation is k6 * u^3 + k5 * u^2 + k4 * u + k0 = 0. Computing the        coefficients of this equation."""
    """Substituting the required values we get the coefficients."""
    w = 5  # weight for rational bezier curve equation

    t_u = dur
    t0 = stime
    t3 = etime
    t1 = t2 = (stime + etime) / 2
    w0 = w1 = w2 = w3 = w
    k0 = w0 * (t_u - t0)
    k1 = w1 * (t_u - t1)
    k2 = w2 * (t_u - t2)
    k3 = w3 * (t_u - t3)
    k4 = 3 * (k1 - k0)
    k5 = 3 * (k2 - 2 * k1 + k0)
    k6 = k3 - 3 * k2 + 3 * k1 -k0 
    print k0, k1, k2, k3, k4, k5, k6

    return [[k6,3], [k5,2], [k4,1], [k0,0]]


if __name__ == "__main__" :
    if len(sys.argv) != 2 : 
        Usage()
    else :
        transcriptionFile = sys.argv[1]

        time(transcriptionFile)

撰写回答