我正在尝试从基于变量‘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)
2条答案
按热度按时间uyhoqukh1#
目标是一堆稀疏的浮点数。
因此出现了错误
8yparm6h2#
嗯,这段代码中有很多可能的错误。线性空格参数。
td_T
和T_td
的无用“t”参数(因为您在其中做的第一件事是用符号值覆盖t
),主循环中明显无用的u_dt
和v_td
。但导致您错误的原因是,
u
、v
和a
是多个浮点数组。而你正试图强迫他们使用函数。3
func
返回的第一个值是td_T
和T_td
函数返回的值。这都是sym.lambdify
的结果。顾名思义,sym.lambdify
返回的是函数,而不是浮点数。您应该使用一些参数来调用这些函数。由于我不知道你想要做什么,我也不知道哪些参数会是这些参数。但总得有一些吧。否则,它就像你想要做的那样
sin
、cos
或len
是函数。sin(0)
、cos(0)
和len([])
是数字。同样,
j
、k
、l
您的td_T
和T_td
函数返回也是函数。j(0)
、k(1)
、l(2)
将是适合存储在u[i]
及其同类中的数字。