问题标签 [numerical-integration]

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.

0 投票
1 回答
1546 浏览

python - 使用python进行并行数值积分

我想在 python 中使用多个 cpu 对一个函数进行数值集成。我想做类似的事情:

“频率”也是一个全局变量(FanDDW(参数)外部)。它是一个向量,包含必须评估函数的位置。我想quad应该以一种聪明的方式选择频率。如何将它传递给 FanDDW,知道它不应该分布在 CPU 之间,而 pool.map 正是这样做的(这就是我将它作为全局变量而不将其作为参数传递给定义的原因)。

感谢您的任何帮助。

塞缪尔。

0 投票
2 回答
895 浏览

matlab - Matlab中数值积分的准确性

我正在尝试在矩形区域上集成一个分析函数(sqrt 和 trig 函数的组合)。它在该区域中没有奇点,似乎是一个完美的候选对象dblquad。我的问题是如何评估 Matlab 提供给我的数值的准确性。在不知道积分的确切值的情况下,我们如何证明有效数字的合理性?当您需要给出具有某些精度的值时,您应该能够证明这一点。考虑到使用 Matlab 计算的值,是否可以实现这一点?

0 投票
1 回答
6382 浏览

matlab - Matlab数值积分

我正在尝试使用 matlab 集成 x,通过使用以下命令,该任务很简单:

问题是我不确定如何实现数值积分。我想使用不同的技术使用一定数量的间隔来整合 x 。

任何人都可以帮助我解决数值积分的语法要求吗?MathWorks 站点不是很有帮助。

我也知道有一种叫做陷阱的方法,但我正在寻找 matlab 中的其他方法,比如黎曼和近似。

更新

所以具体来说,我正在寻找一个函数,它将 x 分成 8 个区域,然后将这 8 个区域加在一起。除了 trapz 之外,是否还有一个预定义的函数可以做这样的事情?

好吧,我想我已经得出结论,没有这样的事情。你必须自己做。

0 投票
1 回答
730 浏览

boost - Set a maximum step size in odeint

I create a boost::odeint stepper as follows:

There will be times during the integration of my system where it "lies low" for a while. During this periods it seems as though the integrator sometimes increases its step size to the point where it then jumps over areas of interest.

Is there a way to limit the integrator's step size so it never exceeds a given maximum?

0 投票
1 回答
541 浏览

r - 求求近似于 R 中变换后的 beta 分布

我正在使用 R 运行模拟,其中我使用似然比检验来比较两个嵌套项目响应模型。LRT 的一个版本使用联合似然函数 L(θ,ρ),而另一个版本使用边际似然函数 L(ρ)。我想在 f(θ) 上积分 L(θ,ρ) 以获得边际似然 L(ρ)。我有两个条件:其中一个,f(θ) 是标准正态(μ=0,σ=1),我的理解是我可以选择一些横坐标点,比如 20 或 30,并使用 Gauss-Hermite正交来近似这个密度。但在另一种情况下,f(θ) 是线性变换的 beta 分布 (a=1.25,b=10),其中线性变换 B'=11.14*(B-0.11) 使得 B' 也具有(大约) μ=0,σ=1。

我对如何为 beta 分布实现正交感到很困惑,但是线性变换让我更加困惑。我的问题有三个:(1)当 θ 分布为这种线性变换的 beta 分布时,我可以使用正交的一些变化来近似 f(θ),(2)我将如何在 R 中实现它,以及(3)这是一个荒谬的时间浪费,以至于有明显更快更好的方法来完成这项任务?(我尝试编写自己的数值逼近函数,但发现我的实现仅限于 R 语言,速度太慢而无法满足。)

谢谢!

0 投票
5 回答
6899 浏览

python - 使用 SciPy 集成返回矩阵或数组的函数

我有一个符号数组,可以表示为:

所以对于每个x我得到一个不同的矩阵:

等等...


我需要对 进行数值积分gx比如说from 0. to 100.(在实际情况下,积分没有精确的解),在我目前的方法中,我必须对lambdify每个元素进行g单独积分。我正在使用quad按元素进行集成,例如:

这里有两个问题:1)lambdify 使用了很多次2)for 循环;我相信第一个是瓶颈,因为g_sympy矩阵最多有 10000 个术语(这对 for 循环来说没什么大不了的)。

