正交错误:/ 不支持的操作数类型:“函数”和“符号”

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

所以我是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'不受支持的操作数类型”。任何对初学者友好的解决这个问题的方法都会有所帮助,谢谢:)

scipy sympy quad
1个回答
0
投票

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)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.