问题标签 [quad]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何在python中用积分对方程进行二重积分?
我正在尝试将此功能集成到 Python 中:
I = 积分(积分(g(y) * ln[f(x,y)/g(y)] dx) dy) 其中 g(y) = 积分(f(x,y)dx) 从 0 到 1
然而,当我运行我的代码时,我发现“g”是常数,而“I”是负数。我是否错误地使用了 quad 函数?g怎么可能是常数?
arrays - 使用 scipy.integrate.quad 和 nquad 集成数组“不返回有效浮点数”
我想绘制一个接受数字的函数,将其用作积分中的参数,并返回积分的结果。当我输入一个浮点数时,该函数返回值就好了。但是当我给它类似 numpy.linspace(0,3,500) 的东西时,我函数中的“quad”模块反应很糟糕。
我已经查找了使用“nquad”的建议,因为它在数组上更好。此外,我已经阅读了文档并查找了错误,但没有一个示例/解决方案似乎涉及我的特殊情况。
这是我的函数,以及运行它们时出现的错误。
quad:“提供的函数没有返回有效的浮点数”
nquad:与“quad”相同的错误。这次是完整的、自我维持的代码。我使用了一个带有单个浮点数的函数。
python - 将函数与 Python (sympy, quad) 集成,结果是我要绘制的另一个函数
我想使用 python 集成一个函数,其中输出是一个新函数而不是一个数值。例如,我有一个方程(来自 Arnett 1982——超新星的分析描述):
然后我想找到 A 的积分,然后绘制结果。首先,我天真地尝试了 scipy.quad:
其中 B 也是一个预定义函数(此处未介绍)。A 和 B 都是 z 的函数,但最终方程是时间 t 的函数。(我相信正是在这里我导致我的代码失败。)
A 和 B 的积分从零到 x,其中 x 是时间 t 的函数。尝试按原样运行代码会给我一个错误:“ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”。
因此,经过短暂的搜索后,我认为也许 sympy 将是要走的路。但是我也失败了。
我想知道是否有人对如何完成这项任务有帮助?
非常感谢,扎克
python - scipy.quad 在大范围内减少函数的麻烦
我有一个问题scipy.quad
。简而言之,我有一组非常长且复杂的嵌套函数和积分,其中包括必须在特定范围 10^2 < x < 10^20 内积分的递减函数的积分。
为了简单地演示这个问题,考虑使用 y=x^(-2) 在这些值之间的积分numpy.quad
:
这个积分的真正答案是 0.01,但是 quad 返回一个非常小的值,并且通过取消注释函数中的打印行,您可以看到它只对最大的 x 值进行积分(或者由于x 轴)。我需要找到一些方法来解决这个问题。
我知道您可以通过使用其他方法(例如辛普森一家或梯形规则)得到正确答案:
但是,这些包括将数组传递给函数,这在我的实际代码中是不可能的。因此,我必须包含一个 for 循环来生成要与之集成的 y 数组,这会不可接受地减慢整个程序的速度。
有什么技巧可以让 quad 用于这种 x 范围,或者像 quad 一样工作的东西,我可以用它来代替吗?
python - 增加四边形中的节点数
这可能是一个简单的问题,但我正在尝试增加四元集成中的节点数量。我找不到有关此的相关文档。
我有一个一维函数(Dirac delta-like),它大部分为零,但在非常窄的间隔内非零。因此自适应四边形无法捕捉该间隔并返回零。我试图通过在更多点采样来捕捉那个峰值。你怎么做到这一点?SciPy 文档并没有说明太多。
这个窄峰的位置发生了变化。我不知道峰的确切位置。
python - Python:在渐近区域附近求解
对于E=0.46732451
并且t=1.07589765
我正在尝试求解积分的上限 t= \int_{0}^{z} 1/sqrt(2*(0.46732451-z**2)),我绘制了这个函数,它看起来像这样.
它周围t=1
有一种渐近线。
我有以下代码
但是这段代码只是输出猜测值,不管我放什么,所以我猜这与曲线在那里渐近的事实有关。我应该注意,此代码适用于t
远离渐近区域的其他值。
谁能帮我解决这个问题?
谢谢
编辑玩了一段时间后,我解决了这个问题,但它是一种拼凑而成,它只适用于不是一般的类似问题(或者是吗?)
z
我进行了以下更改:可以达到的最大值是sqrt(0.46732451)
,所以我在to之间设置x0=0.5*np.sqrt(0.46732451)
和设置,然后 out 弹出正确答案。我对此没有任何解释,也许这方面的专家可以提供帮助? factor
0.1
1
python-2.7 - Python 错误:函数没有返回有效的浮点数
我正在定义这个 voigt 模型函数来拟合曲线,但我收到一条错误消息,指出“提供的函数没有返回有效的浮点数”。以下是拟合例程,然后是错误。谁能帮忙找出错误?提前致谢
然后它给
python - Python 与 MATLAB 计算具有不同结果的无穷大积分,替代方案(即将 Gauss-Legendre 正交扩展为 -x-> Infinity)?
对于(-x 或 0)-> 无穷大的积分,我在 MATLABquadgk
和 Python 的例程之间得到不一致的结果。quad
我相信 MATLAB 版本是正确的(基于将flag
参数从 1 切换到 -1 的感觉检查),而 Python 版本给出了错误的结果,在这种情况下为 0。MATLAB 产生 0.1022。它们是相同的integrands
,我已经完成了每一步,甚至将x
MATLAB 生成的值插入quadgk
到 Python 中(这导致 Python 版本生成与 MATLAB 相同的值,只需将它们传递给integrand
函数)。在这一点上,我希望在这里使用另一个例程而不是 SciPy,例如 Gauss-Legendre 正交https://sourceforge.net/projects/fastgausslegendrequadrature/但我不知道如何将其从 a/b 范围扩展到 -a->infinity (我见过这些方法只能达到有限数量:
numpy 中 Gauss-Legendre 求积的不同区间而b=np.Inf
导致NaN
. 也不确定如何从返回的节点和权重设置集成,虽然我一直在阅读转换但仅适用于 a 和 b 有限范围:https : //pomax.github.io/bezierinfo/legendre-gauss.html或者如果有人知道可以处理这个问题的 Python 库 - 我真的不喜欢quad
没有矢量化的事实,并且可能会在 Cython 中编写代码,因为我必须快速集成 600,000 个函数(即链接到 C++ 库上面的链接)。这里真正奇怪的是,我设法通过向上移动来获得相同的结果vol
在任何地方输入 >= 0.39,低于 Python 的结果在 0 处崩溃。非常令人困惑。任何帮助表示赞赏,自从微积分以来已经有好几年了......这是Python代码:
这是 MATLAB 代码(必须保存integrand
为 .M,然后才能在命令窗口中输入脚本):
% 脚本部分
我应该注意到,当这些输入被传递时,MATLAB 和 Python 使用 quad 生成相同的结果(转置上述变量):
python-2.7 - 数值积分 python
我需要减少 python 中 quad() 的运行时间(我正在整合数千个积分)。我在这里发现了一个类似的问题,他们建议进行多次集成并添加部分值。但是,这并不能提高性能。有什么想法吗?这是一个简单的例子:
python - 无法理解 dblquad 的这种行为
在这种情况下,我认为简单的积分应该是 1,但 dblquad 固执地说 0.81。
细节:下面的函数 createFun 返回一个真实的函数。它是分段线性的,旨在成为随机变量的密度函数,该函数采用 [-b, 1-a] 中的值
现在,对于特定值 a=0 和 b=0.2,我构建了一个这样的函数。
首先,我确保 [-b, 1-a] 中的积分确实是 1:
到目前为止还好。现在,我将函数 g:RxR --> R 定义为 g(y,x) = f1(x) * f1(y)。
我期望 g 在平方 [-b, 1-a] x [-b, 1-a] 中的二重积分应该是每个变量中积分的乘积(g 被分解为 x 和 a 的函数y) 的函数,都是 1,所以我期望 1*1=1。但是代码
显示 0.8161,具有非常低的 1E-10 阶误差。
我的数学错了吗,由于某种原因,这个积分不是 1?或者是,但我没有正确使用 dblquad?那应该怎么做呢?