我有一个读取的Integrand
$.each(resp,function(indx,obj){
//reset table here again
table = '<tr>';
table += '<td>'+ parseInt(indx+1) +'</td>';
table += '<td>'+ obj.ProductCategory.cat_name +'</td>';
table += '<td>'+ obj.ProductSubCategory.subcat_name +'</td>';
table += '<td>'+ obj.Product.name +'</td>';
table += '<td>'+ obj.PriceList.price_name +'</td>';
table += '</tr>';
//append it now.
$("tbody#product_price").append(table);
});
这个名字叫做VEffClass。
我的整合例程将是
static double Integrand(double k , void * params)
{
long double *p = (long double *)params;
long double MassSquared = p[0];
long double Temp = p[1];
long double sign = p[2];
long double EXP = std::exp(-std::sqrt(k*k+MassSquared/(Temp*Temp)));
double res = 0;
if(sign == -1)
{
res = k*k*std::log(1-exp(-std::sqrt(k*k+MassSquared/(Temp*Temp))));
}
else if(sign == +1)
{
res = k*k*std::log(1+exp(-std::sqrt(k*k+MassSquared/(Temp*Temp))));
}
return res;
};
,C_threshold = 1e-3;
如果我运行NumIntInf(10 ^ -3,+ 1,100,500),结果为1.83038。结果 Maple给出的是~6 * 10 ^ 9。如果我使用简单的Simpsons 1/3方法吧 差异大约是Maple结果的1%。
有人能指出我的错误吗?
感谢您的任何建议
答案 0 :(得分:0)
每当您提出涉及数值结果(以及错误)的问题时,您需要提供一个简明的代码,我们可以分析并运行以重现您的原始问题。所以是的,缺少信息。我们需要
(1)简洁的代码(我们不需要VEffClass
!)与GSL集成(你部分提供了 - 但是你的代码对于堆栈溢出来说仍然非常复杂)。
(2)简洁的代码与你对Simpson规则的实现。
(3)枫木计算的快照。
(2)和(3)非常重要,因为你的问题是由于方法(2)和(3)不同意(1),你认为这是错误的答案。为什么你认为(1)是不正确的而不是相反?您是否有分析解决方案来检查数字?
当我在Wolfram Mathematica中分析了你在评论中提供的参数值的被积函数时,我得到了一个与GSL计算一致的答案。所以我无法重现你的问题,没有(2)+(3)我只能猜出出了什么问题......
我附上了Mathematica笔记本的快照。