由于缺少Latex编辑器,下面是一个分段函数的图片,我希望使用Sympy绘制它。我想传入两个系数数组和一个x值,然后计算它并绘制函数。(编辑:比字母表多了一个p,图片更新了)
这是我目前为止的尝试(alpha和p是列表/数组,t是一个数字):
def getf(alpha,p,t):
#Create the argument list of tuples for the SymPy.Piecewise function
argtuples = []
for n,number in enumerate(alpha):
if n == 0:
argtuples.append((p[0]*x, x<alpha[0]))
elif 0<n and n<list(enumerate(alpha))[-1][0]:
argtuples.append((p[0]*alpha[0] + Sum(p[i]*(alpha[i] - alpha[i-1]),(i,1,n)) + p[n+1]*(x-alpha[n]), alpha[n-1] <= x < alpha[n]))
else:
argtuples.append((p[0]*alpha[0] + Sum(p[i]*(alpha[i] - alpha[i-1]),(i,1,n)) + p[n+1]*(x-alpha[n]), x>=alpha[n]))
f = Piecewise(argtuples)
return f(t)
from sympy import Piecewise, Sum
from sympy.abc import x, i
getf([10000,50000,100000,1000000],[0.05,0.08,0.15,0.30,0.40],1000001)
但是,我得到了一个错误“list index must be integer or slices,not Symbol”。既然数组可以是任意长度的,如何引用传递给函数的系数值?在
不能在Python列表上使用符号索引(这里
i
是符号索引,因为您是从abc
导入它的)。如果您提前知道列表,那么应该使用Pythonsum
函数来求和值,而不是Sum
。在还有一个问题,就是你有
alpha[n-1] <= x < alpha[n]
。不幸的是,这是行不通的,因为Python处理链式不等式的方式。您必须将其写成And(alpha[n-1] <= 1, x < alpha[n])
,否则您将得到TypeError: cannot determine truth value of Relational
。在相关问题 更多 >
编程相关推荐