65.9K
CodeProject 正在变化。 阅读更多。
Home

用于复数多项式的 C# 类

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.76/5 (14投票s)

2007年7月3日

CPOL

2分钟阅读

viewsIcon

86616

downloadIcon

2451

一个用于复多项式的 C# 类,提供多项式算术、微分和积分功能

引言

PolyLib 是一个 C# 类库,提供基本的多项式算术,例如加法、乘法和指数运算,微分积分,计算多项式的复数因式分解以及在复数点进行求值。

背景

例如这样的多项式...

p(x) = 1 + x^2 + 2*x^3

... 应该很常见吧。有关复数的介绍,请阅读 C# 矩阵库文档的最后一章(在 CodeProject 上查找 CSML)。

Using the Code

与任何开源库一样,使用 PolyLib 有两种基本方法:要么将 PolyLib.dll 作为引用添加到您的项目,并在您想要使用多项式的类开头键入...

using PolyLib; 

... 或者,只需将文件 Polynomial.csComplex.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 上)。这个项目发展迅速,现在包含近一百个用于数值线性代数和矩阵操作的方法。

将来,我将尝试将 PolyLibCSML 合并到一个更强大的类库中,在那里可以使用多项式矩阵进行矩阵运算。

历史

更新日期:2007 年 7 月 4 日

  • 调整了构造函数(请参阅 Leppies 的评论)

2007 年 7 月 3 日更新

  • 修复了 Arg() 中的重大错误(感谢 Petr Stanislav!);这影响了 Log()Pow()Sqrt()

上传日期:2007 年 7 月 3 日

  • 上传了带有基本功能的 PolyLib;目前还没有任何投诉
© . All rights reserved.