Tag: 数值

总和中乘以3个矩阵

我想计算: result = SUM (c=0,N) { V_ck * U_lc * S_c } 但我的2D矩阵被索引为1D并存储为列主要。 我在尝试: float *A,*B; int M,N; A = (float *) malloc( M * N * sizeof(float) ); B = (float *) malloc( M * sizeof(float) ); float *S = (float *)malloc( N * sizeof( float) ); float *U = (float *)malloc( M * […]

C或C中的gamma或log gamma函数

我正在寻找C或C ++版本的gamma和log gamma函数。 是否有推荐的代码片段或库? 如果可能,我想知道实现的原理。 谢谢!!!

数值微分

如何计算在无穷远处涉及指数和奇点的函数的数值二阶导数。 不幸的是,Ridder的方法在“C中的数值配方”中提供的数值导数只能计算一阶导数(它需要预先对函数进行解析表达式。)此外,我尝试了Chebyshev近似并在之后区分函数,但给出的值是方式关闭实际值。 我也尝试过在数学论文中提供的一些有限差分算法,但它们也容易出错。 函数是e ^(x / 2)/ x ^ 2。 对此事我感激不尽。 提前致谢 最新编辑:问题解决了C ++中提供的FADBAD库做得非常好。 它们可以通过http://www.fadbad.com/fadbad.html获得 编辑: // The compilation command used is given below // gcc Q3.c nrutil.c DFRIDR.c -lm -o Q3 #include #include #include “nr.h” #define LIM1 20.0 #define a -5.0 #define b 5.0 #define pre 100.0 // This defines the pre /* This […]

logs中的logsumexp实现?

有没有人知道提供logsumexp函数的开源数值C库? logsumexp(a)函数计算数组a的组件的指数log(e ^ {a_1} + … e ^ {a_n})的总和,避免数值溢出。

数值配方的LU分解不起作用; 我究竟做错了什么?

我已经从提供的用于就地LU矩阵分解的C的Numerical Recipes的源代码中复制和粘贴,问题是它无法正常工作。 我确信我做的事情很愚蠢,但我很高兴有人能指出我正确的方向; 我一整天都在努力,看不出我做错了什么。 POST-ANSWER UPDATE:项目已完成并正在运行 。 感谢大家的指导。 #include #include #include #define MAT1 3 #define TINY 1e-20 int h_NR_LU_decomp(float *a, int *indx){ //Taken from Numerical Recipies for C int i,imax,j,k; float big,dum,sum,temp; int n=MAT1; float vv[MAT1]; int d=1.0; //Loop over rows to get implicit scaling info for (i=0;i<n;i++) { big=0.0; for (j=0;j big) big=temp; if […]

仅接受使用scanf输入的数值

如何确保用户仅输入数字值而不是字母数字或任何其他字符? 还有什么寻找插入错误信息的incorrent输入? #include int main() { int a, b, c; printf(“Enter first number to add\n”); scanf(“%d”,&a); printf(“Enter second number to add\n”); scanf(“%d”,&b); c = a + b; printf(“Sum of entered numbers = %d\n”,c); return 0; }

如何编写快速(低级)代码?

我想了解有关低级代码优化以及如何利用底层机器架构的更多信息。 我正在寻找关于在哪里阅读有关此主题的好指示。 更多细节: 我感兴趣的是在C / C ++等低级语言中进行科学计算(这是一个很多数字运算但不仅仅是 )的优化。 我特别感兴趣的是优化方法,这些方法并不明显,除非人们对机器的工作原理有很好的了解(我还没有)。 例如,很明显,更好的算法更快,而不知道它运行的机器的任何信息。 如果首先循环遍历列或行的矩阵,那么这一点并不明显。 (最好循环遍历矩阵,以便连续读取存储在相邻位置的元素。) 关于该主题的基本建议或文章指针是最受欢迎的。 答案 得到了许多伟大指针的答案,比我有时间阅读的要多得多。 这是所有这些的列表: 英特尔软件优化食谱 (书) 每个程序员应该了解的内存 (pdf书) 写出伟大的代码,第2卷:思考低级,写高级 (书) Agner Fog的软件优化资源 (五本详细的pdf手册) 我需要一些脱脂时间来决定使用哪一个(没有时间)。

最快的128位整数库

我正在研究CPU繁重的数值计算应用程序。 没有进入很多细节,它是一个计算数学研究项目,涉及计算大整数x的某个函数f(x)。 现在一切都是在x64模式下用C ++实现的,使用本机64位整数。 这限制了我x <2 ^ 64~1.8 * 10 ^ 19。 我想更进一步,为此,我需要一个可以进行128位运算的库。 它必须非常快。 特别是,整数除法应该很快。 否则我会坐在这里等待结果直到感恩节。 而且我宁愿不重新发明轮子。 我在维基百科上找到了一个大约20个大整数库的列表,但其中大多数似乎都是针对任意精度的数字,这对我的任务来说太过分了,而且我不需要额外的费用。 有谁知道哪个库可以最快地运行128位整数?

计算多个数字的几何平均值的有效方法

我需要计算一大组数字的几何平均值,其值不是先验有限的。 天真的方式是 double geometric_mean(std::vector const&data) // failure { auto product = 1.0; for(auto x:data) product *= x; return std::pow(product,1.0/data.size()); } 但是,由于累积product的下溢或溢出,这可能会失败(注意: long double并不能真正避免这个问题)。 那么,下一个选项是总结对数: double geometric_mean(std::vector const&data) { auto sumlog = 0.0; for(auto x:data) sum_log += std::log(x); return std::exp(sum_log/data.size()); } 这可行,但为每个元素调用std::log() ,这可能很慢。 我可以避免吗? 例如,通过分别跟踪累积product的指数和尾数(相当于)?

一个人的补充是一个现实世界的问题,还是一个历史问题?

另一个问题是关于确定C中的奇数/偶数,并且惯用(x&1)方法被正确地标记为基于补体的系统被破坏,C标准允许。 系统真的存在于计算机博物馆之外的“现实世界”吗? 自1970年代以来,我一直在编码,我很确定我从未见过这样的野兽。 有人在为这样的系统开发或测试代码吗? 如果没有,我们应该担心这些事情,还是应该将它们与纸带和打卡一起放入101室 ?