ある時点で渡される関数の導関数である関数を返す関数Derivativeを作成することに興味があります。ただし、これを特殊化して、特定の機能について分析ソリューションを返すことができるようにしたいと思います。
だから、私はこのようなものを探しています:
auto Derivate(alias Function)(x)
{ return (Function(x+h) - Function(x-h))/(2h);}
auto Derivate(BSpline!(k)(x))(x)
{ return k * BSpline!(k-1)(x) + x * BSpline!(k-1)(x); }
ただし、現在、BSplineは次のように定義されています。
pure Real BSpline(int k : 0, Real)(scope Real x, scope const(Real)[] t)
{
if (t[0] <= x && x < t[k+1])
return 1;
else
return 0;
}
pure Real BSpline(int k, Real)(scope Real x, scope const(Real)[] t)
{
if (t[0] <= x && x < t[k+1])
{
Real a = (x - t[0]) / (t[k] - t[0]);
Real b = (t[k+1] - x) / (t[k+1] - t[1]);
Real c = BSpline!(k-1,Real)(x, t[0..k+1]);
Real d = BSpline!(k-1,Real)(x, t[1..k+2]);
Real rv = (c?c*a:c) + (d?d*b:d);
return rv;
}
else
return 0;
}
したがって、BSplineの型アノテーションはReal関数(Real、Real)になります。これは、他の種類の関数と区別できません。これを解決して、opCallが定義された「BSpline」クラスを作成する方法はありますか?または、この関数を識別するために何らかのtypedefを実行できますか?
ありがとう!