函数定义的迭代

2024-10-02 08:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

为了得到一个验证积分方程的函数,我想进行一次迭代。积分运算符隐藏在函数lambdaop中。但是,我无法迭代得到错误的过程

File "blablabla/.spyder-py3/temp.py", line 11, in integrand return -0.5*f(x)*scipy.special.expi(-abs(x-tau))

TypeError: can't multiply sequence by non-int of type 'float'

我不明白。我在这里只做了两个函数,我的最终目标是进行n次迭代。我猜错误来自于定义不合适的函数的方式(可能不使用“lambda定义”…),但我不想创建一个大小为n的向量来代替函数,因为我想在之后对它进行积分。有人知道如何解决这个问题吗

import numpy as np
import matplotlib.pyplot as plt
import math
import scipy.integrate
import scipy.special

def initial(x):
    return x + 2/3

def integrand(f,x,tau):
    return -0.5*f(x)*scipy.special.expi(-abs(x-tau))

def lambdaop(f,x,tau):
    def step(x,tau):
        return integrand(f,x,tau)
    g = lambda tau: scipy.integrate.quad(step,0,np.inf,args=(tau,))
    return g

g = lambdaop(initial,1,2)
h = lambdaop(g,1,2)
print(h(5))

x = np.linspace(0,3,101)
y = np.linspace(0,3,101)
for i in np.arange(101):
     y[i] = h(x[i])[0]

plt.plot(x,y)
plt.show()

我还没有见过像我这样的主题,但如果是重复的,请原谅


Tags: 函数inimportreturndef错误npplt
1条回答
网友
1楼 · 发布于 2024-10-02 08:18:16

integrand函数中添加一些print语句

比如说,

def integrand(f,x,tau):
    print('   -')
    print('args:', f, x, tau)
    v = f(x)
    print(f'f({x})={v}')
    s = scipy.special.expi(-abs(x-tau))
    print(f's={s}')
    result = -0.5*v*s
    print('=====')
    return result

你会看到:

f(1.0)=(inf, inf)
s=-0.0037793524098489063

(inf, inf)是错误消息的来源

相关问题 更多 >

    热门问题