我无法修复此错误。我花了将近一天但仍然

问题描述 投票:0回答:0

我见过类似的案例,但大多数都与字符串有关。
我的是一个纯函数。我的数组和函数:

L=5, n0=4
n=np.arange(1,n0), x = np.arange(-L, L), t = np.linspace(0,1, 5)
def eignfun(n,x):
    #n=np.array(n)
    eigf = np.zeros((len(n), len(x)))
    for i in range(len(n)):
        for j in range(len(x)):
            eigf[i,j] = -np.exp(-(x[j] - 2)**2) * np.cos(((n[i] * np.pi)/(2 * L))*(x[j] + L))
    return eigf

def fnt(n, t):
    fntt = np.zeros((len(n), len(t)))
    dfdt = derivative(f, t, dx=1e-6, n=1)
    d3fdt = derivative(f, t, dx=1e-10, n=3, order=5)
    for i in range(len(n)):
        integral = quad(eignfun, -L, L, args=(n[i],))
        for j in range(len(t)):
            fntt[i, j] = np.exp(-kn[i]*h0) * ((kn[i]*gr*dfdt[j] - d3fdt[j])/kn[i]) * integral[0]
    return fntt

eigfun(n,x) 接受数组 n 和 x,并给出预期的结果。但是函数
fnt(n,t) 不取数组 n 和 t,它给出错误:

eigf = np.zeros((len(n), len(x)))

TypeError: object of type 'float' has no len() 

这与函数 eignfun(n,x) 有着惊人的联系。

例如,这里是函数 eignfun(n,x) 的结果:

eignfun(x, n)
Out[120]: 
array([[ 3.67879441e-01,  4.28626380e-16, -3.67879441e-01,
        -1.00935848e-17],
       [-1.13680999e-01,  8.09016994e-01,  2.97620720e-01,
        -5.65984368e-03],
       [-2.97620720e-01, -9.51056516e-01, -1.13680999e-01,
         1.07656624e-02],
       [ 2.97620720e-01,  3.09016994e-01, -1.13680999e-01,
        -1.48176631e-02],
       [ 1.13680999e-01,  5.87785252e-01,  2.97620720e-01,
         1.74192077e-02],
       [-3.67879441e-01, -1.00000000e+00, -3.67879441e-01,
        -1.83156389e-02],
       [ 1.13680999e-01,  5.87785252e-01,  2.97620720e-01,
         1.74192077e-02],
       [ 2.97620720e-01,  3.09016994e-01, -1.13680999e-01,
        -1.48176631e-02],
       [-2.97620720e-01, -9.51056516e-01, -1.13680999e-01,
         1.07656624e-02],
       [-1.13680999e-01,  8.09016994e-01,  2.97620720e-01,
        -5.65984368e-03]])



import numpy as np
from scipy.integrate import quad
from scipy.optimize import fsolve
from scipy.misc import derivative
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt

L = 5
gr = 10
h0 = 1
x0 = 2
n0 = 5
n=np.arange(1,n0)
x = np.arange(-L, L)
#z = np.linspace(-h0, 0, 10)
t = np.linspace(0,1, 5)
kn = np.array([(i * np.pi) / (2 * L) for i in range(1,len(n)+1)]) # i must start at 1 so i in range(1, len(n)+1)
def xn(n, x):
    xn = np.zeros((len(n), len(x)))
    for i in range(len(n)):
        for j in range(len(x)):
            xn[i, j] = np.cos(kn[i] * (x[j] + L))
    return xn
xnx = xn(n, x)
#print(np.shape(xnx))
def f(t):
    return np.tanh(t**3)
#f=f(t)
def g(x):
    return -np.exp(-(x - x0)**2)
omega_n = np.array([np.sqrt(gr * kn[i] * np.tanh(kn[i] * h0)) for i in range(len(n))])
def eignfun(n,x):
    #n=np.array(n)
    eigf = np.zeros((len(n), len(x)))
    for i in range(len(n)):
        for j in range(len(x)):
            eigf[i,j] = -np.exp(-(x[j] - 2)**2) * np.cos(((n[i] * np.pi)/(2 * L))*(x[j] + L))
    return eigf
def fnt(n, t):
    fntt = np.zeros((len(n), len(t)))
    dfdt = derivative(f, t, dx=1e-6, n=1)
    d3fdt = derivative(f, t, dx=1e-10, n=3, order=5)
    for i in range(len(n)):
        integral = quad(eignfun, -L, L, args=(n[i],))
        for j in range(len(t)):
            fntt[i, j] = np.exp(-kn[i]*h0) * ((kn[i]*gr*dfdt[j] - d3fdt[j])/kn[i]) * integral[0]
    return fntt
eignfun(x, n)
fnt(t, n)
python arrays numpy scipy spyder
© www.soinside.com 2019 - 2024. All rights reserved.