Python 使用sympy使用数值表达式计算字符串?

Python 使用sympy使用数值表达式计算字符串?,python,sympy,Python,Sympy,我编写了一个函数,用于计算拉格朗日插值多项式的数值表达式: #!/usr/bin/env python #coding: utf8 from sympy import * import json def polinomioLagrange(Xs, Ys, t): x = Symbol('x') expresion = '' for k in range(len(Xs)): if k >0: #Si no es el primero ni e

我编写了一个函数,用于计算拉格朗日插值多项式的数值表达式:

#!/usr/bin/env python
#coding: utf8 
from sympy import *
import json


def polinomioLagrange(Xs, Ys, t):

    x = Symbol('x')
    expresion = ''
    for k in range(len(Xs)):

        if k >0: #Si no es el primero ni el último término de la sumatoria
            expresion = expresion + '+' + str(Ys[k]) + '*'
        elif k==0:
            expresion = expresion + str(Ys[k]) + '*'

        expresion = expresion + '('

        for i in range(len(Xs)):
            if k==i:
                continue # Si i==k saltamos esta iteración para eliminar división sobre cero

            expresion = expresion + '(' + '3' + '-' + str(Xs[i]) + ')'

            if k != len(Xs)-1 and i!= len(Xs)-1:
                expresion=expresion+'*'

            #expresion = expresion + '(' + str(a) + '-' + str(Xs[i]) +' )' + '/' + '(' + str(Xs[k]) + '-' + str(Xs[i]) + ')'

        expresion = expresion + '/'

        for i in range(len(Xs)):
            if k==i:
                continue # Si i==k saltamos esta iteración para eliminar división sobre cero        
            expresion = expresion + '(' + str(Xs[k]) + '-' + str(Xs[i]) + ')'

            if i != len(Xs)-1 and k != len(Xs)-1:
                expresion=expresion+'*'             
            print expresion
            print k, i
            ewa = raw_input('Prompt :')
        expresion = expresion + ')'

    print expresion
当我用拉格朗日([0,1,2,4],-1,0,7,63],3)调用函数时,我得到输出:

7*((3-1)*(3-2)*(3-4)/(0-1)*(0-2)*(0-4))+0*((3-0)*(3-2)*(3-4)/(1-0)*(1-2)*(1-4))+-1*((3-0)*(3-1)*(3-4)/(2-0)*(2-1)*(2-4))+63*((3-0)(3-1)(3-2)/(4-0)(4-1)(4-2))
这实际上是正常的,但是,如果我尝试
sympify(expresion)
我会得到错误输出:

code,全局,局部)#优先选择局部对象
文件“”,第1行,在
TypeError:“NegativeOne”对象不可调用

我知道这可能是因为字符串中有-1,但是。。。如何简单地计算表达式?

这都是关于表达式(
string
到目前为止)具有正确格式的问题:

我的

我们也得到了:

7*((3-1)*(3-2)*(3-4)/(0-1)*(0-2)*(0-4))+0*((3-0)*(3-2)*(3-4)/(1-0)*(1-2)*(1-4))+-1*((3-0)*(3-1)*(3-4)/(2-0)*(2-1)*(2-4))+63*((3-0)(3-1)(3-2)/(4-0)(4-1)(4-2))
上学期缺少一些
*

如果我这样做:

from sympy import *

expression = '7*((3-1)*(3-2)*(3-4)/(0-1)*(0-2)*(0-4))+0*((3-0)*(3-2)*(3-4)/(1-0)*(1-2)*(1-4))+-1*((3-0)*(3-1)*(3-4)/(2-0)*(2-1)*(2-4))+63*((3-0)*(3-1)*(3-2)/(4-0)*(4-1)*(4-2))'
y = S(expression)
siympify(y)

那很简单,我会得到我想要的。

你说构造字符串是什么意思?SymPy不太擅长字符串的符号化。例如,它不能表示一般的数学表达式。你确定你需要它吗?另外,如果您只留下少量代码来重现问题,其他人也会更容易提供帮助。只是字符串必须采用正确的格式。这是个骗局,它看不懂乳胶。我认为它可以输出乳胶?是的,乳胶输出很有效。
from sympy import *

expression = '7*((3-1)*(3-2)*(3-4)/(0-1)*(0-2)*(0-4))+0*((3-0)*(3-2)*(3-4)/(1-0)*(1-2)*(1-4))+-1*((3-0)*(3-1)*(3-4)/(2-0)*(2-1)*(2-4))+63*((3-0)*(3-1)*(3-2)/(4-0)*(4-1)*(4-2))'
y = S(expression)
siympify(y)