Fortran 如何实现Horner';多元多项式的s格式? 背景

Fortran 如何实现Horner';多元多项式的s格式? 背景,fortran,polynomial-math,Fortran,Polynomial Math,我需要在Fortran90/95中求解多变量多项式。这样做的主要原因是使用Horner方案计算多项式时效率和精度的提高 我目前有一个单变量/单变量多项式的Horner方案的实现。然而,使用霍纳方案开发一个函数来评估多元多项式被证明是不可能的 一个二元多项式的例子是:12x^2y^2+8x^2y+6xy^2+4xy+2x+2y,它将分解为x(x(y(12y+8))+y(6y+4)+2)+2y,然后计算x&y的特定值 研究 我做了研究,发现了许多论文,如: staff.ustc.edu.cn/~xi

我需要在Fortran90/95中求解多变量多项式。这样做的主要原因是使用Horner方案计算多项式时效率和精度的提高

我目前有一个单变量/单变量多项式的Horner方案的实现。然而,使用霍纳方案开发一个函数来评估多元多项式被证明是不可能的

一个二元多项式的例子是:12x^2y^2+8x^2y+6xy^2+4xy+2x+2y,它将分解为x(x(y(12y+8))+y(6y+4)+2)+2y,然后计算x&y的特定值

研究 我做了研究,发现了许多论文,如:
staff.ustc.edu.cn/~xinmao/ISSAC05/pages/bulletins/articles/147/hornercorrected.pdf
citeserx.ist.psu.edu/viewdoc/download?doi=10.1.1.40.8637&rep=rep1&type=pdf
www.is.titech.ac.jp/~kojima/articles/B-433.pdf

问题 然而,我不是数学家或计算机科学家,所以我对用于传达算法和思想的数学有困难

据我所知,基本策略是将一个多元多项式转换成单独的一元多项式,并以这种方式进行计算


有人能帮我吗?如果有人能帮我把算法转换成伪代码,我可以自己实现成Fortran,我将非常感激。

对于两个变量,可以将多项式系数存储在秩=2矩阵
K(n+1,n+1)
中,n是多项式的阶数。然后观察以下模式(在伪代码中)

y
而言,每一行都是一个独立的荷马方案,而就
x
而言,所有这些都是最终的荷马方案

要使用FORTRAN或任何语言编写代码,请创建一个中间向量
z(n+1)

z(i) = homers(y,K(i,1:n+1))


其中,
homers(value,vector)
是单变量求值的实现,其中多项式系数存储在
vector

中,我在Python中实现了这一点:

您可以查看这里使用的方法,并将其移植到Fortran

注:据我所知,目前还没有找到多元多项式最优horner因式分解的已知算法。最好的办法是使用一种巧妙的启发式方法来寻找“好”的因式分解。我实现了一个贪婪的启发式,类似于论文“”中描述的启发式


一些相关出版物(包括上述)的作者声称他们提出的算法已经实现,但我没有找到任何公开的算法。

这听起来像是MathOverflow的资料。太糟糕了,我们不能迁移到那里。在你弄明白这一点之前,为什么不编写简单方法的代码呢?当计算机可能正在运行程序时,让它处于空闲状态是没有效率的。当您有了解决方案时,整理运行时效率。并且:确保一元多项式的计算成本不会超过您所寻求的Horner方案的效率效益。
z(i) = homers(y,K(i,1:n+1))
p = homers(x,z(1:n+1))