问题标签 [numerics]

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 投票
2 回答
219 浏览

mathnet-numerics - GoodnessOfFit.StandardError 错误答案

为什么我从 GoodnessOfFit.StandardError 得到错误的答案 (err2)?在下面的代码中,我自己进行计算并得到正确的答案(err3)。我从 GoodnessOfFit.RSquared 得到了正确的答案。注意:esttime 和 phrf 是 double[]。长度为 63。

0 投票
0 回答
149 浏览

algorithm - 数字和符号梯度不匹配,尽管 Hessians 匹配

对于上下文,我在 MATLAB 中有一个小项目,我尝试复制一个涉及牛顿算法优化的算法。虽然我的问题主要与 MATLAB 相关,但也许是我缺乏深厚的背景知识使我无法找到解决方案,因此如果需要,请随时将我重定向到适当的 StackExchange 站点。

我需要计算梯度向量和 Hessian 矩阵以进行优化的函数是:

其中omegav_tilde是 n 个 d 维向量的矩阵,lambda是函数的 d 维参数。(现在,m(j)只是选择器(1 或 0),但算法允许对它们进行细化,因此不应删除它们。我使用 Derivest Suite 以数值方式计算梯度和 Hessian,虽然逻辑上对于高维很慢, 算法作为一个整体有效。我使用 sym 包实现了相同的解决方案,这样我就可以提前计算一些修正 n 和 d 的梯度和 Hessian,这样就可以在需要时快速评估它们。这将是符号版本:

由于 n 是固定的,因此无需遍历 omega。this的梯度和Hessian可以通过sym的对应函数得到,然后存储为matlabFunctions。

但是,当我针对某些值测试这两种实现时,它们不匹配,令人惊讶的是,hessian 矩阵的值匹配而梯度的值不匹配(数值计算正确),并且牛顿算法迭代直到这些值只是NaN。这些是 d=2 和 n=8 的一些示例值:

如您所见,HNum 和 HSym 的值匹配,但梯度不匹配。

我很乐意提供更多上下文信息、代码片段或任何有帮助的东西。先感谢您!

编辑:根据要求,这是一个最小的测试。问题基本上是 gNum 和 gSym 的值不匹配(上面更长的解释):

注意:DerivestSuite 是一个小型库(~6 个源文件),可以在https://de.mathworks.com/matlabcentral/fileexchange/13490-adaptive-robust-numerical-differentiation下获得

0 投票
2 回答
115 浏览

c++ - 将int添加到字符串c ++

如果我有一个字符串string foo并且我写foo += 27了,那么字符串会附加什么?它是 ASCII 十六进制值 0x27 还是 0x1b 的字符?

另外,当我尝试时foo += 0,我得到一个编译错误,说 += 运算符与字符串和 int 的模棱两可的重载。为什么我在添加非零数字时没有收到编译错误,但我确实收到了零错误?

如果我先说int z = 0然后foo += z,我不会收到错误消息。造成差异的原因是什么?

0 投票
3 回答
1796 浏览

c# - 使用带有 C# 的 Math.Net Numerics 逐点乘以列数组和矩阵

我想使用 Math.Net Numerics 库在 C# 中的给定矩阵中执行列数组与每个列数组/向量的逐点乘法。

关于这样的操作的文档很少,到目前为止,我有下面的代码不起作用。我正在尝试使用 LINQ,因为我更喜欢 for 循环。我在使用 LINQ 时遇到的问题是,当我尝试将矩阵的每一列枚举为向量并执行 PointwiseMultiply() 方法时,我无法重新分配矩阵。

矩阵fitKernel是我的矩阵,我想将每列逐点乘以wF列数组并使用 LINQ更新我的矩阵fitKernel 。fitKernel 是 9 x 5 矩阵,而 wF 是一个 9 x 1 double[] 数组,我在下面的 LINQ 中将其转换为 Vector。

上面使用 EnumerateColumns() 的代码返回向量的 IEnumerable,但是当我尝试将值分配给 fitKernel 时,它抱怨将 Enumerable 类型分配给矩阵。