(来自讲义参考)为了使高斯-塞德尔和雅可比方法收敛,有必要检查系数矩阵是否对角占优,即对角元素应该在其列中的所有元素中具有最大的值。如果它还不是对角占优,请使用旋转。对于对角占优的矩阵,应满足以下条件:(这也称为收敛)
//convergence
abs(A[i][i]) > summation(abs(A[i][j]),j=1 to n) where j != i for all i...n
//swapping rows in a matrix for partial pivoting
A:rowswap(A,source_index,destination_index)
是否有任何预定义的函数可以在maxima中使用以实现收敛,或者应该使用交换进行循环,以及应该使用什么约束?假设矩阵的大小为3x3,具有非零元素。
我已经看到了一些相关的问题,但答案在matlab中。
链接:是否有检查矩阵是否对角占优(行占优)的功能
那么,我如何在maxima中做到这一点?
以下是实现您所描述的内容的一些代码:
is_diag_dom_row (mat, i) :=
is(2*abs(mat[i][i]) - lsum(abs(x), x, mat[i]) > 0)$
is_diag_dom (mat) :=
every(lambda([i], is_diag_dom_row (mat, i)),
makelist(i,i,length(mat)))$
swapped_matrix_rows (mat, i1, i2) :=
makelist (
mat[if is(i=i1) then i2 elseif is(i=i2) then i1 else i],
i, makelist(i,i,length(mat)))$
row_swap (mat, i1, i2) := apply(matrix, swapped_matrix_rows(mat, i1, i2))$
为了便于编写,我将这两个操作分解为逻辑部分。添加一个额外的mat[i][i]副本意味着可以在列表上进行求和,这比为i求和要容易得多≠ j、 如果您想按列检查对角优势,可能最简单的方法是转置并按行检查,因为Maxima通常将矩阵视为行列表。(尽管有一个函数可以在需要时提取列)。
问题内容: 如何更改numpy中矩阵对角线的值? 我检查了Numpy Modify ndarray对角线 ,但是在numpy v 1.3.0中没有实现该功能。 假设我们有一个np.array X,我想将对角线的所有值设置为0。 问题答案: 你尝试了吗?请参阅以下答案和此讨论。或文档中的以下内容(尽管当前已损坏): http://docs.scipy.org/doc/numpy/reference/
问题内容: 我正在尝试编写一种算法,用于在给定的子矩阵中查找子矩阵。为了解决这个问题,我编写了以下代码: 这段代码可以正常工作,但是我不确定这是问题的确切解决方案还是可以解决。请提供您的专家意见。提前致谢。 问题答案: 该算法对4×4矩阵和2×2子矩阵进行了硬编码。否则,它看起来像蛮力算法。 我会这样表示: 如果您想要更有效的方法,建议您将它们压扁,如下所示: 并在此序列中搜索以下模式: 使用标准
我们将土地表示为一个二维的高度数组,并使用以下模型,基于水流下坡的想法: 如果一个细胞的八个相邻细胞都有较高的海拔,我们称这个细胞为盆地;水汇集在盆地里。 否则,水会流向海拔最低的邻近细胞。 9 9 9 8 7 7 7 8 8 7 7 7 8 8 8 7 7 7 8 8 8 9 9 9 8 8 8 7 7 7 4 4 5 5 5 5 5 5 5 6 6 7 5 5 5 8 8 8 6 尺码8 9
特殊矩阵——三对角矩阵(Tridiagonal Matrix) 注:压缩存储的矩阵可以分为特殊矩阵和稀疏矩阵。对于那些具有相同元素或零元素在矩阵中分布具有一定规律的矩阵,被称之为特殊矩阵。对于那些零元素数据远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称之为稀疏矩阵。 1. 三对角矩阵的概念 三对角矩阵就是对角线、邻近对角线的上下次对角线上有元素,其他位置均为0的矩阵。 三对角矩阵是一种特
我想用极大值生成一个包含随机项的矩阵,这样矩阵的行列式就不会为零,然后进一步在Moodle的堆栈中实现这一点。我对Maxima(或任何与此相关的CA)的工作都是全新的,因此我一直在浏览我在网上找到的各种示例,到目前为止,我成功地做到了这一点: 生成具有0或1的2x2随机矩阵(出于简单性原因)并计算其行列式: 对于下一步,我想定义一个矩阵M2,如下所示: 如果矩阵M1的行列式已经不是零,好吧,我会同
这得到了我想要的,但可能没有很好地扩展? 产量