-1

我在编写一种算法时陷入了一步。请帮我解决这个问题。

我需要求解线性方程。请看下图。

在此处输入图像描述

我使用图像是因为我不知道如何编写矩阵。

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

4

2 回答 2

4

如果您的矩阵总是与问题中给出的相同形式(即所有矩阵,除了沿对角线的 -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-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 的值
于 2013-10-13T12:16:48.070 回答
0

查看您的示例,您看起来好像正在尝试将所有 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))
于 2013-10-13T12:54:17.613 回答