乌龟画一条曲线

时间:2015-11-01 23:02:15

标签: python math turtle-graphics

我有一个带有x和y坐标的文本文件,我用这个程序想要计算一条曲线,然而,结果是一条直线重复自己 数据作为x和y坐标单独导入。以下是处理此数据的代码

def plotDots(t,x_acc,y_acc):                       
    while x_acc and y_acc:
        t.pu()
        t.goto(x_acc[0],y_acc[0])
        t.pd()
        t.stamp()
        x_acc, y_acc=x_acc[1:], y_acc[1:]

def plotRegression(x,x_acc,y_acc):
    ave_x=sum(x_acc)/len(x_acc)                     #Calculating curve
    ave_y=sum(y_acc)/len(y_acc)
    n=len(x_acc)
    m=((x_acc[0]*y_acc[0])-(n*ave_x*ave_y))/(x_acc[0]**2-(n-x_acc[0]**2))
    y=ave_y+m*(x-ave_x)
    return y

def main():
    t=turtle.Turtle()
    wn=turtle.Screen()
    turtle.setworldcoordinates(-1000,-1000,1000,1000)
    doc=open("labdata.txt")
    line=doc.readline()
    y_acc=[]
    x_acc=[]
    while line:
        values=line.split()
        x_acc=x_acc +[float(values[0])]
        y_acc=y_acc +[float(values[1])]
        line=doc.readline()
    plotDots(t,x_acc,y_acc)
    for x in x_acc:
        t.goto(x, plotRegression(x,x_acc,y_acc))

    doc.close()
    wn.exitonclick()

main()

1 个答案:

答案 0 :(得分:1)

我阅读您的脚本的方式是,您需要为数据拟合线性线。然后,您将绘制 fit 线性行,因为dynamic_show.js.erb将返回属于您的输入{{1}的值拟合值plotRegression (在`t.goto(...)。中 所以你想知道一条直线;你应该看到它。

简单使用

y

画出你的曲线。

<小时/> 注意:计算回归一次更有意义,然后对每个x进行评估。所以创建一个函数x,返回for x, y in zip(x_acc, y_acc): t.goto(x, y) calcRegression,你的拟合参数,然后是一个a,它接受​​输入b(浮点数或数组)浮动)并返回evalRegression 如果函数x实际上没有绘制任何内容,我就不会调用它。

<小时/> 如果您打算将其用于科学计算,那么最好使用numpy / scipy / pandas进行计算,例如用于绘图的matplotlib。

如果它只是练习的一部分,没有问题,但不能用它来解决现实问题,因为人们之前已经解决了这个问题(总体而言,更仔细,更详细)。