循环以迭代方式到达i=j的rowsumes=colsums

2024-09-24 02:26:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我很抱歉,我的问题将是冗长的,因为我只是在不知所措,甚至开始编码这个。伪代码的答案是非常感谢,如果只是让我了解如何解决这个问题(然后我可以写一些实际的代码,并回来寻求帮助,如果必要的)。你知道吗

我的问题不在于代码,而在于理解我需要的逻辑(这可以说是编程中比较困难的部分)。你知道吗

对我的问题的一个非正式解释是,我想改变一个矩阵a(恰好是稀疏的),使得行和等于列和。我可以通过在矩阵中加一个来实现这一点,因为S是一个尺度矩阵。你知道吗

形式上,我想找到一个S矩阵,使得(A+AS)ONESn=T和(T(A)+T(A)S)ONESn=T,其中ONESn是生成T的向量,行和向量。你知道吗

向量T是一成不变的,它是当前列和,是行和的目标。你知道吗

我想我要解决这个问题的方法是,对于每一行I和列j,其中I=j,我要找到行和,并计算它离目标有多远。然后我想更改该行的每个元素,使行和等于目标(或者至少是“足够接近”,在这里我可以设置“足够接近”)。你知道吗

但是,这取决于一个条件,即列j的和也必须等于目标。你知道吗

如何设计逻辑,以便从列1和行1开始,计算出行1中的值,然后计算出列1的值,前提是列1的第一个条目被前面的过程“固定”。你知道吗

接下来,第2行的第一个值应该由上面的公式“固定”,同样地,程序现在需要计算出第2列的前两个条目的固定值。你知道吗

以此类推,直到到达最后一列和最后一行

我曾尝试过编写一个梯度下降程序,但一直坚持如何使列的梯度下降依赖于行的梯度下降。你知道吗

我也手工计算了这个问题(对于2x2矩阵),我可以找到答案,但我不知道我是如何做到的,这就是为什么我很难编写它的原因。你知道吗

假设A是[1,2,3,4]的2x2矩阵。行和为[4,6]。列和为[3,7]。你知道吗

1 3  | 4 
2 4  | 6
___
3 7

如果我加上矩阵S=[1,0,-1,0]

1 -1
0  0

我得到A+S=[2,2,2,4],它有行和[4,6]。你知道吗

2 2  | 4 
2 4  | 6
___
4 6

预期结果是一个矩阵(a+AS),使得行和等于列和。你知道吗

或者错误消息“不收敛”


Tags: 答案代码程序目标编码as编程矩阵
1条回答
网友
1楼 · 发布于 2024-09-24 02:26:08

你有一些矩阵A,你需要加上另一个矩阵S,这样得到的矩阵M的行和列和是一样的。这意味着:

A+S=M#对于M行和=列和

所以你需要做的是找到S,你可以简单地把等式改为

S=M-S

现在你可以为M设置任何行和列和相同的矩阵,得到S,一旦得到S,你就可以这样做

A+S=M

这意味着您可以向每个矩阵中添加另一个矩阵S,这样得到的矩阵M的行和=列和。因此,你不会得到“矩阵不收敛”的消息。你知道吗

这是R码

A <- matrix(rnorm(4), ncol= 2)
M <- matrix(c(2,2,2,4), ncol= 2)
S <- M - A
rowSums(A+S) == colSums(A+S)
TRUE TRUE

或者更一般地说:

row_col_num <- 5 # number of columns and rows
A <- matrix(rnorm(row_col_num *row_col_num ), ncol= row_col_num )
M <- matrix(rep(1, row_col_num *row_col_num ), ncol= row_col_num )
S <- M - A
rowSums(A+S) == colSums(A+S)
TRUE TRUE TRUE TRUE TRUE

得到的矩阵A+S总是和你设定的M一样,所以我不确定这是用来做什么的。如果你需要知道如何找到S,其中A+S给你一个矩阵M,行和=列和,这就是你可以做的。你知道吗

相关问题 更多 >