系数表/数组上求和的递归分段函数

2024-09-30 18:25:04 发布

您现在位置:Python中文网/ 问答频道 /正文

由于缺少Latex编辑器,下面是一个分段函数的图片,我希望使用Sympy绘制它。我想传入两个系数数组和一个x值,然后计算它并绘制函数。(编辑:比字母表多了一个p,图片更新了)

Piecewise Function 这是我目前为止的尝试(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”。既然数组可以是任意长度的,如何引用传递给函数的系数值?在


Tags: the函数fromalphafor绘制图片数组
1条回答
网友
1楼 · 发布于 2024-09-30 18:25:04

不能在Python列表上使用符号索引(这里i是符号索引,因为您是从abc导入它的)。如果您提前知道列表,那么应该使用Python sum函数来求和值,而不是Sum。在

sum(p[i]*(alpha[i] - alpha[i-1]) for i in range(1, n))

还有一个问题,就是你有alpha[n-1] <= x < alpha[n]。不幸的是,这是行不通的,因为Python处理链式不等式的方式。您必须将其写成And(alpha[n-1] <= 1, x < alpha[n]),否则您将得到TypeError: cannot determine truth value of Relational。在

相关问题 更多 >