小编mar*_*ark的帖子

避免重复调用插值

我想在mathematica中插入一个函数.

函数取决于一个参数a,实际上它是一个函数的反函数F,它也取决于a,所以我建立我的近似如下,

approx = Interpolation[Table[{F[0.1 n, a], 0.1 n}, {n, -100, 100}]]
Run Code Online (Sandbox Code Playgroud)

现在我可以简单地调用一点approx[x]来评估反函数.

相反,我想做这样的事情:定义一个带参数的函数,

G[x_,a_] = "construct the interpolating function,
            and return the value of the function at x"
Run Code Online (Sandbox Code Playgroud)

然后写G [x,a]来评估函数.否则我将不得不为我感兴趣的所有参数重复插值并且有很多变量.我已经尝试将Interpolation []调用放在一个模块中,但每次调用G [x,a]时都只构造插值!我怎么能避免这个?

谢谢阅读.

wolfram-mathematica mathematica-8

8
推荐指数
3
解决办法
735
查看次数

概率密度的正交例程

我想整合概率密度函数,(-\infty, a]因为cdf不是封闭形式.但我不确定如何在C++中这样做.

这个任务在Mathematica中非常简单; 我需要做的就是定义函数,

f[x_, lambda_, alpha_, beta_, mu_] := 
   Module[{gamma}, 
     gamma = Sqrt[alpha^2 - beta^2]; 
     (gamma^(2*lambda)/((2*alpha)^(lambda - 1/2)*Sqrt[Pi]*Gamma[lambda]))*
      Abs[x - mu]^(lambda - 1/2)*
      BesselK[lambda - 1/2, alpha Abs[x - mu]] E^(beta (x - mu))
   ];
Run Code Online (Sandbox Code Playgroud)

然后调用NIntegrate例程以数字方式集成它.

F[x_, lambda_, alpha_, beta_, mu_] := 
    NIntegrate[f[t, lambda, alpha, beta, mu], {t, -\[Infinity], x}] 
Run Code Online (Sandbox Code Playgroud)

现在我想在C++中实现同样的功能.我使用gsl_integration_qagilgsl数字库中的例程.它旨在将功能集成在半无限区间(-\infty, a],这正是我想要的.但不幸的是,我无法让它发挥作用.

这是C++中的密度函数,

density(double x)
{
using namespace boost::math;

if(x == _mu)
    return std::numeric_limits<double>::infinity();

    return pow(_gamma, 2*_lambda)/(pow(2*_alpha, _lambda-0.5)*sqrt(_pi)*tgamma(_lambda))* pow(abs(x-_mu), _lambda - …
Run Code Online (Sandbox Code Playgroud)

c++ math wolfram-mathematica

6
推荐指数
1
解决办法
481
查看次数

从pandas日期列中减去当前时间

我有一个像熊猫一样的数据框

x = pd.DataFrame(['05/06/2015 00:00', '22/06/2015 00:00', None], columns=['myDate'])
Run Code Online (Sandbox Code Playgroud)

我想找出myDate列中日期和当前日期之间的天数.我怎样才能做到这一点?我尝试了以下没有太大的成功

pd.to_datetime(x['myDate']) - pd.datetime.now().date()
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
8515
查看次数

如何在mathematica中创建合理的错误图?

不确定我想要做的事情是否有意义.我正在使用mathematica中的一些代码进行原型设计,有一天我希望用C++编写.我只能以双精度计算的环境(因为我使用的是MS VC++编译器).

我有一个近似函数f的多项式,我想绘制误差曲线.已经计算出多项式的系数以达到机器精度(如C++中的情况).但是当我绘制相对误差时,我只得到一个数值噪声图.我期望误差是平滑曲线,因为多项式是泰勒多项式.我怎样才能获得更明智的情节?下面的代码演示了我尝试做什么,将Cos函数作为测试用例.该图的结果只是数值噪声.

f[x_] = Cos[x]
a[k_] := N[(-1)^k/(2*k)!]
approx[x_] := Sum[a[k]*x^(2*k), {k, 0, 12}]
Plot[approx[x]/f[x] - 1, {x, -Pi, Pi}, WorkingPrecision -> 30]
Run Code Online (Sandbox Code Playgroud)

我可以提高a[k]计算系数的精度.

a[k_] := N[(-1)^k/(2*k)!,30]
Run Code Online (Sandbox Code Playgroud)

获得一个更明智的情节,但这违背了我的原型代码的目的.因为最终我想绘制我在C++中创建的近似值的误差图.在该环境中,系数仅以双精度计算.

我认为这个测试有道理吗?我希望我的近似精确到机器精度,但我如何绘制误差曲线?

谢谢阅读.

wolfram-mathematica

4
推荐指数
1
解决办法
309
查看次数

函数指针问题.如何从C++类有效地与C API(即GSL)进行交互?

这个问题似乎已经被之前无数次问,例如here1,here2here3.

我想要做的是,将functionC-Struct gsl_function的成员设置为我的类的成员函数.

class MyClass{

    double foo(double x)
    {
        return ...;
    }

    double bar(double x)
    {
        ...
        gsl_function F;
        // Problem I cant do this (compiler error)
        F.function = &(this->foo);
    }
};
Run Code Online (Sandbox Code Playgroud)

上面的第三个链接提供了一个解决方案,我认为它基于此处描述的包装器方法4.

所以我的问题是我可以做得更好.有没有更简单的方法?例如,可能通过使用Boost的函数和Bind对象.

我正在权衡使用gsl包装器的选项,例如o2scl.但是我有点不情愿,因为如果包装纸没有得到很好的维护,我可能会付出代价.有什么建议?

c++

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

寻找正交的根

我有根查找的问题,并且在这个实例中很难让它工作.

我需要一些复杂的功能.

f[x_, lambda_, alpha_, beta_, mu_] = 
   Module[{gamma}, 
     gamma = Sqrt[alpha^2 - beta^2]; 
     (gamma^(2*lambda)/((2*alpha)^(lambda - 1/2)*Sqrt[Pi]*Gamma[lambda]))*
      Abs[x - mu]^(lambda - 1/2)*
      BesselK[lambda - 1/2, alpha Abs[x - mu]] E^(beta (x - mu))
   ];
Run Code Online (Sandbox Code Playgroud)

我想找到根的函数被定义为这个函数的积分,所以我用正交:

F[x_, lambda_, alpha_, beta_, mu_] := 
    NIntegrate[f[t, lambda, alpha, beta, mu], {t, 0, x}]; 
Run Code Online (Sandbox Code Playgroud)

现在问题是,mathematica很难解决这个等式的根源,

Q[u_, lambda_, alpha_, beta_, mu_] := 
    x /. FindRoot[F[x, lambda, alpha, beta, mu] == u, {x, 1}]
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?积分在R中的所有点处定义.这里是密度函数,F是其CDF.

谢谢阅读.

wolfram-mathematica

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

标签 统计

wolfram-mathematica ×4

c++ ×2

math ×1

mathematica-8 ×1

pandas ×1

python ×1