对矩阵的主对角线进行排序
Sorting the main diagonal of a matrix
我有一个矩阵,它的主对角线上的元素没有排序,所以我需要一个函数来 return 新矩阵,主对角线上的元素已排序。我不明白为什么这行不通。
Function[A_] := Module[{res, diagonal = {}, m, n},
{m, n} = Dimensions[A];
Table[AppendTo[diagonal, A[[i, i]]], {i, 1, m}];
dijagonal = SelectionSort[diagonal];
Table[A[[i, i]] = dijagonal[[i]], {i, 1, m}];
Return[A // MatrixForm];
];
选择排序有效。
这可以是矩阵的例子:
A={{60, 10, 68, 72, 64},{26, 70, 32, 19, 29},{94, 78, 86, 59, 17},
{77, 13, 34, 39, 0}, {31, 71, 11, 48, 83}}
当我 运行 它时,会显示:
Set::setps: {{60,10,68,72,64},{26,70,32,19,29},{94,78,86,59,17},{77,部分分配中的 13,34,39,0},{31,71,11,48,83}} 不是符号。 >>
主要问题
- 您不能定义自己的名为
Function
的函数。 (通常避免使用任何以大写字母开头的符号,以避免冲突)
- 你不能修改输入参数,所以复制一份
- 只需使用
Sort
而不是 SelectionSort
我还进行了其他一些更具风格的更改:
function[A0_] :=
Module[{res, diagonal = {}, m, n, A = A0},
{m, n} = Dimensions[A];
diagonal = Table[A[[i, i]], {i, 1, m}];
dijagonal = Sort[diagonal];
Do[A[[i, i]] = dijagonal[[i]], {i, 1, m}]; A]
function[A] // MatrixForm
请注意,您可以在线执行所有这些操作:
ReplacePart[ A,
Table[ {i, i} -> (Sort@Diagonal[A])[[i]], {i, Length@A} ]]
或
(A + DiagonalMatrix[Sort@# - # &@Diagonal[A]])
我有一个矩阵,它的主对角线上的元素没有排序,所以我需要一个函数来 return 新矩阵,主对角线上的元素已排序。我不明白为什么这行不通。
Function[A_] := Module[{res, diagonal = {}, m, n},
{m, n} = Dimensions[A];
Table[AppendTo[diagonal, A[[i, i]]], {i, 1, m}];
dijagonal = SelectionSort[diagonal];
Table[A[[i, i]] = dijagonal[[i]], {i, 1, m}];
Return[A // MatrixForm];
];
选择排序有效。
这可以是矩阵的例子:
A={{60, 10, 68, 72, 64},{26, 70, 32, 19, 29},{94, 78, 86, 59, 17},
{77, 13, 34, 39, 0}, {31, 71, 11, 48, 83}}
当我 运行 它时,会显示:
Set::setps: {{60,10,68,72,64},{26,70,32,19,29},{94,78,86,59,17},{77,部分分配中的 13,34,39,0},{31,71,11,48,83}} 不是符号。 >>
主要问题
- 您不能定义自己的名为
Function
的函数。 (通常避免使用任何以大写字母开头的符号,以避免冲突) - 你不能修改输入参数,所以复制一份
- 只需使用
Sort
而不是SelectionSort
我还进行了其他一些更具风格的更改:
function[A0_] :=
Module[{res, diagonal = {}, m, n, A = A0},
{m, n} = Dimensions[A];
diagonal = Table[A[[i, i]], {i, 1, m}];
dijagonal = Sort[diagonal];
Do[A[[i, i]] = dijagonal[[i]], {i, 1, m}]; A]
function[A] // MatrixForm
请注意,您可以在线执行所有这些操作:
ReplacePart[ A,
Table[ {i, i} -> (Sort@Diagonal[A])[[i]], {i, Length@A} ]]
或
(A + DiagonalMatrix[Sort@# - # &@Diagonal[A]])