26

どのプログラミング言語またはライブラリが無限級数(幾何学的または調和的など)を処理できますか?おそらく、いくつかのよく知られたシリーズのデータ​​ベースが必要であり、収束の場合は自動的に適切な値を与え、発散の場合は例外を生成する必要があります。

たとえば、Pythonでは次のようになります。

sum  = 0
sign = -1.0
for i in range(1,Infinity,2):
     sign = -sign
     sum += sign / i

その場合、合計は、ループ内で計算を行わずにmath.pi/4である必要があります(これはよく知られている合計であるため)。

4

13 に答える 13

18

遅延評価を行うほとんどの関数型言語は、無限級数の処理をシミュレートできます。もちろん、有限のコンピューターでは無限級数を処理することはできません。私の頭の中では、Mathematicaはあなたが望むことのほとんどを行うことができると思います.Mapleもできると思います.おそらくSageや他のコンピュータ代数システム.Haskellの実装が見つからない場合は驚くでしょうあなたに合っています。

OPを明確にするための編集:無限ループの生成は提案しません。遅延評価を使用すると、無限級数をシミュレートするプログラム (または関数)、つまり時間と空間が有限であるプログラムを作成できます。このような言語を使用すると、シミュレートされた無限級数の収束などの多くのプロパティを、かなりの精度とある程度の確実性で判断できます。Mathematicaを試すか、アクセスできない場合はWolfram Alphaを試して、1 つのシステムで何ができるかを確認してください。

于 2010-03-31T10:59:46.930 に答える
15

ウィキペディアのComputer Algebra Systemsのカテゴリを参照してください。

于 2010-03-31T11:18:16.373 に答える
13

Haskellには、単に無限のリストをサポートする以外に、このために利用できる2つのツールがあります。

まず、OEISでのシーケンスの検索をサポートするモジュールがあります。これは、シリーズの最初のいくつかの用語に適用でき、閉じた形などがわからないシリーズを識別するのに役立ちます。もう1つは、計算可能な実数の「CReal」ライブラリです。値に絶えず向上する境界を生成する機能がある場合(つまり、プレフィックスを合計することにより、半順序を許可する計算可能な実数として宣言できます。多くの点で、これにより、次のような値が得られます。上記の合計のように使用します。

ただし、一般に2つのストリームの等式を計算するには、停止問題のオラクルが必要です。したがって、Mathematicaのような一部の数式処理システムは試すことができますが、完全に一般的に望むことを実行する言語はありません。

于 2010-03-31T18:36:19.230 に答える
12

Maxima はいくつかの無限の合計を計算できますが、この特定のケースでは答えが見つからないようです :-s

(%i1) sum((-1)^k/(2*k), k, 1, inf), simpsum;
                                 inf
                                 ====       k
                                 \     (- 1)
                                  >    ------
                                 /       k
                                 ====
                                 k = 1
(%o1)                            ------------
                                      2

しかし、たとえば、それらは機能します:

(%i2) sum(1/(k^2), k, 1, inf), simpsum;
                                        2
                                     %pi
(%o2)                                ----
                                      6

(%i3) sum((1/2^k), k, 1, inf), simpsum;
(%o3)                                  1
于 2010-03-31T11:32:07.933 に答える
7

Pythonの場合は、Mathematica と Matlab のクローンであるSymPyを確認してください。

Sageと呼ばれるより重い Python ベースの数学処理ツールもあります。

于 2010-03-31T11:24:18.870 に答える
4

Mathematicaのような記号計算ができるものが必要です。wolframaplhaのクワイアリングを検討することもできます:sum((-1)^ i * 1 / i、i、1、inf)

于 2010-04-18T15:46:18.407 に答える
3

sympy の一連のサポートを提供する sympy のモジュールである mpmath(python) というライブラリがあります (sage もサポートしていると思います)。
より具体的には、すべてのシリーズのものはここにあります:シリーズのドキュメント

于 2010-04-19T18:05:19.813 に答える
3

C++ iRRAM ライブラリは、実数演算を正確に実行します。とりわけ、 limit 関数を使用して制限を正確に計算できます。iRRAMのホームページはこちらです。ドキュメントの制限機能を確認してください。任意精度の演算について話しているのではないことに注意してください。これは正確な算術演算です。e を正確に計算するためのコードは、Web サイトの例から抜粋したものです。

//---------------------------------------------------------------------
// Compute an approximation to e=2.71.. up to an error of 2^p
 REAL e_approx (int p)
{
  if ( p >= 2 ) return 0;

  REAL y=1,z=2;
  int i=2;
  while ( !bound(y,p-1) ) {
    y=y/i;
    z=z+y;
    i+=1;
  }
  return z;
};

//---------------------------------------------------------------------
// Compute the exact value of  e=2.71.. 
REAL e()
{
  return limit(e_approx);
};
于 2010-05-05T00:28:46.227 に答える
2

ClojureHaskellは頭から離れました。

申し訳ありませんが、haskell のシーケンスへのより良いリンクが見つかりませんでした。他の誰かがそれを持っている場合は、お知らせください。更新します。

于 2010-03-31T11:26:50.143 に答える
1

これは、たとえば sympy と sage (オープンソースの代替手段の中で) で実行できます。以下では、sympy を使用したいくつかの例を示します。

[10]: summation(1/k**2,(k,1,oo)) Out[10]: 2 π ── 6

[11]: summation(1/k**4, (k,1,oo)) Out[11]: 4 π ── 90

[12]: summation( (-1)**k/k, (k,1,oo)) 出力[12]: -log(2)

[13]: summation( (-1)**(k+1)/k, (k,1,oo)) Out[13]: log(2)

舞台裏では、これは超幾何級数の理論を使用しています。良い紹介は、Google で検索できる Marko Petkovˇeks、Herbert S. Wilf、および Doron Zeilberger による本「A=B」です。超幾何級数とは?

幾何級数が何であるかは誰もが知っています: $X_1, x_2, x_3, \dots, x_k, \dots $ は、連続項の比率 $x_{k+1}/x_k$ が一定の場合、幾何級数です。連続項比が$k$の有理関数なら超幾何!sympy は基本的に、この最後の条件が満たされるすべての無限和を処理できますが、それ以外はごくわずかです。

于 2012-06-11T19:57:40.210 に答える
1

私は、研究目的でいくつかの巨大なデータ シリーズに取り組んできました。そのためにMatlabを使用しました。無限シリーズを処理できる/できないとは知りませんでした。

でも可能性はあると思います。あなたは試すことができます:)

于 2010-03-31T11:06:31.987 に答える