GSL数值积分不正确的值

时间:2015-07-23 12:55:32

标签: gsl numerical-integration

我有一个读取的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%。

有人能指出我的错误吗?

感谢您的任何建议

1 个答案:

答案 0 :(得分:0)

每当您提出涉及数值结果(以及错误)的问题时,您需要提供一个简明的代码,我们可以分析并运行以重现您的原始问题。所以是的,缺少信息。我们需要

(1)简洁的代码(我们不需要VEffClass!)与GSL集成(你部分提供了 - 但是你的代码对于堆栈溢出来说仍然非常复杂)。

(2)简洁的代码与你对Simpson规则的实现。

(3)枫木计算的快照。

(2)和(3)非常重要,因为你的问题是由于方法(2)和(3)不同意(1),你认为这是错误的答案。为什么你认为(1)是不正确的而不是相反?您是否有分析解决方案来检查数字?

当我在Wolfram Mathematica中分析了你在评论中提供的参数值的被积函数时,我得到了一个与GSL计算一致的答案。所以我无法重现你的问题,没有(2)+(3)我只能猜出出了什么问题......

我附上了Mathematica笔记本的快照。

Mathematica