- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于从 (-x 或 0) -> 无穷大的积分,我在 MATLAB 的 quadgk
和 Python 的 quad
例程之间得到不一致的结果。我相信 MATLAB 版本是正确的(基于将 flag
参数从 1 切换到 -1 的意义检查),而 Python 版本给出错误的结果,在本例中为 0。MATLAB 产生 0.1022。 被积函数
是相同的,我已经列出了每一步,甚至将 MATLAB 的 quadgk
生成的 x
值插入到 Python 中(结果在 Python 版本中生成与 MATLAB 相同的值,只是将它们传递给 integrand
函数)。在这一点上,我希望使用另一个例程而不是 SciPy,例如这里的 Gauss-Legendre 正交 https://sourceforge.net/projects/fastgausslegendrequadrature/但我不确定如何将它从它的 a/b 范围扩展到 -a->infinity (我已经看到这些方法只能达到有限的数量:
Different intervals for Gauss-Legendre quadrature in numpy而 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 代码:
from scipy.stats import norm, lognorm
from scipy.integrate import quad
import numpy as np
def integrand(x, flag, F, K, vol, T2, T1):
d1 = (np.log(x / (x+K)) + 0.5 * (vol**2) * (T2-T1)) / (vol * np.sqrt(T2 - T1))
d2 = d1 - vol*np.sqrt(T2 - T1)
mu = np.log(F) - 0.5 *vol **2 * T1
sigma = vol * np.sqrt(T1)
value = lognorm.pdf(x, scale=np.exp(mu), s=sigma) * (flag * x*norm.cdf(flag * d1) - flag * (x+K)*norm.cdf(flag * d2))
return value
if __name__ == '__main__':
flag = 1
F = 54.31
K = 1.1967
vol = 0.1328
T2 = 0.0411
T1 = 0.0137
quad(integrand, 0, np.Inf, args=(flag, F, K, vol, T2, T1), epsabs=1e-12)[0]
这是 MATLAB 代码(必须将 被积函数
保存为 .M 然后可以在命令窗口中输入脚本):
function value = integrand(x, flag, F,K,vol,T2,T1)
d1 = (log(x ./ (x+K)) + 0.5 .* (vol.^2) .* (T2-T1)) ./ (vol .* sqrt(T2 - T1));
d2 = d1 - vol.*sqrt(T2 - T1);
mu = log(F) - 0.5 .*vol .^2 .* T1;
sigma = vol .* sqrt(T1);
value = lognpdf(x, mu, sigma) .* (flag .* x.*normcdf(flag .* d1) - flag .* (x+K).*normcdf(flag .* d2));
end
% 脚本部分
flag = 1
F = 54.31
K = 1.1967
vol = 0.1328
T2 = 0.0411
T1 = 0.0137
quadgk(@(x) integrand(x,flag, F, K, vol, T2, T1), 0, Inf, 'AbsTol',1e-12)
我应该注意到,当传递这些输入(转置以上变量)时,MATLAB 和 Python 使用 quad 生成相同的结果:
current_opt = [ -1.0000 1.2075 0.1251 0.4300 0.0685 0.0411
1.0000 1.2075 0.0512 0.5600 0.0685 0.0411]
最佳答案
好的,这很有趣。除非将 epsabs
变量设置得离谱地高,否则集成会分崩离析。我已经设法使用 epsabs=-1e1000
在 MATLAB 和 Python 之间复制结果。尽可能慢,但至少它有效。
关于Python 与 MATLAB 计算无穷大的积分,结果不同,替代方案(即将 Gauss-Legendre 正交扩展到 -x-> Infinity)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37358466/
? 1 2
我的代码对所有值都返回零,我不确定为什么。我应该使用 Gauss-Jordan 消元来解决。有人有什么建议吗? #include #define N 10 int main() { double
我正在制作一个将使用高斯赛德尔法求解 A*x=b 的函数。当我运行该函数时,我收到以下错误消息: main.cpp:28:40: 错误:数组下标的类型 'double[int]' 无效 总和[i] =
我得到了一个用 GAUSS 编写的 MLE 估计器,我正在尝试将其重新编码为 R。我没有使用,也从未使用过 GAUSS 本身(并且无权访问它)。在代码中,有一行让我有点困惑。 在经过验证的 GAUSS
重要修改 问题解决了。请看一下我自己在这个 StackOverflow 问题中的回答,以了解如何做。 但是,这是新的(并且可以正常工作的)代码: 显示 显示器同下。 我正确且有效的实现 /** *
我有一个关于根据其创建日期修改乐谱文档的问题。我试过高斯函数和 field_value_factor。 第一个是(所有查询子句): @search_definition[:query] = {
我的任务是开发一个程序来计算 3 个线性方程组:该程序必须允许用户输入系数和常数、迭代次数和可接受的误差水平。我似乎无法同时包含迭代次数和错误级别作为参数来停止循环并显示变量的最终值。这是我到目前为止
有没有线性代数库实现迭代Gauss-Seidel来求解线性系统?或者可能是预条件梯度求解器? 谢谢 编辑:最后我用了一种粗略但正确的方法来解决它。因为无论如何我都必须创建矩阵 A(对于 Ax=b),所
在“黑皮书”Numerical Recipes 第 3 版中,给出了求解线性方程组的 Gauss-Jordan 算法。紧随其后的部分是计算 LU 分解,然后使用它来求解线性方程组(请参阅第 53 页的
我在 C++ 中使用 Gauss-Jordan 消去法求解线性方程组。代码工作正常。想知道为什么 void gauss() 中的第 1、2、3 行不能被第 4 行替换(这样做后得到不正确的输出)? #
random.normalvariate() 和有什么区别?和 random.gauss() ? 它们采用相同的参数并返回相同的值,执行基本相同的功能。 我从 previous answer 了解到那
我正在努力解决以下问题。简而言之:两个不同的软件包(Aptech 和 R 的 Gauss)在最大似然过程中产生完全不同的 Hessian 矩阵。我使用相同的程序(BFGS),完全相同的数据,相同的最大
在 python 中实现 Gauss Jacobi 算法时,我发现两种不同的实现需要截然不同的迭代次数才能收敛。 第一个实现是我最初想出的 import numpy as np def GaussJa
我正在尝试反转由复数组成的矩阵,其中我对“用户”在以下链接中发布的实数使用矩阵反转代码 cuda matrix inverse gaussian jordan 代码编译,没有错误,但问题是输出错误!我
我打算以并行方式计算大量数值正交,最终使用一组通用数据进行所有计算(相当大的根和权重数组占用大约 25 Kb 的内存)。 Gauss-Legendre 求积法非常简单,可以作为入门。我想通过声明 de
我用 C++ 编写了一个例程,使用高斯-赛德尔方法求解方程组 Ax = b。但是,我想将此代码用于稀疏的特定“A”矩阵(大多数元素为零)。这样,该求解器花费的大部分时间都忙于将一些元素乘以零。 例如,
我为拉普拉斯方程(一个简单的加热板问题)在我的红黑 Gauss-Seidel 求解器中添加了 OpenACC 指令,但是 GPU 加速的代码并不比 CPU 快,即使对于大问题也是如此。 我还编写了一个
我在 GeoTools 的帮助下遇到心爱的坐标转换问题:我想将一组坐标从 Gauss-Kruger(5 区,EPSG 31469)转换为普通 WGS84 坐标(EPSG 4326)。 我用一个简单的示
我正在尝试使用 Boost 提供的 Gauss-Kronrod 正交在 C++ 中以数字方式在域 [0, 5] 上集成具有实参数和复数返回值的函数,例如 f(x) = 1 + i。 我已经使用 boo
本文整理了Java中org.apache.commons.rng.sampling.distribution.ZigguratNormalizedGaussianSampler.gauss()方法的一
我是一名优秀的程序员,十分优秀!