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=[x;y;z]と...でA*v=vへの自明でない解決策vを探しています。

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

つまり、1次元の零空間があります。そうしないと、複数の列が表示されます。列のすべての線形結合は、AIがヌルベクトルにマップするこのヌル空間内のポイントです。したがって、このベクトルのすべての倍数が問題の解決策になります。

実際、det(A)=1およびA'* A = Identityであるため、行列Aは第1種の回転行列です。したがって、固有値は1で、回転軸が対応する固有ベクトルになります。上で計算したベクトルは、正規化された回転軸です。

注:このために、0.7071をsqrt(0.5)に置き換えました。丸め誤差が懸念されるが、自明でない解決策が必要であることを事前に知っている場合、最善の策は、AIの特異値分解を実行し、右端の特異ベクトルを選択することです。

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

ans =

   0.67859834454585
  -0.67859834454585
   0.28108463771482

このようにして、| A *vv|を最小化するベクトルvを計算できます。| 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


解決策は手作業で導き出すこともできます。最後の2つの方程式から始めます。

    -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

友人は、Ax = B ...に対してMATLABコマンドrref(A)を使用します。これにより、上三角行列が得られます。そうすれば、uは自明でない解を簡単に計算できます...しかし、rref(A)= I(あなたの場合のように)の場合、自明でない解は存在しないことに注意してください。最高の幸運

于 2013-11-23T08:07:02.007 に答える