所以我是Python新手,并使用它作为研究工具。所以请原谅我的菜鸟态度:D
我想绘制一个由积分定义的函数(无法解析求解),自变量是该积分的下界。在进行这一步之前,我想检查数值积分是否在单个点上有效(即积分的下限为 4),看看一切是否都按顺序进行。在下面的代码中,“Int”是被积函数,其中还有函数“b”和“f”,这两个函数都是“r”的函数。
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
import sympy as smp
from scipy.integrate import quad
r = smp.symbols('r', real = True)
s = 1
Mu = 0.5
lamb = 0.6
b = lambda r: ((r - s) * lamb + (s**2)*r)/(s*r)
f = lambda r: (1 - lamb/(s*r))**((s**2 + lamb)/lamb)
Int = 1/(r*((1 - b/r)*((r**2)/(Mu**2)*(1/f) - 1))**smp.Rational(1/2))
quad(Int, 4, smp.oo)
运行上述命令时,我收到此错误:“TypeError:/:'function'和'Symbol'不受支持的操作数类型”。任何对初学者友好的解决这个问题的方法都会有所帮助,谢谢:)
Package
scipy
和 sympy
并不真正意味着可以一起工作。
下面是仅基于 scipy
的数值积分的简单示例。
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate
s = 1
Mu = 0.5
lamb = 0.6
def b(r):
return ((r - s) * lamb + (s ** 2) * r) / (s * r)
def f(r):
return (1 - lamb / (s * r)) ** ((s ** 2 + lamb) / lamb)
def integrand(r):
return 1. / np.sqrt(r * ((1 - b(r) / r) * ((r ** 2) / (Mu ** 2) * (1. / f(r)) - 1.)))
I, sI = integrate.quad(integrand, 4, np.inf)
# (0.5013559837575466, 6.12428263657705e-09)