前提・実現したいこと
表題について質問させていただきました。詳しい内容は、以下の通りです。
- 2変数のマクローリン等で導出した多項式の関数を4次の係数までで切り捨てたい
- 関数の係数に
log2
が入ってしまっているので、少数に変換したい
webで調べても、いまいち情報が見つからなかったので、質問いたしました。よろしくお願いいたします。
発生している問題・エラーメッセージ
特になし
該当のソースコード
簡略化したソースコードを以下に示します。
python
1from sympy import * 2from sympy.plotting import plot 3 4%matplotlib inline 5 6# 変数として使用する文字を指定する 7x1,x2 = symbols("x1,x2") 8 9f=log(2)*x+x1*x2+x1**3 10print(f)#実際の解は以下のようになってしまう。 x1**3 + x1*x2 + x1*log(2) 11#この解を、x**2の項までで近似して、かつlogを少数表記にし、以下の答えが出るようにしたい。 12#~x1*x2+0.30102999566*x1+O(x**3)
x1**3 + x1*x2 + x1*log(2)
をx1*x2+0.30102999566*x1+O(x**3)
に変更したいです。よろしくおねがいします。
補足情報(FW/ツールのバージョンなど)
google colabにて記述
また、以下に実際のソースコードを示します。
from sympy import * from sympy.plotting import plot %matplotlib inline # 変数として使用する文字を指定する z, r1,r2 = symbols("z r1 r2") gzi1=-1/2*r1+1/8*r1**2-1/8*r1**3 gzi2=-1/2*r2+1/8*r2**2-1/8*r2**3 f=log(1+exp(gzi1-gzi2)) res=0 for n in range(): coeff=1/factorial(n) for i in range(n+1): coeff2=factorial(n)/(factorial(n-i)*factorial(i))*(r1**i)*(r2**(n-i)) print(coeff2) tmp=diff(f,r1,i) tmp=diff(tmp,r2,n-i) tmp=tmp.subs([(r1, 0),(r2,0)]) print(tmp) res=res+coeff*coeff2*tmp xi_inv=-2*z+z**2+z**3 tmp=xi_inv.subs([(z, res+gzi2)]) tmp.expand()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。