首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用一个具有渐近性的数值表达式计算字符串?

用一个具有渐近性的数值表达式计算字符串?
EN

Stack Overflow用户
提问于 2014-03-10 18:21:28
回答 1查看 684关注 0票数 4

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

代码语言:javascript
运行
复制
#!/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

当我用lagrange([0,1,2,4],[-1,0,7,63],3)调用函数时,我得到了输出:

代码语言:javascript
运行
复制
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),就会得到错误输出:

代码,global_dict,local_dict) #接受首选文件中的本地对象"",第1行,在TypeError中:'NegativeOne‘对象不可调用

我知道那可能是因为绳子里有一个-1,但是.我如何才能简单地得到表达式的评估?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-11 02:51:54

这一切都是关于表达式(string到目前为止)有一个正确的格式:

我的algorithm wasn't OK

所以我们得到了:

代码语言:javascript
运行
复制
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))

上学期缺少了一些*

如果我这样做了:

代码语言:javascript
运行
复制
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)

这只会起作用,我会得到我想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22308183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档