numpy Float()参数必须是字符串或数字,而不是‘Function’,这个代码有什么问题?

lh80um4z  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(146)

我正在尝试从基于变量‘t’值的两个函数中进行函数调用。但是“Float()参数必须是字符串或数字,而不是‘函数’”。请帮帮忙。

import numpy as np
import sympy as sym
import matplotlib.pyplot as plt

n = 9
t = np.linspace(0,10,n)
u = np.linspace(0.0,n)
v = np.linspace(0.0,n)
a = np.linspace(0.0,n)

def T_td(t,utd,vtd):
    t = sym.symbols('t')
    y = utd*sym.sin(5*t) + vtd*sym.cos(5*t)
    yp = y.diff(t)
    ypp = yp.diff(t)
    j = sym.lambdify(t,y)
    k = sym.lambdify(t,yp)
    l = sym.lambdify(t,ypp)
    return j,k,l

def td_T(t):
    t = sym.symbols('t')
    y = sym.sin(5*t) + sym.cos(5*t)
    yp = y.diff(t)
    ypp = yp.diff(t)
    j = sym.lambdify(t,y)
    k = sym.lambdify(t,yp)
    l = sym.lambdify(t,ypp)
    return j,k,l

def func(t,utd,vtd):
    if t < 5:
        u,v,a = td_T(t)
        utd = 0
        vtd = 0
    elif t == 5:
        u,v,a = td_T(t)
        utd = u
        vtd = v
    else:
        u,v,a = T_td(t,utd,vtd)
    return u,v,a,utd,vtd

# print(t)

for i in range(0,n,1):
    u[i],v[i],a[i],u_td,v_td = func(t[i],0,0)
uyhoqukh

uyhoqukh1#

  • func()返回的元组中的前3个值的类型为*<在0x1282cd090生成的函数_lambdify>**

目标是一堆稀疏的浮点数。
因此出现了错误

8yparm6h

8yparm6h2#

嗯,这段代码中有很多可能的错误。线性空格参数。td_TT_td的无用“t”参数(因为您在其中做的第一件事是用符号值覆盖t),主循环中明显无用的u_dtv_td
但导致您错误的原因是,uva是多个浮点数组。而你正试图强迫他们使用函数。
3 func返回的第一个值是td_TT_td函数返回的值。这都是sym.lambdify的结果。顾名思义,sym.lambdify返回的是函数,而不是浮点数。您应该使用一些参数来调用这些函数。由于我不知道你想要做什么,我也不知道哪些参数会是这些参数。但总得有一些吧。
否则,它就像你想要做的那样

u[i]=sin
v[i]=cos
a[i]=len

sincoslen是函数。sin(0)cos(0)len([])是数字。
同样,jkl您的td_TT_td函数返回也是函数。j(0)k(1)l(2)将是适合存储在u[i]及其同类中的数字。

相关问题