我期待执行多项式最小二乘回归,我正在寻找一个C#库来为我做计算.
我传入数据点和多项式(二阶,三阶等)的程度,它返回C0,C1,C2等常数值或计算值"预测".
注意:我使用最小二乘法为磁盘使用情况,数据库大小和表大小创建一些预测报告.
基本上我想做那样的事情:
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如果可以的话,我也想避免使用,因为在堆栈上分配东西更容易,也可能提高性能.
这里有什么解决方案?
我想生成一系列字母,即"A","DE""GJE"等,对应一个数字.前26个很容易,因此3返回"C",26返回"Z",27返回"AA",28"AB",依此类推.
我无法弄清楚的是如何做到这一点,它将处理传入的任何数字.所以如果我传入4123我应该回到3个字母的组合,因为(26*26*26)允许最多+17,000种组合.
有什么建议?
我正在研究CPU繁重的数值计算应用程序.没有进入很多细节,它是一个计算数学研究项目,涉及为大整数x计算某个函数f(x).
现在,所有内容都是在x64模式下使用C++实现的,使用本机64位整数.这限制了我x <2 ^ 64~1.8*10 ^ 19.我想更进一步,为此,我需要一个执行128位算术的库.它必须非常快.特别是,整数除法应该很快.否则我会坐在这里等待结果直到感恩节.而且我宁愿不重新发明轮子.
我在维基百科上找到了一个大约20个大整数库的列表,但其中大多数似乎都是针对任意精度的数字,这对我的任务来说太过分了,我不需要额外的费用.
有谁知道哪个库可以最快地运行128位整数?
我目前正在使用Matlab中的一些算法进行原型设计,这些算法依赖于矩阵,DSP,统计和图像分析功能.
我可能需要的一些例子:
稍后我将需要在C++中实现这些算法.
我还拥有C++中的Numerical Recipes许可证,我喜欢它,因为它有很好的文档记录并且有各种各样的算法.我还找到了一个有助于在MEX中包装NR函数的类:nr3matlab.h.所以使用这个类我应该能够生成包装器,允许我从Matlab调用NR函数.这对我来说非常重要,因此我可以检查从Matlab移植到C++的每一步.然而,C++中的Numerical Recipes有一些重要的缺点:
因此,我正在考虑使用另一个数值库.理想的图书馆应该:
你会建议哪个数值库(库)?
提前感谢您的任何答案!
我有两个变量的函数f(x,y),其中我需要知道它与零交叉的曲线的位置.ContourPlot非常有效地做到了这一点(即:它使用巧妙的多网格方法,而不仅仅是一个强力细粒度扫描),但只是给了我一个情节.我想有一组值{x,y}(具有一些指定的分辨率)或者可能有一些插值函数,它允许我访问这些轮廓的位置.
想过从ContourPlot的FullForm中提取这个,但这似乎有点像黑客.有更好的方法吗?
我正在手工制作新代码.我想确保我不遗余力.
除了指定代码合同以指导Pex之外,我还能做些什么吗?所以它在数字密集型代码中产生了良好的覆盖范围?
尝试在http://research.microsoft.com/en-us/projects/pex/pexconcepts.pdf中搜索关键字"float"以获取一些背景信息.
浮点数的算术约束通过对有理数的转换来近似,并且在Z3之外使用启发式搜索技术来找到浮点约束的近似解.
...并且...
符号推理.Pex使用自动约束求解器来确定哪些值与测试和被测代码相关.但是,约束求解器的能力是,并且总是会受到限制.特别是,Z3不能精确地推理浮点运算.
或者,您是否知道.NET下的工具更适合在.NET下查找数字异常的任务?我知道http://fscheck.codeplex.com/但它不执行符号推理.
我在某处读过C双精度浮点中存在非确定性的来源,如下所示:
C标准规定64位浮点数(双精度)只需要产生大约64位的精度.
硬件可以在80位寄存器中执行浮点运算.
由于(1),在将double填充到高位之前,C编译器不需要清除浮点寄存器的低位.
这意味着YMMV,即结果的微小差异可能发生.
有没有现在常见的硬件和软件组合,这真的发生了吗?我在其他线程中看到.net有这个问题,但是通过gcc C可以加倍吗?(例如,我正在测试基于精确相等的连续近似的收敛)
假设您在一个数组中有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.
那么有哪些方法可以更准确地执行求和?
例如,考虑以下双精度数:
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双精度格式定义的符号位上有所不同.这表明答案可能是肯定的.如果应用一元减号仅改变符号位而不改变有效数,则不会丢失精度.
但当然我只测试了几个案例.我想确保在所有情况下都会发生这种情况.
numerical ×10
c++ ×3
math ×3
c ×2
c# ×2
matlab ×2
algorithm ×1
allocation ×1
biginteger ×1
contour ×1
ieee-754 ×1
performance ×1
pex ×1
ruby ×1
unit-testing ×1
zero ×1