在Swift中输入安全矩阵
工具:安全矩阵协议和类型
您可以决定事先浏览SafeMatrix.swift代码,或者直接跳到下面的“设置和使用”部分。
设置第一部分:现有矩阵实现
正如我在一开始所解释的,我们需要从现有的矩阵库开始。 我的Matrix结构示例实现 以下内容包括初始化,条目查找,可变条目,加法,乘法和标量乘法。 在此实现中,条目的类型为Double ,但它们可以为Int或任何其他类型。 此实现缺少转置,行列式,逆和许多其他标准矩阵运算。
设置第二部分:数字
在以下各节中,我们将初始化和操作SafeMatrix泛型结构的实例。 此结构具有三种关联的类型;
- MatrixType ,符合UnsafeMatrixProtocol
- 行 ,符合NumeralProtocol
- 符合NumeralProtocol的 列
您可能已经猜到了, MatrixType将成为我们的“现有” Matrix类型。
那么什么是行和列 ? 这些类型的唯一目的是提供专用SafeMatrix结构的行数和列数。 这样,除其他事项外,具有不同维度的两个矩阵始终是不同类型的。
在我们的示例中,我们假设我们有两个全局变量m和n , 并且我们的代码将具有m×n , n×m , m×m和n×n矩阵。
在实际的用例中,您可能需要从外部源(例如文件或Web服务)中加载这些值。 我不在这里考虑这些情况,但是可以通过修改设置来解决。
用法第一部分:初始化
我终于准备向您展示生成的m×n安全矩阵类型。 这只是SafeMatrix ,并且可以使用m×n Matrix进行初始化。
使用第二部分:运算符
回想一下,我们的Matrix类型支持加法,乘法和标量乘法运算符。 我们想将它们移植到SafeMatrix 。 为此,我们再次需要编辑MatrixSetup.swift :
使用第三部分:转置,逆和行列式
在本节中,我们假设Matrix类型包含transpose , inverse和determinant方法的实现。 现在,我们在Matrix.swift中添加了存根实现,但是要注意,您将需要真正的实现才能使usageMethods()函数运行。