0

私は現在、リーマンの合計を計算してテーブルに入れるためのMathematicaプロジェクトに取り組んでいます。行番号(間隔)の印刷に問題があります。(行番号は、2次関数のパラメーターでもあります)。Mathematicaテーブルのイテレータのインデックスにアクセスする方法がわからないので、関数パラメータを使用してそれらを計算しようとしています。

これは、私が印刷したいものの例です。{0、1}の範囲でx ^ 2を積分し、10個の細分割を行います。

tableRiemannSums[#^2 &, {0, 1}, 10]

ここに画像の説明を入力してください

現在のサブディビジョンkの値、積分{a、b}の範囲、およびサブディビジョンの数nに基づいて、各反復のインデックスが何であるかを理解する必要があります。以下は主要なコードです。

tableRiemannSums[fct_, {a_, b_}, n_] := Table[{'insert index here', 
leftRiemannSum[fct, {a, b}, 'insert index here'], 
rightRiemannSum[fct, {a, b}, 'insert index here']}, 
{k, a, b - (N[b - a]/n), N[b - a]/n}]

上記の式では、次の行

{k, a, b - (N[b - a]/n), N[b - a]/n}]

kが「a」から「b-((b-a)/ n)」までサイズ「(b-a)/ n」のステップで進むため、テーブルの範囲はkであることを意味します。

私のコードが「ここにインデックスを挿入」と言っている場所のそれぞれに、同じ方程式を入れる必要があります。現在、「n * k + 1」を使用してインデックスを計算しています。これは正の範囲で機能しますが、{a、b} = {-1、1}のような範囲になると機能しなくなります。

これはかなり単純な代数の問題だと思いますが、私は何時間も頭を悩ませていて、一般的な方程式を見つけることができません。

(これが重複した質問である場合はお詫びします。スタックオーバーフローアーカイブを検索しようとしましたが、質問をいくつかのキーワードに要約するのに苦労しました。)

4

2 に答える 2

1

私はついにこれを解決する方法を見つけました。範囲を制御するために内部関数に依存するのではなく、範囲を考えすぎていました。関数を次のように書き直しました。

tableRiemannSums[fct_, {a_, b_}, n_] := Table[{k,
   leftRiemannSum[fct, {a, b}, k], 
   rightRiemannSum[fct, {a, b}, k]},
   {k, 1, n}}]

参考までに、左と右の合計を以下に示します (興味のある方のために!)。

leftRiemannSum[fct_, {a_, b_}, n_] :=
 N[b - a]/n* Apply[Plus, Map[fct, Range[a, b - N[b - a] / n, N[b - a]/n]]]
rightRiemannSum[fct_, {a_, b_}, n_] := 
 N[b - a]/n* Apply[Plus, Map[fct, Range[a + (N[b - a]/n), b, N[b - a]/n]]]
于 2013-03-29T21:05:15.707 に答える
0

考慮したいのは、テーブルの各行を作成する関数を作成することです。この関数の引数の 1 つは行番号です。

MapIndexed を使用してこの関数を実行します。これにより、必要に応じて範囲をトラバースする方法が提供され、増加する行番号が提供されます。

(値の範囲を含むリストを作成し、MapIndexed 関数をこのリストに適用します。)

于 2012-12-13T02:56:43.740 に答える