我想在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]时都只构造插值!我怎么能避免这个?
谢谢阅读.
我想整合概率密度函数,(-\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) 我有一个像熊猫一样的数据框
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) 不确定我想要做的事情是否有意义.我正在使用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++中创建的近似值的误差图.在该环境中,系数仅以双精度计算.
我认为这个测试有道理吗?我希望我的近似精确到机器精度,但我如何绘制误差曲线?
谢谢阅读.
这个问题似乎已经被之前无数次问,例如here1,here2和here3.
我想要做的是,将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.但是我有点不情愿,因为如果包装纸没有得到很好的维护,我可能会付出代价.有什么建议?
我有根查找的问题,并且在这个实例中很难让它工作.
我需要一些复杂的功能.
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.
谢谢阅读.