如上图lambdify允许对整个矩阵求值,所以我想:“有没有办法对整个矩阵求积分?”

scipy.integrate.quadrature有一个参数vec_func给了我希望。我期待类似的东西:

得到完全集成的矩阵,但它给出的ValueError:矩阵必须是二维的


编辑:我正在尝试做的事情显然可以在 Matlab中使用quadv并且已经针对 SciPy 进行过讨论

真实案例已在此处提供

要运行它,您将需要:

  • 麻木的
  • scipy
  • matplotlib
  • 同情

只需运行:"python curved_beam_mrs.py"

您会看到该过程已经很慢,主要是因为集成,由TODOin 文件指示curved_beam.py

TODO如果您删除in 文件后指示的注释,它会慢得多curved_beam_mrs.py

集成的功能矩阵显示在print.txt文件中。

谢谢!

0 投票
1 回答
2477 浏览

performance - 数值积分;CUDA 开发

我需要关于如何继续和利用 CUDA 设备的计算能力来对函数进行数值积分的建议。关于我的设备的一些信息如下(不相关)

硬件

问题描述

我有一个像

我需要按照给定的方程进行积分

现在我已经编写了一个积分函数,它只需要 g(x),将区间分成N个子区间,计算各个子区间的结果,然后在 CPU 上进行汇总。为了完成目的,我在下面提供了一个代码示例。

上面的代码仅用于演示目的,我实际上使用 Romberg 方法来集成我的g(x),但想法是相同的。我真正的问题是因为我不只有一组值(a,b,c),我有这组的多个值。

我在设备内存中有一个二维数组,正好是 (3, 1024) 3 行,1024 列。每列代表一个需要执行集成功能的集合。

当我必须决定是否执行一个线程块(例如 1024)时,问题就来了,记住一个线程相当于一个集成函数。在这种情况下,我上面写的函数是没有用的。因为我想对所有的值集进行并行积分,所以我必须编写一个积分函数,它可以按顺序进行积分。举个例子:

所以你明白我的意思了吗?选项 A 似乎更好,但我不能使用它,因为我不知道如何进行多个积分,然后将每个积分分配给 N 个线程。

你会怎么做?你能建议我,我怎样才能实现多个积分,而每个积分都可以分布到 N 个线程?有没有更好的方法来做到这一点。

期待您的建议。

0 投票
1 回答
3018 浏览

python - 使用 scipy 的 trapz 函数进行集成

我目前正在尝试集成一个由 XY 点对组成的函数。随意看看:https ://dl.dropboxusercontent.com/u/2635172/example.csv

我正在使用熊猫来读取文件

如果仔细观察,连续 x 值之间的间距是相同的,因此我可以将积分写成如下:

whereintegrate是从 scipy 导入的,data_df.index[1]指的是间距。返回以下值:189274.48501691

如果我按以下方式执行集成:

返回一个完全不同的值 (5.846689e+08)。任何想法为什么会这样?

请注意,第一个结果应该是正确的。这也由 MATLAB 的 trapz 函数返回。

0 投票
2 回答
1729 浏览

matlab - Matlab ode求解器:改变状态和指定时间

我在 t=0 时求解一组 ODE (dy/dt),所有初始条件 t=0 y_0=(0,0,0)。我可以在不同时间向 y 值添加一些数字(例如,在 t=10 时,应将 y1 添加到该数字;在 t=20 时,应将 y2 添加到该数字等)并求解方程?

0 投票
2 回答
3318 浏览

python - f2py,返回数组的 Python 函数(向量值函数)

在下面的 Python 中,我有五个函数包含在返回的数组中func,我必须集成这些函数。代码调用使用生成的外部 Fortran 模块f2py

Fortran 例程是:

问题是 Fortran 仅将第一个函数集成到func(x). 查看打印结果:

一种解决方法是修改func(x)以返回函数数组中给定位置的值:

然后更改 Fortran 例程以使用两个参数调用该函数:

哪个有效:

但是这里func被调用了5次以上(实际情况下func 有300个以上的函数,所以会被调用300次以上)。

  • 有谁知道更好的解决方案让 Fortran 识别返回的所有数组func(x)?换句话说,将 Fortran 构建fx1 = f(x1)为一个包含 5 个元素的数组,这些元素对应于func(x).

OBS:我正在编译使用f2py -c --compiler=mingw32 -m trapzdv trapzdv.f90