Hermes_Dong 2021-05-09 20:51 采纳率: 100%
浏览 139
已采纳

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条回答 默认 最新

  • CSDN专家-HGJ 2021-05-09 23:43
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题