如何解决如何在Python函数中将SymPy.core.add.Add用作数学计算的值
我有一个函数,它通过一个值数组进行循环。然后我将其整合两次,我需要 在另一个函数中使用第二次积分的值。
import numpy as np
import sympy
from sympy.abc import a,x,y
#First function
def m1(x):
mn = (-110 + 210*x + -113*x**2 + 141*x**3 + -869*x**4 + 2980*x**5 +
-6150*x**6 + 7848*x**7 + -6079*x**8 + 2626*x**9 + -485*x**10)
return mn
#Array of values
dist = np.arange(0,1.09,0.01)
result_m1 = [] #Empty list to store results
#Iteration over array
for v in dist:
result_m1.append(m1(v))
f1 = sympy.integrate(m1(x),x) #First symbolic integration
f2 = sympy.integrate(f1,x) #second symbolic integration
def d(x):
df = (-1)*(f2)/(67e9*4.72537401e-9)
return df
#Second iteration for another batch of results
result_d = []
for v in dist:
result_d.append(d(v))
每当我运行上面的代码,我都会得到result_m1是数字列表(可用),而result_d是表达式/ SymPy符号方程式列表(不可用)。 我需要f2是一个符号方程式,因此我将得到一个像m1函数之类的函数(我可以用该数组进行迭代的函数)。
解决方法
全局sympy变量x
与函数的参数x
之间存在混淆。这些不一样。最好给他们起个单独的名字,以减少混乱。然后,您会注意到f2
使用符号x
。可以通过f2.subs(x,xi)
将其替换为参数值:
import numpy as np
import sympy
from sympy.abc import a,x,y
#First function
def m1(xi):
mn = (-110 + 210*xi + -113*xi**2 + 141*xi**3 + -869*xi**4 + 2980*xi**5 +
-6150*xi**6 + 7848*xi**7 + -6079*xi**8 + 2626*xi**9 + -485*xi**10)
return mn
#Array of values
dist = np.arange(0,1.09,0.01)
result_m1 = [] #Empty list to store results
#Iteration over array
for v in dist:
result_m1.append(m1(v))
f1 = sympy.integrate(m1(x),x) #First symbolic integration
f2 = sympy.integrate(f1,x) #second symbolic integration
def d(xi):
df = (-1)*(f2.subs(x,xi))/(67e9*4.72537401e-9)
return df
#Second iteration for another batch of results
result_d = []
for v in dist:
result_d.append(d(v))
如评论中所述,lambdify()
可用于创建numpy版本,该版本允许编写使numpy的broadcasting受益的调用:
import numpy as np
import sympy
from sympy.abc import a,y
#First function
def m1(xi):
mn = (-110 + 210*xi + -113*xi**2 + 141*xi**3 + -869*xi**4 + 2980*xi**5 +
-6150*xi**6 + 7848*xi**7 + -6079*xi**8 + 2626*xi**9 + -485*xi**10)
return mn
dist = np.arange(0,0.01)
m1_np = sympy.lambdify(x,m1(x)) # use lambdify to create a numpy version of function m1
result_m1 = m1_np(dist)
f1 = sympy.integrate(m1(x),xi))/(67e9*4.72537401e-9)
return df
d_np = sympy.lambdify(x,d(x))
result_d = d_np(dist)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。