Pythonで漸化式を作成して配列に入れたい
Q&A
Closed
解決したいこと
漸化式の一般項が以下の様になっています。
f_n(x)=\frac{(x+r)^n+(x+r)^n}{2} \quad r=\sqrt{x^2-1}
この一般項を作成し$n$をfor文で回し、$x$についての関数にしたものをnumpy型の配列に保存したいです。
更に、保存したものを1つ取り出して、その関数に値を代入して得られた結果を別の配列に保存することが目標になります。
該当するソースコード
現在、最初の配列の代入で詰まっています。
import sympy as sp
import numpy as np
n=sp.Symbol("n",positive=True)
x=sp.Symbol("x",positive=True)
orbit=np.ones(100)
#一般項の作成(rは直接代入しています)
general_terms=((((x+sp.sqrt((x**2)-1))**n)+((x-sp.sqrt((x**2)-1))**n)))/2
for i in range(1,101):
general_terms_2=general_terms.subs(n,i)
orbit[i]=general_terms_2
発生している問題・エラー
TypeError: can't convert expression to float
また、$f_1(x)=x,f_2(x)=2x^2-1,f_3(x)=4x^3-3x$となるのですが、出力をみると
f1(x)=x
f2(x)=(x - sqrt(x**2 - 1))**2/2 + (x + sqrt(x**2 - 1))**2/2
f3(x)=(x - sqrt(x**2 - 1))**3/2 + (x + sqrt(x**2 - 1))**3/2
となっていて計算が簡単な式で表せていないことも問題になります。
自分で試したこと
lambdifyを用いてNumpyに変換してから代入をしてみました。
for i in range(1,101):
general_terms_2=general_terms.subs(n,i)
#n代入後はxの1変数のみになる。
args = (x)
func = sp.lambdify(args, general_terms_2, "numpy")
orbit[i]=func
ただ、だめそうでした。
TypeError: float() argument must be a string or a number, not 'function'