求解具有n个变量的线性n方程的算法

时间:2013-10-13 11:59:36

标签: algorithm math matrix

在编写一个算法时,我陷入了困境。请帮我解决。

我需要解决线性方程。请参见下图。

enter image description here

我使用的是因为我不知道如何写矩阵。

请建议我算法计算所有变量的值。寻找你的回应。

2 个答案:

答案 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. 将所有方程式加在一起得到(N-2)(x + y + z)=(a + b + c)其中N是方程式数
  2. 将每个等式编写为,例如,-x + y + z = x + y + z - 2x =(a + b + c)/(N-2) - 2x = a
  3. 使用x
  4. 的值求解此等式

答案 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))