在编写一个算法时,我陷入了困境。请帮我解决。
我需要解决线性方程。请参见下图。
我使用的是因为我不知道如何写矩阵。
请建议我算法计算所有变量的值。寻找你的回应。
答案 0 :(得分:4)
如果你的矩阵总是与问题中给出的形式相同(即除了沿对角线的-1之外的所有矩阵),那么你可以在时间O(n)求解它,其中n是方程的数量。 / p>
设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 :(得分:0)
看看你的例子,你看起来像是在尝试将所有1的n乘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时,你有一个= 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))