用于复数多项式的 C# 类
一个用于复多项式的 C# 类,提供多项式算术、微分和积分功能
引言
PolyLib
是一个 C# 类库,提供基本的多项式算术,例如加法、乘法和指数运算,微分和积分,计算多项式的复数根,因式分解以及在复数点进行求值。
背景
例如这样的多项式...
p(x) = 1 + x^2 + 2*x^3
... 应该很常见吧。有关复数的介绍,请阅读 C# 矩阵库文档的最后一章(在 CodeProject 上查找 CSML
)。
Using the Code
与任何开源库一样,使用 PolyLib
有两种基本方法:要么将 PolyLib.dll 作为引用添加到您的项目,并在您想要使用多项式的类开头键入...
using PolyLib;
... 或者,只需将文件 Polynomial.cs 和 Complex.cs 作为现有项目添加到您的项目中,并调整这些类的头部命名空间。
初始化多项式很简单
// init p(x) = 1 + x^2 + 2+x^3
Polynomial p = new Polynomial(1, 0, 1, 2);
现在我们计算 p
的根
Complex[] roots = p.Roots(); // compute roots of p
我们需要导数吗?
Polynomial p1 = Polynomial.Derivative(p); // p1(x) = p'(x)
输出也很直观(假设我们有一个 textbox txtOut
)
txtOut.Text = p.ToString();
关注点
我说过很简单,不是吗?多项式的结构并不复杂,这反映在这个类的简单性上。大部分工作在于 Roots()
方法中,该方法强制实现了复数。
您还可以使用 Roots()
因式分解多项式;已经实现了一个用于因式分解多项式的结构。当然,您可以再次展开因式分解的多项式,但浮点算术的固有不精确性会显现出来。因此,对于(展开的)多项式和因式分解的多项式,都可以进行求值。
我也在 CodeProject 上发布了复数类库,作为一个单独的项目(查找 CompLib
)。另一个使用 Complex.cs 的库是 CSML
,即 C# 矩阵库,我在其中尝试将 Matlab 的一些功能移植到 C# .NET(也在 CodeProject 上)。这个项目发展迅速,现在包含近一百个用于数值线性代数和矩阵操作的方法。
将来,我将尝试将 PolyLib
与 CSML
合并到一个更强大的类库中,在那里可以使用多项式矩阵进行矩阵运算。
历史
更新日期:2007 年 7 月 4 日
- 调整了构造函数(请参阅 Leppies 的评论)
2007 年 7 月 3 日更新
- 修复了 Arg() 中的重大错误(感谢 Petr Stanislav!);这影响了
Log()
、Pow()
和Sqrt()
上传日期:2007 年 7 月 3 日
- 上传了带有基本功能的
PolyLib
;目前还没有任何投诉