使用C#解决偏微分方程问题

5

我正在开发一个项目(C# 和 .NET Framework),需要解决一些偏微分方程。是否有基于 .NET Framework 的特定库可以让我更轻松地完成工作?

我曾经使用过MATLAB,那里解决偏微分方程非常简单。我该如何解决这个问题?

4个回答

7

取决于您要解决哪些PDE以及您想如何解决它们。

我所知道的每种方法都需要线性代数。您需要为.NET找到一个好的矩阵包,最好的矩阵包可以有效地处理稀疏矩阵。

线性椭圆(稳态扩散),抛物线(瞬态扩散)和双曲线(F = MA动态)PDE需要稍微不同的方法。

这三个PDE都可以使用经典有限差分,有限元(加权残差)或边界元(Green函数)来创建您想要解决的系统矩阵。一般非线性PDE可能最好使用有限元/加权残差技术进行攻击。

但是,一旦将拋物线和双曲线PDE离散化,它们就会变成耦合的ODE集。您必须进行瞬态积分,以重复解决时间演变。拋物线ODE在时间上是一阶的;双曲线ODE在时间上是二阶的。

我正在学习CUDA和NVIDIA。您可能需要查找语言的CUDA绑定。

所有这些都是大主题。请使用Google搜索一些来源,因为在此处无法提供更多的概述。

更新:最近我了解到Microsoft Solver Foundation。虽然我自己还没有研究过它,但或许对于使用C#的开发者解决这个问题会有所帮助。


到目前为止,这是唯一一个展示了解决偏微分方程数值方法的具体理解的答案。正如duffymo所提到的,大多数方法涉及将PDE离散化以形成矩阵方程,然后可以使用数值线性代数库进行求解。Math.NET Numerics似乎为C#中的密集矩阵提供了数值线性代数例程,并且稀疏矩阵支持正在进行中:http://nmath.sourceforge.net/doc/numerics/MathNet.Numerics.html - las3rjock
非常棒的链接,绝对值得一看。 - Alexandre C.

3

另一个建议是AlgLib。我喜欢这个库,因为与综合性的库不同,你不需要寻找所需的内容,AlgLib已将所有算法分开,并且通常提供多种语言(包括大多数/所有情况下的C#)。关于微积分,AlgLib涵盖了以下内容:

        Euler's method
        Runge-Kutta method
        Runge-Kutta method for a system of ODEs
        Bulirsch-Stoer method for a system of ODEs

需要注意的是,然而在AlgLib检查这些算法时,我注意到它们不再得到支持(来自AlgLib),因为它们的许可证可能与AlgLib的许可证不兼容(我相信AlgLib的许可证是GPL)。


3
OP想要解决PDE问题,但似乎AlgLib只能解决ODE问题。 - jason
哎呀,那应该得到一个-1。我的错,我错过了OP中的“partial”!+1给你的评论,谢谢! - mjv

2

请查看http://www.mathdotnet.com/About.aspx,它可能有你需要的内容。然而,我怀疑你应该根据你的应用需求选择最好的库,然后将其与你的 .net 应用程序进行接口。

你可能会发现,在这样的事情中(除非你使用它来学习语言或数学),有许多预先制作的库可供使用。


2

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