Hermes_Dong
Hermes_Dong
采纳率100%
2021-05-09 20:51 阅读 66

Python在for循环中如何给导数表达式赋值

import sympy#导入sympy库
import matplotlib.pyplot as plt#导入matplot库
lab = 90
lbc = 150
lcd = 180
lad = 130
lbe = 75
lef = 45#定义长度
t = sympy.Symbol('t')#将变量符号化
xB=-130+sympy.cos(100*t)
yB=90+sympy.sin(100*t)
A = 2*lbc*(-xB)
B = 2*lbc*(-yB)
lbd=pow(xB**2+yB**2,0.5)
C = pow(lbc,2)+pow(lbd,2)-pow(lcd,2)
D=B+pow(A**2+B**2-C**2,0.5)
E=D*pow(A+C,-1)
anglea=2*sympy.atan(E)
xC=xB+lbc*sympy.cos(anglea)
yC=yB+lbc*sympy.sin(anglea)
xE=(xB+xC)/2.0
yE=(yB+yC)/2.0
xF=xE-lef*sympy.sin(anglea)
yF=yE+lef*sympy.cos(anglea)#利用公式求出F点横纵坐标表达式
def sympy_derivativea():# 定义表达式的变量名称
    return sympy.diff(xF, t)
vFx = sympy_derivativea()
def sympy_derivativeb():# 定义表达式的变量名称
    return sympy.diff(yF, t)
vFy = sympy_derivativeb()
def sympy_derivativec():# 定义表达式的变量名称
    return sympy.diff(vFx, t)
aFx = sympy_derivativec()
def sympy_derivatived():# 定义表达式的变量名称
    return sympy.diff(vFy, t)
aFy = sympy_derivatived()
cita=0#定义初始角度
xFs=[]
yFs=[]
vFxs=[]
vFys=[]
aFxs=[]
aFys=[]#创建一个空列表,记录数据
for cita in range(0,361):#进入循环
    fi=cita*3.14159265/180.0#角度转化为弧度
    t=fi/100.0
    xB=-130+sympy.cos(100*t)
    yB=90+sympy.sin(100*t)
    A = 2*lbc*(-xB)
    B = 2*lbc*(-yB)
    lbd=pow(xB**2+yB**2,0.5)
    C = pow(lbc,2)+pow(lbd,2)-pow(lcd,2)
    D=B+pow(A**2+B**2-C**2,0.5)
    E=D*pow(A+C,-1)
    anglea=2*sympy.atan(E)
    xC=xB+lbc*sympy.cos(anglea)
    yC=yB+lbc*sympy.sin(anglea)
    xE=(xB+xC)/2.0
    yE=(yB+yC)/2.0
    xF=xE-lef*sympy.sin(anglea)
    yF=yE+lef*sympy.cos(anglea)#在循环中遍历求得F点横纵坐标
    xFs.append(xF)
    yFs.append(yF)#将输出数据记录导入列表内
for cita in range(0,361):#进入循环
    fi=cita*3.14159265/180.0#角度转化为弧度
    t=fi/100.0
    vFx=vFx.evalf(subs ={'t':t})
    vFy=vFy.evalf(subs ={'t':t})
    aFx=aFx.evalf(subs ={'t':t})
    aFy=aFy.evalf(subs ={'t':t})#在循环中遍历求得F点速度与加速度
    vFxs.append(vFx)
    vFys.append(vFy)
    aFxs.append(aFx)
    aFys.append(aFy)#将输出数据记录导入列表内
plt.title("F-point trajectory curve",fontsize=24)
plt.xlabel("X-axis of point F",fontsize=14)
plt.ylabel("Y-axis of point F",fontsize=14)
plt.scatter(xFs,yFs,c='blue',edgecolor='none')
plt.show()#布置画布并输出轨迹图

求出来的xF与yF正常,但是vF,aF都是同一个值

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    technologist_09 CSDN专家-HGJ 2021-05-09 23:43

    建议将for cita in range(0,361):进行修改,将t 作为循环变量,你尝试一下。

    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 2021-05-10 10:50

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 2021-05-11 15:39

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

    速戳参与调研>>>https://t.csdnimg.cn/Kf0y

    点赞 评论 复制链接分享

相关推荐