1

基本変数xとその拡張子exp(x), ln(x), exp(5ln(x))などを持つプログラムを実装する必要があります。インターフェースを持つことを考えIExtensibleましたが、変数を実装する方法がわかりません。私が検討したオプションは、拡張子の順序とタイプを保持するためにいくつかのリストを使用することです。しかし、この種の実装が扱いやすいかどうかはわかりません。これらの拡張機能を有理関数の変数として使用する必要があります。

編集:最後に必要なものの小さなサンプルを追加しました:

x^2 + 3exp(ln(2x)) - ln(x^4)

Fこの種の式は、いくつかの計算を実行する関数に渡されます。関数Fは、どの拡張機能があるかを正確に知る必要があります。

4

3 に答える 3

2

必要なのは数学パーサーです。たまたま.NET用の数学パーサーを作成しました。ここからダウンロードできます。完全なソース コードが含まれており、組み込み操作を作成するためのカスタム デリゲート関数を設定できます。さらに、変数をサポートしているため、変数を定義して(x例のように)、その変数を必要なものに等しくすることができます。見てみな

于 2012-05-06T18:04:59.537 に答える
1

おそらくNCalcのようなものを探しているでしょう。

于 2012-05-06T18:04:27.867 に答える
0

ここで何を求めているのかを正確に収集するのは難しいですが、匿名関数を使用して「拡張機能」を定義し、次のようにルックアップテーブルに保存することができます。

アイデアを示すために、いくつかの基本的なサンプルコードと1つの再帰的な例を次に示します。

Func<long,long> sqr = 
    ( x ) => 
    { 
        return x * x;
    };

Func<long,long> factoral = 
    ( n ) =>
    {
        return n > 1 ? 
            n * ( long )( MethodInfo.GetCurrentMethod().Invoke( null, new object[] { n - 1 } ) ) :
            n;
    };

var DataObjects = new []
{
    new { Name = "sqr(1)!", Value = factoral( sqr( 1 ) ) },
    new { Name = "sqr(2)!", Value = factoral( sqr( 2 ) ) },
    new { Name = "sqr(3)!", Value = factoral( sqr( 3 ) ) },
    new { Name = "sqr(4)!", Value = factoral( sqr( 4 ) ) },
    new { Name = "sqr(5)!", Value = factoral( sqr( 5 ) ) },
};

DataObjects.ToList().ForEach
(
    d =>
        Console.WriteLine( d )
);

出力を生成します:

名前sqr(1)!値1

名前sqr(2)!値24

名前sqr(3)!値362880

名前sqr(4)!値20922789888000

名前sqr(5)!値7034535277573963776

お役に立てれば、

于 2012-05-06T17:35:48.740 に答える