プログラミング言語またはライブラリで無限のでしょうか?
-
23-09-2019 - |
質問
プログラミング言語またはライブラリで無限のシリーズのような幾何学的には高調波)?しかしデータベースの一部もシリーズは、自動的に適切な値の場合は収束し、その生成中に例外の場合は乖離がある。
例えば、Pythonでは次のようになります:
sum = 0
sign = -1.0
for i in range(1,Infinity,2):
sign = -sign
sum += sign / i
そして、和する必要math.pi/4なだけ電源をオンにする"という計算にループで知られる和).
解決
いうことができる象徴的な計算のような Mathematica.できるものと考えquering wolframaplha:sum((-1)^i-1/i,i,1,inf)
他のヒント
いい加減に評価するほとんどの関数型言語は、無限級数の処理をシミュレートすることができます。私はあなたが認識している確信しているとしてもちろん、有限のコンピュータ上では、無限級数を処理することはできません。私の頭の上から、私はのMathematicaのの最もあなたが望むかもしれないものの、私はそれを疑うんすることができます。のメープルのことができますあまりにも、多分のセージの推測と他のコンピュータ代数システムやスーツというあなたはHaskellの実装を見つけることができない場合、私は驚かれると思います。
OPのために明確にするEDIT:私は無限ループを発生させる提案はありません。レイジー評価は、無限級数をシミュレートし、書き込みプログラム(または関数)、自身が時間と空間に有限であるのプログラムにことができます。そのような言語を使用すると、このようなかなりの精度と確実性のある程度でシミュレートされた無限級数の収束、等の特性の多くを決定することができます。試してみてください。のMathematicaののか、あなたはそれへのアクセスを持っていない場合は、ウルフラムアルファ 1つのシステムがあなたのために何ができるかを確認します。
はMaximaは、いくつかの無限の合計を計算することができますが、この特定のケースでは、答えを見つけるように見えるしません
(%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
あなたは以下のとおりにセージの(自由Pythonベースの数学ソフトウェアシステム)に直列の問題を解決することができます:
sage: k = var('k'); sum((-1)^k/(2*k+1), k, 1, infinity)
1/4*pi - 1
舞台裏では、これは本当にマキシマ(セージのコンポーネント)を使用しています。
sympyのためのシリーズのサポートを(私はそれがまたセージをバックアップすると信じて)を提供mpmath(パイソン)と呼ばれるライブラリ、sympyのモジュールは、あります。
具体的には、シリーズもののすべてがここで見つけることができます:シリーズドキュメントの
C ++ライブラリiRRAMを行い、実際の算術の正確の。とりわけ、それは正確に制限機能を使用して限界を計算することができます。 iRRAMのためのホームページはここのです。ドキュメントの制限機能をチェックしてください。私は、任意精度演算の話ではないことに注意してください。これは正確なの賢明な定義については、の正確なの算術演算です。ここでは、自分のWebサイト上の例から引き出さ正確に計算eに自分のコードは、ですます:
//---------------------------------------------------------------------
// 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);
};
私は、研究目的のために巨大なデータ系列のカップルで働いています。 私はそのための のMatlab のを使用しました。私はそれが/無限級数を処理することはできません知りませんでした。
しかし、私は可能性があると思います。 Uは試すことができます。)
これは、以下では(オープンソースの選択肢の中)インスタンスsympy及びセージのためにsympyを使用していくつかの例を行うことができ
は、[10]:加算(1 / K ** 2、(K、1、OO)) アウト[10]: 2 π ── 6
は、[11]:加算(1 / K ** 4、(K、1、OO)) アウト[11]: 4 π ── 90
は、[12]:合計((-1)** K / K(K、1、OO)) OUT [12]:-log(2)
は、[13]:合計((-1)**(K + 1)/ K(K、1、OO)) OUT [13]:ログ(2)
これは超幾何シリーズの理論を使用している舞台裏では、素敵な導入は、本マルコPetkoveksによる「A = B」、ハーバート・S. Wilfです あなたがグーグルで見つけることができるとドロン・ゼイルバーガー。 ¿超幾何シリーズとは?
は誰もが等比級数が何であるかを知っている:contecutive用語比の$ X_ {K + 1} / X_K $が一定であれば$ X_1、X_2、X_3、\ドット、X_K、\ドット$幾何学です。期連続比は$ K $における有理関数である場合、それは超幾何です! sympyは基本的にすべてのこの最後の条件が満たされた無限の合計が、ごく少数の人を扱うことができます。
ちょうどあなたのコンピュータにsympyをインストールします。その後、次のコードを実行します:
from sympy.abc import i, k, m, n, x
from sympy import Sum, factorial, oo, IndexedBase, Function
Sum((-1)**k/(2*k+1), (k, 0, oo)).doit()
結果は次のようになります。PI / 4