Code DOM で Expression を動的生成
昨日作った C# 3.0 の Expression Tree の記号計算ライブラリを更新。
http://ufcpp.net/study/csharp/source/Differential.zip
System.CodeDom とか Microsoft.CSharp あたりの機能を使って、文字列から動的に Expression を作るプログラムを作ってみた。ZIP ファイル中の Differential/Differential/CodeDom.cs の辺り。↓みたいに使う。
var f = (Expression<Func<double, double>>)CodeDom.GetExpressionFrom( "x => x * x" );
昨日作った Expression Tree のシンボリック微分と併せて、コンソールから式を入力 → 微分結果を表示というデモプログラムを作成。ConsoleCodeDom プロジェクトがそれ。
↓みたいな感じで実行できる。
x => x * x + 2 * x + 1 function : x => (((x * x) + (2 * x)) + 1) derivative: x => ((2 * x) + 2) x => x * Math.Log(x) - x function : x => ((x * Log(x)) - x) derivative: x => Log(x) x => Math.Sin(x) * Math.Sin(x) + Math.Cos(x) * Math.Cos(x) function : x => ((Sin(x) * Sin(x)) + (Cos(x) * Cos(x))) derivative: x => 0 x => Math.Log(Math.Cos(x)) function : x => Log(Cos(x)) derivative: x => (-1 * (Sin(x) / Cos(x)))