我在编写一种算法时陷入了一步。请帮我解决这个问题。
我需要求解线性方程。请看下图。
我使用图像是因为我不知道如何编写矩阵。
请建议我计算所有变量值的算法。寻找您的善意回应。
如果您的矩阵总是与问题中给出的相同形式(即所有矩阵,除了沿对角线的 -1),那么您可以在 O(n) 时间内求解它,其中 n 是方程的数量。
令 N 为方程的数量。
然后解决方案由下式给出:
t = (a+b+c)/(N-2)
x = (t-a)*0.5
y = (t-b)*0.5
z = (t-c)*0.5
Python代码:
# Set up equations
a=4
b=5
c=6
A = a,b,c
# Compute inverse
t = sum(A)/(len(A)-2.)
B = [(t-x)*0.5 for x in A]
# Check
x,y,z = B
print -x+y+z
print x-y+z
print x+y-z
我通过以下公式得出这个公式:
查看您的示例,您看起来好像正在尝试将所有 1 的 n 矩阵反转,除了在对角线上您有-1。我们称这个矩阵为 D_n。
鉴于这种对称性,逆将是相似的:所有 a,除了在对角线上,你将有 b(要找到 a 和 b)。
将 D_n 与逆相乘给出了两个需要满足的方程(对应于对角线上和对角线外的乘积项)。
-b + (n-1) * a = 1
b + (n-3) * a = 0
求解给了我们:
a = 1/(2n - 4)
b = (3-n)/(2n - 4)
例如,当 n=3 时,您有 a=1/2,b=0,因此逆向 inv(D_3) 为
0 0.5 0.5
0.5 0 0.5
0.5 0.5 0
或者当 n=4 时,你有 a=1/4,b=-1/4,所以倒数 inv(D_4) 是
-0.2500 0.2500 0.2500 0.2500
0.2500 -0.2500 0.2500 0.2500
0.2500 0.2500 -0.2500 0.2500
0.2500 0.2500 0.2500 -0.2500
现在,您正试图找到 x_1, x_2, ..., x_n(称为此向量 x),使得 D_n * x = (a_1, a_2, ..., a_n)。
鉴于我们已经弄清楚如何计算 inv(D_n),解决方案是:
x_j = (3 - n)a_j / (2n - 4) + sum(i=1..n, i != j) (a_n / (2n - 4))