2012-06-08 5 views
11

私は学校向けのアルゴリズムを実装しており、プログラミングで明確な積分がどのように表現されているかを理解する上で問題があります。例えば、私は、加算式は、次の例のように実装することができることを知っている:
enter image description hereプログラミングで数学的方程式を実装する際に問題がある

仮定Y = F(X)Iは、その後、数値積分、例えば表現する方法を

if(x==0){ 
    y=x+1; 
}else{ 
    for(int i = 0; i < n; i++){ 
     y = y + (x - 1); 
    } 
} 


enter image description here
を ここに植え込まれた方程式は数学的には意味がないかもしれませんが、私の目的は、インテグラルを含むアルゴリズムを実装する必要がある学校プログラミングプロジェクトで、C#で同様の方程式を実装することです。私はシンプソンルールのような明確な積分を解く数値的方法があることを読んできました。私は方程式を実装するためにそのようなメソッドを使わなければならないのでしょうか?

+0

したがって、数式パーサーが必要ですか?または数式をコードに変更する方法を学びたいですか? – SQLMason

+0

数式をコードに変更したい – user1327159

+0

プログラミングへようこそ!以下に述べるように、あなたは無限の合計を持つことはできません。問題を解決し、関連するコードを書くためにどのような措置を講じるかについて考える必要があります。 – SQLMason

答えて

1

あなたの目的によって異なります。これが特定の実装だった場合は、式x-1を単純に統合して(x^2)/2 - xになり、最大値から最小値を引いた値を返します。

また、dxの適切なステップサイズを選択して推定することもできます。

decimal dx=0.1; 

if(x==0){ 
    y=x+1; // could just return y=1 
}else{ 
    decimal tempY=0; 
    for(decimal i = 3; i <= 20; i+=dx){ 
     tempY += (i - 1); 
    } 
    // Either return tempY as decimal or 
    y= Convert.ToInt32(tempY); 
} 
1

多分私は理解できませんが、整数を数値で計算する方法を知りたいですか?

もしそうなら、多くの方法があります。短い導入のために見て取る:あなたの例からhttp://en.wikipedia.org/wiki/Numerical_integration

あなたは、単に行うことができます:

computeIntegral()あなたは積分を計算するために書かなければならない機能です
int f(int x) { 
    if(x == 0) { 
     y = x + 1; 
    }else{ 
     y = computeIntegral() 
    } 
    return y 
} 

しかし、xが1つの値としてゼロf(x)でない場合、関数f(x)に問題があると思います。多分積分境界はxに依存すべきでしょうか?

最後のコメントです。 xが浮動小数点数の場合は、丸め切り捨てのため浮動小数点数に一意の2進数表記がないため、x == 0は推奨されません。

+0

私は、方程式は私が何をしたいのかについての一般的な考えを与えるために私はWordでノックアップしたが、私の目的は積分を必ずしも積分ではない私が理解していることは、あなたが何を言っているのか誤解していないなら、例えば数値的な方法を使って積分を計算しなければならないということです。 – user1327159

+0

IEEE fp標準では、+0と-0が等しいしたがって、それらが異なる表現をしているという事実は、x == 0.0を無効な(または面倒な)操作にしない。そして、これは '丸め切り捨て'とは関係ありません。 –

+0

@HighPerformanceMark 'x == 0'ではOKですが、より一般的には、2つの浮動小数点を' == 'と比較するのは意味がありますか? – Ger

0

積分は無限の和であるため、単純にループで積分を表すことはできません。近似法を使用するか、積分符号を除去するために方程式を修正する必要があります。 2番目の方程式の積分は簡単に削除する必要があります。

1

数値の統合の話題は大きく、非常に複雑になる可能性があるので、私はこの答えですべてをカバーしません。

シンプソンのルールは、スペクトルの端の単純で近似的な(複雑なもの、正確なもの、またはその両方ではなく)数値的統合の方法です。あなたがトピックの調査を開始するのは悪い選択ではありません。なぜなら、理解してプログラムするのが非常に簡単だからです。あなたが好きなプログラミング言語でthe formula as presented on Wikipediaを直接実装できることは間違いありません。

ループとシンプソンのルールを結びつけるために、シンプソンのルールがインテグラルの真の値に与える近似の精度は、積分の限界(あなたの例では3と20)が近づくにつれて改善されます。ですから、あなたが取ることのできるアプローチは、3から4まで、4から5まで、...を積分するループを作成し、最後にすべてを追加することです。統合によって領域が生成され、領域を追加すると、通常は別の大きな領域が生成されます。

数値積分のすべての他の専門家には、他のアプローチがあり、他のアプローチの多くは(より多くの異なる意味で)「より良い」ものであり、シンプソンのルールには問題があることがわかりますいくつかの(多くの)機能がありますが、それは悪い場所ではありません。

関連する問題