标签: numerical

最小二乘C#库

我期待执行多项式最小二乘回归,我正在寻找一个C#库来为我做计算.

我传入数据点和多项式(二阶,三阶等)的程度,它返回C0,C1,C2等常数值或计算值"预测".

注意:我使用最小二乘法为磁盘使用情况,数据库大小和表大小创建一些预测报告.

c# math numerical

17
推荐指数
2
解决办法
2万
查看次数

在C++中传递固定大小的数组?

基本上我想做那样的事情:

int[3] array_func()
{
    return {1,1,1};
}

int main(int argc,char * argv[])
{
    int[3] point=array_func();
}
Run Code Online (Sandbox Code Playgroud)

但这在C++中似乎不合法.我知道我可以使用向量,但是因为我知道数组的大小是常数,所以似乎可能会发生性能损失.new如果可以的话,我也想避免使用,因为在堆栈上分配东西更容易,也可能提高性能.

这里有什么解决方案?

c++ performance numerical allocation

15
推荐指数
3
解决办法
2万
查看次数

使用ruby生成用来表示数字的字母?

我想生成一系列字母,即"A","DE""GJE"等,对应一个数字.前26个很容易,因此3返回"C",26返回"Z",27返回"AA",28"AB",依此类推.

我无法弄清楚的是如何做到这一点,它将处理传入的任何数字.所以如果我传入4123我应该回到3个字母的组合,因为(26*26*26)允许最多+17,000种组合.

有什么建议?

ruby math numerical

15
推荐指数
3
解决办法
9236
查看次数

最快的128位整数库

我正在研究CPU繁重的数值计算应用程序.没有进入很多细节,它是一个计算数学研究项目,涉及为大整数x计算某个函数f(x).

现在,所有内容都是在x64模式下使用C++实现的,使用本机64位整数.这限制了我x <2 ^ 64~1.8*10 ^ 19.我想更进一步,为此,我需要一个执行128位算术的库.它必须非常快.特别是,整数除法应该很快.否则我会坐在这里等待结果直到感恩节.而且我宁愿不重新发明轮子.

我在维基百科上找到了一个大约20个大整数库的列表,但其中大多数似乎都是针对任意精度的数字,这对我的任务来说太过分了,我不需要额外的费用.

有谁知道哪个库可以最快地运行128位整数?

c c++ numerical biginteger

14
推荐指数
2
解决办法
1万
查看次数

哪个数值库用于从Matlab移植到C++?

我目前正在使用Matlab中的一些算法进行原型设计,这些算法依赖于矩阵,DSP,统计和图像分析功能.

我可能需要的一些例子:

  • 特征向量
  • 2D和3D卷积
  • FFT
  • 短时傅里叶变换
  • 希尔伯特变换
  • 切比雪夫多项式
  • 低通滤波器
  • 随机多元高斯数
  • k均值

稍后我将需要在C++中实现这些算法.

我还拥有C++中的Numerical Recipes许可证,我喜欢它,因为它有很好的文档记录并且有各种各样的算法.我还找到了一个有助于在MEX中包装NR函数的类:nr3matlab.h.所以使用这个类我应该能够生成包装器,允许我从Matlab调用NR函数.这对我来说非常重要,因此我可以检查从Matlab移植到C++的每一步.然而,C++中的Numerical Recipes有一些重要的缺点:

  • 算法以简单但不一定非常有效的方式实现
  • 没有线程

因此,我正在考虑使用另一个数值库.理想的图书馆应该:

  • 尽可能广泛的范围和功能
  • 有详细记录
  • (有商业支持)
  • 已经制作了Matlab封装
  • 非常强大
  • 效率很高
  • 螺纹
  • (有一个可以打开的GPU实现,而不是带有"开关"的CPU)

你会建议哪个数值库(库)?

提前感谢您的任何答案!

c++ math matlab numerical numerical-methods

14
推荐指数
2
解决办法
1057
查看次数

从Mathematica中的ContourPlot中提取轮廓

