SymPyにおいて関数を関数で置き換えて,replaceで「引数の数を増やす事」は可能ですか?
(参考)SymPyにおいて関数を関数で置き換えて(≠代入)三角関数の加法定理を証明しよう
https://qiita.com/HigashinoSola/items/9fdff5c849445c5c1607
from sympy import *
var('u v w t')
myFn1 = Function('myFn1')
myFn2 = Function('myFn2')
myFn3 = Function('myFn3')
print('--------------------------------------------------')
v=cos(u)
print('v=',v)
print('v=',expand(v.replace(cos,sin)))
print('v=',expand(v.replace(u,w)))
print('--------------------------------------------------')
v=myFn1(u)
print('v=',v)
print('v=',expand(v.replace(myFn1,myFn2)))
print('v=',expand(v.replace(u,w)))
#v= cos(u)
#v= sin(u)
#v= cos(w)
#v= myFn1(u)
#v= myFn2(u)
#v= myFn1(w)
print('--------------------------------------------------')
v=myFn1(u)
print('v=',v)
print('v=',expand(v.replace(myFn1,myFn3).replace(u,'u,t')))
エラー: "given an expression, replace() expects "
出力したいもの
myFn3(u,t)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
(2018-05-23) 1,2できました。ありがとうございました。
FullScript
from sympy import Function, Wild
from sympy.abc import x, y
print('------------------------------------------')
f = Function('f')
g = Function('g')
v = f(x) + f(x + 1)
print('v =',v)
print('v1=',v.replace(f(x), g(x, y)))
a =Wild('a')
print('v2=',v.replace(f(a), lambda a: g(a, y)))
v = f(x) + f(x + 1)
v1= f(x + 1) + g(x, y)
v2= g(x, y) + g(x + 1, y)
print('------------------------------------------')
myFn1 = Function('myFn1')
myFn3 = Function('myFn3')
v = myFn1(x)
print('v =',v)
b =Wild('b')
print('v3b=',v.replace(myFn1(b), lambda b: myFn3(b, y)))
# u = Wild('u')
# print('v3u=',v.replace(myFn1(u), lambda a: myFn3(u, y)))
# TypeError: <lambda>() got an unexpected keyword argument 'u'
#
# v = f(x) + f(x + 1)
# v1= f(x + 1) + g(x, y)
# v2= g(x, y) + g(x + 1, y)
# v = myFn1(x)
# v3b= myFn3(x, y)
使える文字と使えない文字の違いの原因は、わかりませんでした。