たとえば、次のような関数を想像してください。
int solveSomeEquation(int y)
{
y = (int x) * 2;
return x;
}
シンボリック代数を使用すると、コンパイラは x = y / 2 であると判断します。さらに良いことに、y / 2 の結果を格納するには int では不十分であると不平を言うでしょう。この機能が、制約および/または境界条件を持つ ODE の解決に拡張されることを想像してください。必要に応じて、(実行時に) シンボリックまたは数値メソッドを使用した統合。私は、たとえば、次のようなものを見たいと思っています。
int areaOfUnitSemiCircle()
{
auto semiCircleFunc = [](double x){ return abs((1 - x^2)^0.5); };
semiCircleFunc = (auto semiCircleIntegralFunc)'; // single quote means derivative
return semiCircleIntegralFunc(1) - semiCircleIntegralFunc(-1);
}
単純化して次のようにします。
int areaOfUnitSemiCircle()
{
return Pi/2;
}
さらに、関数内でローカルに式を単純化できるだけでなく、プログラム全体の最適化を実行できます。数値の安定性を向上させる (浮動小数点エラーの影響を減らす) ために式を再配置したり、別の表現を使用してそれらを完全に削除したりすることもできます。BigInt、IEEE1394 の 4 倍精度浮動小数点数、述語によって定義されるセット、区分関数の統合。おそらくもっと多くのことができるでしょう。
そんなことありえますよね?Mathematica または MatLab のプログラミング言語関数を使用してこのようなことを実行できることは知っていますが、それらはソース コードによって呼び出されます。コンパイラによってソースコードに適用されるようにしたい。(これらの言語にはこの種の機能がありますか? 私にはわかりません.) 私は仕事で言い訳があれば Mathematica を使うのが好きですが, C++ の魔法のように見える関数は外部参照なしでは意味をなさないものになってしまいます. Mathematica ノートブック。1 つの言語、1 つの環境で数学者とプログラマーになれるようになりたいです。そのようなものは存在しますか?