乌龟画一条曲线
Turtle draws a curve
我有一个带有 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()
按照我阅读您脚本的方式,您正在为数据拟合一条直线。然后,您正在绘制 fit,linear 线,因为 plotRegression
将 return 拟合值 y
属于您的输入 x
(在`t.goto(...).
所以很奇怪你看到一条直线;你应该看到那个。
使用简单
for x, y in zip(x_acc, y_acc):
t.goto(x, y)
画出你的曲线。
注意:计算一次回归,然后对每个 x 进行评估更有意义。因此,创建一个函数 calcRegression
,returns a
和 b
,你的拟合参数,然后是一个 evalRegression
接受输入 x
(要么浮点数或浮点数数组)和 returns y
.
我不会调用函数 plotRegression
如果它实际上没有 plot 任何东西。
如果您打算将其用于科学计算,则最好使用 numpy/scipy/pandas 进行计算,例如用于绘图的 matplotlib。
如果它只是练习的一部分,没问题,但不要将它用于现实世界的问题,因为人们已经解决了这个问题(总体而言,更仔细,更详细)。
我有一个带有 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()
按照我阅读您脚本的方式,您正在为数据拟合一条直线。然后,您正在绘制 fit,linear 线,因为 plotRegression
将 return 拟合值 y
属于您的输入 x
(在`t.goto(...).
所以很奇怪你看到一条直线;你应该看到那个。
使用简单
for x, y in zip(x_acc, y_acc):
t.goto(x, y)
画出你的曲线。
注意:计算一次回归,然后对每个 x 进行评估更有意义。因此,创建一个函数
calcRegression
,returns a
和 b
,你的拟合参数,然后是一个 evalRegression
接受输入 x
(要么浮点数或浮点数数组)和 returns y
.我不会调用函数
plotRegression
如果它实际上没有 plot 任何东西。
如果您打算将其用于科学计算,则最好使用 numpy/scipy/pandas 进行计算,例如用于绘图的 matplotlib。
如果它只是练习的一部分,没问题,但不要将它用于现实世界的问题,因为人们已经解决了这个问题(总体而言,更仔细,更详细)。