下記のコードを書きました.
n=0,1,2,3,4,5までは上手くいくのですが
n=6以上に変えると計算がうまくいかないt,,,
とういうか計算時間が以上にかかるのですがなぜですか.
何かコードでおかしなことをしてますか?
たぶん,n=6以上にすると,
ret = solve(lp,x)で固まります.
#!/usr/bin/env python2.7 # coding: utf-8 # test.py #変更する箇所は、ルジャンドルの欲しい次数(実際には欲しい零点の数)のn=だけ import sympy from sympy import Symbol, legendre, N, solve list = [] x = Symbol('x') n = 6 lp = legendre(n, x) #print('多項式次数は', n) #print(lp) # 多項式を出力する ret = solve(lp, x) # lp = 0 を x について解く #print('{}次ルジャンドル多項式の零点(解析解)は\n{}'.format(n, ret)) #解析解ではなく、数値として取り出す vals = [N(r) for r in ret] print('零点は') #list.append(vals) print(vals) f1 = sympy.diff(lp,x) #print('1階微分は') #print(f1) num = len(vals) for i in range(num): f2 = f1.subs(x,vals[i]) list.append(f2) #print(list) list2 = [] for i in range(num): w = 2/((1-vals[i]*vals[i])*list[i]*list[i]) list2.append(w) print('重みは') print(list2)
タイトルを見ただけで、なにをやろうとしてなにに困っているかわかるよう具体的に書きましょう。
またコードについてもなにをするためのものなのか要約がほしいです。
なぜだかわかりますか?
回答者はまずタイトルを見ます。
自分に経験があって回答できそうか、情報が多くて判断しやすいか。
どんな試行錯誤を自分でしたかが書いておらず、長大なコードを丸投げして、ぜんぶ読んで実行して判断してくれという質問はもっとも負担の多いパターンです(そうしなければいけないこともありますが)。
回答率を上げるため、そして自分の中で問題点を整理するため、なるたけ平易に最小限の説明・コードにしましょう。
そのためには問題のスコープをできるだけ狭くすることです(問題になってるコードを特定して、それだけで実行できるようにしたものを載せる)。
たとえば「sympyでルジャンドル多項式の次数を6以上にすると解くのに時間がかる」というタイトルと「Pythonコードのバグがわからない」ではだいぶ違うわけです(一般に計算時間がかかること自体はバグではないです)。
コンピュータのリソースと同様に、回答者のリソースも有限です。なるたけ効率よく使えるようプログラム(質問)しましょう。
回答2件
あなたの回答
tips
プレビュー