MATLAB求解方程问题

时间:2009-11-13 11:22:15

标签: matlab equations

我想使用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。 正如我所说,我确信有一个解决方案。任何人都可以帮忙吗?

5 个答案:

答案 0 :(得分: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

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

>> null(A-eye(3))

ans =

   0.67859834454585
  -0.67859834454585
   0.28108463771482

所以,你有一个onedimensional nullspace。否则你会看到多个专栏。列的每个线性组合都是此零空间中的一个点,A-I映射到空向量。因此,此向量的每个倍数都是您问题的解决方案。

实际上,你的矩阵A是第一种旋转矩阵,因为det(A)= 1而A'* A =同一性。因此它的特征值为1,旋转轴为相应的特征向量。我在上面计算的向量是标准化的旋转轴。

注意:为此我用0.7071替换了sqrt(0.5)。如果舍入错误是一个问题,但你事先知道必须有一个非平凡的解决方案,最好的办法是对A-I进行奇异值分解并选择最右边的奇异向量:

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

ans =

   0.67859834454585
  -0.67859834454585
   0.28108463771482

这样,您可以计算最小化| A * v-v |的向量v在| v | = 1的约束下,其中|。|是欧几里德规范。

答案 1 :(得分: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: Solution of Linear Systems of Equations

MATLAB的核心是解决这种方程式。


使用FreeMat(类似于开源MATLAB的环境) GPL许可; Windows安装程序direct download 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。

答案 2 :(得分:0)

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

答案 3 :(得分:-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

答案 4 :(得分:-1)

朋友对Ax = B使用MATLAB命令rref(A)....它将给出一个上三角矩阵。那么你可以很容易地计算出非平凡的解决方案......但请记住,如果rref(A)= I(如你的情况那样)那么不存在非平凡的解决方案。 最好的运气