MATLAB求解方程问题

Han*_*ani 1 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
Run Code Online (Sandbox Code Playgroud)

我在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');
Run Code Online (Sandbox Code Playgroud)

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

sel*_*tze 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
Run Code Online (Sandbox Code Playgroud)

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

>> null(A-eye(3))

ans =

   0.67859834454585
  -0.67859834454585
   0.28108463771482
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

ans =

   0.67859834454585
  -0.67859834454585
   0.28108463771482
Run Code Online (Sandbox Code Playgroud)

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