如何设计:矩阵的线性代数例程

How to design :: Linear Algebra Routines for a matrix

本文关键字:线性代数 例程      更新时间:2023-10-16

在C++中,出于教育目的,我正在构建一个线性代数包。我的问题是如何为用户设计一个好的界面。

我有一个矩阵类,可以创建为

matrix<int> A (3,3)

这个类处理存储在矩阵中的数据,如何遍历它们,获取特定元素,打印矩阵等

我有另一门课线性代数,它对矩阵进行数学计算。所以它会像这个一样工作

LA<int> B ;
// I have a method in LA , which gives the determinant. 
matrix<int> C = B.determinant(A);
// Just doesn't look good to me, I want to be able to do this 
matrix<int> C = determinant(A); // This seems more natural 
// Is there any way to eliminate the need to create an LA object ?

一种方法是在A中定义行列式并调用A.determent()。但这并不能给我模块化。

那么我该怎么做呢?

另外

  • 你知道减少用户必须键入matrix<int>。我可以用一个typedef吗
  • 如果你使用这个类,你会更喜欢determent()还是一些简短形式的行列式。使用缩写形式意味着更少的键入,但这也会使代码不那么容易理解。我该如何进行此交易。

  • 我打算看看像bltiz这样的其他线性代数类是如何做到这一点的。但我担心这对我来说太高了,无法理解他们使用的技术。你能给我一些建议吗(书籍、网站等),让我了解设计模式,以及如何在不崩溃的情况下编写大量代码。

  • 谢谢

您可以有一个实用程序名称空间:

namespace UTILITY {
// define determinant here
}

然后您可以在本地使用:

typedef UTILITY::determinant determinant; 

然后使用:

determinant(A);