Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 处理同向表达式树_Python 3.x_Sympy - Fatal编程技术网

Python 3.x 处理同向表达式树

Python 3.x 处理同向表达式树,python-3.x,sympy,Python 3.x,Sympy,比如说,我们有一个辛函数cosx。每个函数都可以 由树呈现,例如,如图所示 我想在这个表达式树的每个节点中插入一个参数,这意味着 cos(x) -> a*cos(b*x) 对于更复杂的表达式,它应该如下所示 (exp(x)+cos(x)*x)/(x) -> h*(b*exp(a*x)+f*(c*cos(d*x)*e*x))/(j*x) 其中a,b,c,d,e,f,g,h,j是我想要拟合的参数 一个有用的资料来源可能是《在树上行走》一章。我试着更换机器的零件 expr.args

比如说,我们有一个辛函数cosx。每个函数都可以 由树呈现,例如,如图所示

我想在这个表达式树的每个节点中插入一个参数,这意味着

cos(x) -> a*cos(b*x) 
对于更复杂的表达式,它应该如下所示

(exp(x)+cos(x)*x)/(x) -> h*(b*exp(a*x)+f*(c*cos(d*x)*e*x))/(j*x)
其中a,b,c,d,e,f,g,h,j是我想要拟合的参数

一个有用的资料来源可能是《在树上行走》一章。我试着更换机器的零件 expr.args 元组,但这是不可能的

这是一个表达:

from simply import symbols, exp, cos
x, y = symbols('x y')
expr = (exp(x)+cos(x)*y)/(x)

这可能会让您开始:

>>> s = numbered_symbols('C')
>>> cform = ((exp(x)+cos(x)*x)/(x)).replace(
...    lambda x:not x.is_Number,
...    lambda x:x*next(s))
>>> cform
C1*C8*C9*(C2*C4*C5*x*cos(C3*x) + C7*exp(C6*x))/(C0*x)

>>> from sympy.solvers.ode import constantsimp, constant_renumber

>>> constantsimp(cform, [i for i in cform.atoms(Symbol) if i.name.startswith('C')])
C0*(C2*x*cos(C3*x) + C7*exp(C6*x))/x
>>> constant_renumber(_)
C1*(C2*x*cos(C3*x) + C4*exp(C5*x))/x
>>> eq = _
>>> cons = ordered(i for i in eq.atoms(Symbol) if i.name.startswith('C'))
>>> eq.xreplace(dict(zip(cons, var('a:z'))))
a*(b*x*cos(c*x) + d*exp(e*x))/x

常量_renumber u函数似乎缺少必需的参数“symbolname”、“startnumber”和“endnumber”。虽然前两个参数很容易放在那里,但我希望endnumber不固定,而是取决于您放在里面的表达式。可能吗?此外,vars没有定义,它说,对于eq,“str”对象没有属性“atoms”,我重新检查了出现在本页上的代码。如图所示,它在没有修改的情况下运行。如果您的Symphy版本需要更多的参数,那么它可能是旧版本。请注意,函数是var,而不是var。另请参阅有关将线性函数应用于其参数项的相关问题。