我有两个变量的函数f(x,y),其中我需要知道它与零交叉的曲线的位置.ContourPlot非常有效地做到了这一点(即:它使用巧妙的多网格方法,而不仅仅是一个强力细粒度扫描),但只是给了我一个情节.我想有一组值{x,y}(具有一些指定的分辨率)或者可能有一些插值函数,它允许我访问这些轮廓的位置.

想过从ContourPlot的FullForm中提取这个,但这似乎有点像黑客.有更好的方法吗?

numerical wolfram-mathematica zero contour

13
推荐指数
2
解决办法
7134
查看次数

如何生成浮点逻辑的良好代码覆盖?

我正在手工制作新代码.我想确保我不遗余力.

除了指定代码合同以指导Pex之外,我还能做些什么吗?所以它在数字密集型代码中产生了良好的覆盖范围?

尝试在http://research.microsoft.com/en-us/projects/pex/pexconcepts.pdf中搜索关键字"float"以获取一些背景信息.

浮点数的算术约束通过对有理数的转换来近似,并且在Z3之外使用启发式搜索技术来找到浮点约束的近似解.

...并且...

符号推理.Pex使用自动约束求解器来确定哪些值与测试和被测代码相关.但是,约束求解器的能力是,并且总是会受到限制.特别是,Z3不能精确地推理浮点运算.

或者,您是否知道.NET下的工具更适合在.NET下查找数字异常的任务?我知道http://fscheck.codeplex.com/但它不执行符号推理.

c# numerical unit-testing pex code-contracts

13
推荐指数
1
解决办法
716
查看次数

C浮点是否是非确定性的?

我在某处读过C双精度浮点中存在非确定性的来源,如下所示:

  1. C标准规定64位浮点数(双精度)只需要产生大约64位的精度.

  2. 硬件可以在80位寄存器中执行浮点运算.

  3. 由于(1),在将double填充到高位之前,C编译器不需要清除浮点寄存器的低位.

  4. 这意味着YMMV,即结果的微小差异可能发生.

有没有现在常见的硬件和软件组合,这真的发生了吗?我在其他线程中看到.net有这个问题,但是通过gcc C可以加倍吗?(例如,我正在测试基于精确相等的连续近似的收敛)

c numerical

13
推荐指数
2
解决办法
1465
查看次数

将大量小浮点数添加到一起的好方法是什么?

假设您在一个数组中有100000000个32位浮点值,并且每个浮点数的值都在0.0到1.0之间.如果你试图将它们全部加起来像这样

result = 0.0;
for (i = 0; i < 100000000; i++) {
    result += array[i];
}
Run Code Online (Sandbox Code Playgroud)

你遇到的问题result远远大于1.0.

那么有哪些方法可以更准确地执行求和?

algorithm floating-point numerical

11
推荐指数
1
解决办法
2443
查看次数

一元减去只改变标志吗?

例如,考虑以下双精度数:

x = 1232.2454545e-89;
y = -1232.2454545e-89;
Run Code Online (Sandbox Code Playgroud)

我可以确定它y总是完全等于-x(或Matlab的uminus(x))吗?或者我应该期望订单的小数值差异,还是eps经常在数值计算中发生?试试例子sqrt(3)^2-3:结果不完全为零.这种情况会发生在一元减号上吗​​?难道是有损像平方根是什么?

提出问题的另一种方法是:负数值字面总是等于否定其正面对应物?

我的问题涉及Matlab,但可能更多地与IEEE 754标准有关,而不是与Matlab有关.

我在Matlab中做了一些随机选择的数字测试.我发现,在那些情况下,

  • 事实证明他们确实是平等的.
  • typecast(x, 'uint8')并且typecast(-x, 'uint8')仅在IEEE 754双精度格式定义的符号位上有所不同.

这表明答案可能是肯定的.如果应用一元减号仅改变符号位而不改变有效数,则不会丢失精度.

但当然我只测试了几个案例.我想确保在所有情况下都会发生这种情况.

language-agnostic matlab numerical ieee-754

11
推荐指数
1
解决办法
159
查看次数