-1

例如A=[3,2,4;2,0,2;4,2,3],我有一个 3x3 矩阵,我正在尝试以下列形式求解以下线性系统A*[a;b;c] = [8*a;8*b;8*c]

3 2 4   a   8a
2 0 2 * b = 8b
4 2 3   c   8c

好的,所以我有:

3a + 2b + 4c = 8a
2a +      2c = 8b
4a + 2b + 3c = 8c

不确定,答案是[2;1;2]事实上,如果我使用像这样的在线线性求解器,它会给我这样的答案:

{ a = r1, b = r1/2, c = r1 }

尽管如此,我还是找不到在 Matlab 中做到这一点的方法。如果我将 B 定义为B=[8*a;8*b;8*c]并尝试A\B,我得到:

 2*b - 4*a + 4*c
 2*a - 7*b + 2*c
 4*a + 2*b - 4*c

如果我将 B 定义为 [8;8;8],我得到:

2
-3
2

虽然我期望:

2
1
2

或者类似于上面在线求解器表格的答案。我究竟做错了什么?提前致谢!

4

1 回答 1

1

哦,好吧,即使这不是编程问题,我也会回答它。

问题是求解线性系统

Ax = 8x

其中给出了 3x3 矩阵 A,x 是一个 3x1 未知向量。

A = [3 2 4;2 0 2;4 2 3];
[v,d] = eig(A)
v =
   -0.4941   -0.5580    0.6667
   -0.4720    0.8161    0.3333
    0.7301    0.1500    0.6667

d =
   -1.0000         0         0
         0   -1.0000         0
         0         0    8.0000

在这里我们看到第三个特征值是 8,所以这个问题确实有一个非退化的解决方案。它的形式

k*v(:,3)

因为 v(:,3) 是相应的特征向量。

format rat
v(:,3)
ans =

       2/3     
       1/3     
       2/3     

显然,这导致了提问者给出的解决方案。

我会注意到,这一切都只是因为问题是以 A*x=lambda*x 的形式提出的,所以是一个经典的特征值问题。同样,如果您欣赏解决方案背后的数学原理,那么我们可以使用 null 来解决问题:

null(A - 8*eye(3))
ans =
       2/3     
       1/3     
       2/3     

当然,我们可以使用符号工具箱。

sol = solve('3*a + 2*b + 4*c = 8*a','2*a + 2*c = 8*b','4*a + 2*b + 3*c = 8*c');

sol.a
ans =
z

sol.b
ans =
z/2

sol.c
ans =
z

假设这个问题是一个完全普遍的问题?因此,仍然是一个齐次线性系统,但不是一个明显的特征值问题?例如,我将尝试解决任意线性问题

A*[a;b;c] = [a;2*b;3*c]

请注意,这不是以特征值问题的形式编写的。实际上有几种方法我们可能会决定解决它。未知数在等式的两边。因此,只需将它们全部移到左侧即可。半数学上,我们可以这样做

B = A - diag([1 2 3])
B =
       2              2              4       
       2             -2              2       
       4              2              0       

我们现在尝试求解线性系统

Bx = B*[a;b;c] = [0;0;0]

是否存在解决方案?这一次,它们不存在,超出了微不足道的简并解,因为 B 具有满秩。

rank(B)
ans =
       3       

满秩齐次线性系统只有简并(零)解。Null 也告诉我们这一点。

null(B)
ans =
   Empty matrix: 3-by-0

符号工具箱解决方案反映了这一事实。

sol = solve('3*a + 2*b + 4*c = a','2*a + 2*c = 2*b','4*a + 2*b + 3*c = 3*c')

sol.a
ans =
0

sol.b
ans =
0

sol.c
ans =
0

在您了解所涉及的线性系统的数学之前,这真的不是一个编程问题,然后它本质上是一个解决问题的命令,所以仍然不是一个真正的编程问题。

于 2013-07-16T01:29:53.510 回答