コンテキスト: Python と sympy を使用して、非常に単純なガンマ関数フラクタル プロットを作成しようとしています。最初は、それがどのように機能するかを理解するための非常に単純なバージョンです (counter=0 または 1 の値に基づく 2 つのマッピング カラー)。
基本的に、コード (以下) はガンマ関数を呼び出し、いくつかの複素数比較を行います。複素数 "nextcomplex=gamma(mycomplex)" が最初の "mycomplex" 複素数よりも "1+0i" に近いことを確認するだけです。 . フラクタルを作成するための最終的なアルゴリズムはそれよりも複雑ですが、基本的な計算はそれらと同じであるため、その単純なコードの速度を向上させる必要があります。
短い間隔では問題なく動作し、値をプロットできますが、大きな間隔では非常に遅くなります。現在実行していますが、1 時間以上実行されており、合計で test_limitn x test_limitm=1000x1000 要素に対して実行されています。(たとえば、100x100 までは問題なく、値をプロットして非常に基本的なフラクタルを確認できます)
私の質問は次のとおりです。コードを強化して高速化するにはどうすればよいですか? (たとえば、他の Python ライブラリ、または比較を行うのにはるかに適した関数が他にあるなど)。
from sympy import gamma,I,re,im,zoo
test_limitn = 1000
test_limitm = 1000
for m in range(-test_limitm,test_limitm):
for n in range(-test_limitn, test_limitn):
counter = 0
mycomplex = m+(n*I)
nextcomplex = gamma(mycomplex).evalf(1)
if mycomplex!=zoo and nextcomplex!=zoo:
absrenextcomplex = re(nextcomplex)
absimnextcomplex = abs(im(nextcomplex))
if (abs(n) > absimnextcomplex) and (abs(1-m) > abs(1-absrenextcomplex)):
counter = 1
どんなヒントでも大歓迎です、ありがとう!