微分演绎

0 Comments

李兴球Python微分演译

李兴球Python微分演译

"""
  微分演绎.py
  本函数演示二次函数 y = x*x/200在某点的微分,或者说变化率,即斜率k。
  在本例中的取x为100处的导数,根据求导公式,y的导函数应该是0.01x,
  所以在x为100处,斜率应该是1,所以y的值是100*100/200。
  sprites模块为turtle模块增强版。
  本程序没有用到Python精灵模块的增强功能,可稍加修改为turtle模块实现。
"""
from sprites import *

c = Turtle()
c.pendown()
c.fd(300)
c.stamp()
c.bk(600)
c.fd(300)
c.left(90)
c.fd(300)
c.stamp()
c.bk(600)
c.home()
c.penup()
c.goto(100,-20)
c.write('(100,0)',align='center',font='楷体 12 normal')
# y = x*x / 200             # 二次函数
f = lambda x: x*x/200
for x in range(-240,240):
    c.goto(x,f(x))
    c.dot(2)
    
m = Sprite('blank')
m.pensize(2)

step = 100
x0 = 100
while step>0.01:
    m.clear()
    m.goto(x0,0)
    m.pendown()
    m.goto(x0,f(x0))
    m.up()
    m.goto(x0+step,0)
    m.pendown()
    m.goto(x0+step,f(x0+step))
    m.up()
    k = (f(x0+step)-f(x0))/step  # 变化率    
    b = f(x0) - k * x0
    k,b = round(k,6),round(b,6)
    
    first = 0,b
    second = 200, k*200 + b
    m.goto(first)
    m.down()
    m.goto(second)
    m.up()
    step = step/1.1
    m.goto(0,-150)
    m.write(f'斜率:{k},   y截距:{b}',align='center',font='楷体 22 normal')
    m.wait(0.2)
 
c.ht()
c.screen.mainloop()



发表评论