如何将一个sympy多项式转换为一个列表?

如何将一个sympy多项式转换为一个列表?,第1张

概述我正在尝试使用sympy来自动化多项式拟合问题的解决方案.例如,假设我定义了一个多项式函数: #!/usr/bin/pythonfrom sympy import * x, xa, xb, a0, a1, a2, a3 , a4 = symbols(('x', 'xa', 'xb', 'a0', 'a1', 'a2', 'a3', 'a4'))def p4(x): retu 我正在尝试使用sympy来自动化多项式拟合问题的解决方案.例如,假设我定义了一个多项式函数:

#!/usr/bin/pythonfrom sympy import * x,xa,xb,a0,a1,a2,a3,a4 = symbols(('x','xa','xb','a0','a1','a2','a3','a4'))def p4(x):     return a0 + a1 * x + a2 * x**2 + a3 * x**3 + a4 * x**4;

使得p4(x):[xa,xb] – > R.然后我可以像这样计算它的符号导数:

y = p4(x)ydiff = diff(y,x)

然后对导数和函数施加一些条件,以符号方式计算多项式系数,如下所示:

c0 = y.subs(x,xa)c1 = y.subs(x,xb)c2 = ydiff.subs(x,xa)c3 = ydiff.subs(x,xb)c4 = ydiff.subs(x,(xa + xb) * 0.5)

这些实际上不是条件,它们是替换,完整条件是c0 = 0.5,表示xa处的函数p4的值为0.5.在任何情况下,4个方程的最终系统对于a0,a3和a4将是线性的.

我的问题是,如何组装矩阵A:

A = Matrix([c0[1],c0[2],c0[3],c0[4],0.5],[....

使用sympy.solve_linear_system解决系统问题?

例如,计算出的c0如下所示:

In [2]: c0 Out[2]: a0 + a1*xa + a2*xa**2 + a3*xa**3 + a4*xa**4

矩阵期望c0 = 0.5等式,这个列表就像这样

[a0,a1*xa,a2*xa**2,a2*xa**3,a4*xa**4,0.5]

在sympy中是否有一个函数可以将多项式转换为系数和参数的列表?

编辑:我已经找到了如何将多项式表示为列表

c0ArgList = List(c0.args)c3ArgList = List(c3.args)

但它们在xa ^ n方面没有排序:

c0ArgListOut[92]: [a1*xa,a3*xa**3]In [93]: c3ArgListOut[93]: [a1*xa,a3*xa**3]

这使得无法应用这些条件.我如何根据’xa ^ n’中的n对它们进行排序?

解决方法 要获取所有系数,请使用all_coeffs方法:

>>> poly(1+x**2*2+5*x**4).all_coeffs()[5,2,1]

而且您不需要自己调用solve_linear_system.您只需传递需要求解的方程组以在列表中求解(并且可选地告诉您想要解决的符号的子集),它将返回答案.

>>> solve([Eq(x+y,2),Eq(x**2,4)])[{x: -2,y: 4},{x: 2,y: 0}]
总结

以上是内存溢出为你收集整理的如何将一个sympy多项式转换为一个列表?全部内容,希望文章能够帮你解决如何将一个sympy多项式转换为一个列表?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1193209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存