【问题标题】:Iteration for the definition of a function函数定义的迭代
【发布时间】:2020-01-26 14:39:01
【问题描述】:

我想进行一次迭代以获得验证积分方程的函数。积分运算符隐藏在函数lambdaop 中。但是,我只是无法迭代出现错误的过程

文件“blablabla/.spyder-py3/temp.py”,第 11 行,在被积函数中 返回 -0.5*f(x)*scipy.special.expi(-abs(x-tau))

TypeError: 不能将序列乘以“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()

我没有看到任何其他类似我的主题,但如果它是重复的,请原谅。

【问题讨论】:

    标签: python function loops


    【解决方案1】:

    在您的 integrand 函数中添加一些打印语句。

    例如,

    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) 是错误消息的来源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-13
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多