【问题标题】:solve an integral equation by python用python求解一个积分方程
【发布时间】:2014-04-30 19:00:39
【问题描述】:

我需要在win7中用python 3.2解一个积分方程。

我想先找到一个初始的猜测解,然后在python中使用“fsolve()”求解。

这是代码:

import numpy as np
from scipy.optimize.minpack import fsolve
from cmath import cos, exp
from scipy.integrate.quadpack import quad

def integrand2(x, b):
    return exp(-x)/b 

def intergralFunc2(b):
    integral,err = quad(integrand2, 0, 10, args=(b))  // **error here** 
    return 0.01 - integral

import matplotlib.pyplot as plt

def findGuess():
    vfunc = np.vectorize(intergralFunc2)
    f = np.linspace(-20, 20,10)
    plt.plot(f, vfunc(f))
    plt.xlabel('guess value')
    plt.show()

def solveFunction():
    y= fsolve(intergralFunc2, 10)
    return y


if __name__ == '__main__':
    findGuess()
    solution = solveFunction()
    print("solution is ", solution)

我收到错误:

 quadpack.error: Supplied function does not return a valid float.

任何帮助将不胜感激。

【问题讨论】:

  • 您不能将cmath 中的函数与 NumPy/SciPy 混合使用,因为它们不适用于 NumPy 数组。 (这不是您问题的唯一原因。)您应该只使用 from ... import 从包中导入模块,然后使用限定名称来访问函数——否则,您会在 NumPy 和标准库函数。
  • 尝试使用from numpy import cos, exp 而不是使用cmath
  • 它有效,谢谢!但是,当我更改 integrand2 时,我得到了同样的错误,以便我可以求解嵌入另一个积分 eq 的积分方程。我会发一个新帖子。

标签: python python-3.x numpy scipy


【解决方案1】:

刚刚进行了以下更改,它应该可以工作(它对我有用)。

删除:

from cmath import exp, cos

包括:

from numpy import exp, cos

如 cmets 中所述,cmath 函数仅接受 float 输入,而不接受数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-01
    • 2014-04-21
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2011-05-25
    • 2014-03-22
    相关资源
    最近更新 更多