将符号方程解析为Sympy函数

4

我试图在代码中传递image1,当我将其复制粘贴为文本时,它看起来像这样:∑(i=1,n)(a+m*x*(i)-y*(i))^2

但是它不起作用。

以下是我的代码,它使用了不同的语法:

from sympy import symbols,sympify,solve,Eq,Symbol

from sympy import symbols,Eq,sympify,summation
expr = **('summation((m * x*(i) + a - y*(i))^2, (i, 0, n))')**
Eq1 = Eq(sympify(expr))
print(Eq1)
values = {2001,10,2,3,5}
arr_symbols = list(Eq1.free_symbols)
print(arr_symbols)
Method1(arr_symbols,values,expr)

def Method1(arr_symbols,Values,expr):
    from sympy import symbols, Eq, solve, pprint, integrate, sympify
    z = symbols('z')
    Formula = Eq(sympify(expr),z)
    print(Formula)
    index = 0
    for i in Values:
        Formula = Formula.subs(arr_symbols[index],i)
        index+=1
    print(solve(Formula))

但是我想做的是使用∑(i=1,n)(a+m*x*(i)-y*(i))^2,并请求sympy将其转换为我需要的形式。


你正在处理什么数据并不清楚。你有x和y的值吗?m?a?values中的值对应哪些变量? - smichr
是的,值分别替换变量x、y、m、a,但这不是问题所在。问题在于当我将“∑24_(i=0)^n▒〖(a+mx(i)-y(i))^2”作为表达式传递时,它会调用语法错误。我想要一种方法将“∑24_(i=0)^n▒〖(a+mx(i)-y(i))^2”转换为“summation((m * x*(i) + a - y*(i))^2, (i, 0, n))”,这是sympy理解该表达式的方式。 - shafay
我认为SymPy无法解析这样的东西。它可以识别代码,但不会将求和符号视为函数。你想做什么?如果你只是为x和y传递单个值,那么就不需要求和。 - smichr
这个求和仅仅是我想要做的事情的一个例子。 我有很多类似这样带有各种符号的表达式,我想找到一种通过Python代码将它们转换为Python理解的方法。 我拥有的表达式都将是动态的应用程序将从由最终用户编写的Excel中读取它们,最终用户不会以Python可以理解的形式编写公式,他们将像平常一样编写公式。 - shafay
如果Sympy无法完成,可能还有其他库可以。我已经卡在这个问题上两天了。 - shafay
3个回答

1
SymPy可以表示这个方程,但它只能解析Python。你也许可以编写扩展来处理这种情况(请参见https://docs.sympy.org/latest/modules/parsing.html)。原则上应该是可能的,尽管可能不是很简单。我只建议在您的表达式语法已经非常接近Python时才这样做。如果不是(看起来不是),最好使用像ANTLR这样的真正的解析库来构建表达式的语法。然后,您可以使用它来解析为SymPy(例如,请参阅sympy.parsing.latex模块的编写方式)。
我不知道Python中是否有预先存在的库可以处理您的表达式类型。我不知道任何这样的库。最好的情况是你可以找到别人已经编写好的语法,这样你就不必自己编写了。

嘿,感谢你的回答,但我已经检查了LaTeX解析,它无法处理这种表达式。但我仍在寻找一个可以帮助我解决问题的库。 - shafay
1
我并不是说LaTeX解析器可以解析这些表达式。它不能。相反,我是说你需要构建自己的解析器,并查看LaTeX解析器的构建方式可以给你一些提示。 - asmeurer

0

这是不可能的。 我们必须传递LaTeX代码。


0
如果您已经给出了变量m以及xy的值,并且正在尝试计算残差平方和,则最好编写一个函数来执行这个操作或执行类似下面这样的操作:
>>> x = [1, 2, 3]
>>> y = [4, 7, 11]
>>> a = 2
>>> m = 5
>>> sum((a + m*xi - yi)**2 for xi, yi in zip(x, y))
70

这个求和仅仅是我想要做的事情的一个例子。 我有很多类似这样带有各种符号的表达式,我想找到一种通过Python代码将它们转换为Python理解的方法。 我拥有的表达式都将是动态的应用程序将从由最终用户编写的Excel中读取它们,最终用户不会以Python可以理解的形式编写公式,他们将像平常一样编写公式。 - shafay
如果Sympy无法完成,可能还有其他库可以。我已经卡在这个问题上两天了。 - shafay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接