1

我想用MATLAB解这些方程,我确信有一个非零解。方程是:

0.7071*x            + 0.7071*z = x 
  -0.5*x + 0.7071*y +    0.5*z = y
  -0.5*x - 0.7071*y +    0.5*z = z

我在 MATLAB 中写道:

[x,y,z]=solve('0.7071 * x+0.7071 * z=x','-0.5 * x+0.7071 * y+0.5 * z=y','-0.5 * x-0.7071 * y+0.5 * z=z');

但结果是 x = y = z = 0。正如我所说,我确信有一个解决方案。任何人都可以帮忙吗?

4

5 回答 5

5

您正在寻找一个非平凡的解决方案 v 到 A*v=v 与 v=[x;y;z] 和...

A =
   0.70710678118655                  0   0.70710678118655
  -0.50000000000000   0.70710678118655   0.50000000000000
  -0.50000000000000  -0.70710678118655   0.50000000000000

您可以将其转换为 (AI)v=0,其中 I 是 3x3 单位矩阵。要找到一个重要的解决方案,您必须做的是检查 AI 的零空间:

>> null(A-eye(3))

ans =

   0.67859834454585
  -0.67859834454585
   0.28108463771482

所以,你有一个一维零空间。否则你会看到不止一列。列的每个线性组合都是这个零空间中的一个点,AI 映射到零向量。所以,这个向量的每一个倍数都是你问题的解决方案。

实际上,您的矩阵 A 是第一类旋转矩阵,因为 det(A)=1 和 A'*A=identity. 所以它的特征值为1,旋转轴作为对应的特征向量。我上面计算的向量是归一化的旋转轴。

注意:为此,我将您的 0.7071 替换为 sqrt(0.5)。如果舍入误差是一个问题,但您事先知道必须有一个重要的解决方案,最好的办法是对 AI 进行奇异值分解并选择最右边的奇异向量:

>> [u,s,v] = svd(A-eye(3));
>> v(:,end)

ans =

   0.67859834454585
  -0.67859834454585
   0.28108463771482

这样你就可以计算出一个向量 v 来最小化 |A*vv| 在|v|=1 的约束下|.| 是欧几里得范数。

于 2009-11-13T16:59:36.857 回答
4

我认为您不需要使用该solve函数,因为您的方程是线性方程组。

重铸为矩阵方程:

Ax = B

在你的情况下:

    | -0.2929   0.0      0.7071  |  | x |     | 0 |
    | -0.5     -0.2929   0.5     |  | y |  =  | 0 |
    | -0.5     -0.7071  -0.5     |  | z |     | 0 |

使用MATLAB的内置函数来解决它。参见例如MATLAB:求解线性方程组

MATLAB的核心就是求解这类方程。


使用FreeMat(具有 GPL 许可证的类似 MATLAB 的开源环境;Windows 安装程序的直接下载 URL ):

   A = [ -0.2929 0.0 0.7071; -0.5 -0.2929 0.5; -0.5 -0.7071 -0.5 ]

   B = [0.0; 0.0; 0.0]

   A\B

   ans =
    0
    0
    0

所以解是:x = 0, y = 0, z = 0


解决方案也可以手动得出。从最后两个方程开始:

    -0.5*x + 0.7071*y +    0.5*z = y
    -0.5*x - 0.7071*y +    0.5*z = z

    0.2929*y =  -0.5*x + 0.5*z
    0.7071*y =  -0.5*x + 0.5*z

    0.2929*y = 0.7071*y

因此 y = 0.0 并且:

    0.7071*y =  -0.5*x + 0.5*z

    0 =  -0.5*x + 0.5*z

    0 =  -0.5*x + 0.5*z

    0.5*x = 0.5*z

    x = z

插入第一个等式:

    0.7071*x + 0.7071*z = x 

    0.7071*x + 0.7071*x = x 

    1.4142*x = x 

因此 x = 0.0。由于 x = z,则 z = 0.0。

于 2009-11-13T11:43:10.900 回答
0

x = 0, y = 0, z = 0 是正确的解。这个问题可以很容易地手工解决。

于 2009-11-13T12:58:51.793 回答
-1
A = [ 0.7071 0 0.7071 ;
      -0.5 0.7071 0.5 ;
    -0.5 -0.7071 0.5 ];
B = [1 ; 1 ; 1];

AA = A-diag(B)

      -0.2929            0       0.7071
         -0.5      -0.2929          0.5
         -0.5      -0.7071         -0.5

BB = B-B

     0
     0
     0

AA\BB

     0
     0
     0
于 2009-11-13T13:11:24.280 回答
-1

朋友使用MATLAB命令rref(A) for Ax=B....会给出一个上三角矩阵。然后你可以轻松计算非平凡的解决方案......但请记住,如果 rref(A)=I (如你的情况)那么非平凡的解决方案不存在。祝你好运

于 2013-11-23T08:07:02.007 回答