Domanda

Voglio risolvere queste equazioni utilizzando MATLAB e Sono sicuro c'è una soluzione non zero. Le equazioni sono:

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

ho scritto in 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');

Ma il risultato è x = y = z = 0. Come ho già detto io sono sicuro che ci sia una soluzione. Può aiutare uno qualsiasi?

È stato utile?

Soluzione

Siete alla ricerca di una soluzione non banale v per A * v = v con v = [x, y, z] e ...

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

È possibile trasformare questo in (A-I) v = 0 dove I è la matrice 3x3 identità. Quello che devi fare per trovare una soluzione non banale è controllare la spazio nullo di A-I:

>> null(A-eye(3))

ans =

   0.67859834454585
  -0.67859834454585
   0.28108463771482

Quindi, avete uno spazio nullo monodimensionale. In caso contrario, si vedrebbe più di una colonna. Ogni combinazione lineare delle colonne è un punto in questo spazio nullo che A-I si associa al vettore nullo. Così, ogni multiplo di questo vettore è una soluzione al vostro problema.

In realtà, la vostra matrice A è una matrice di rotazione del primo tipo, perché det (A) = 1 e A '* A = identità. Così ha un autovalore di 1 con l'asse di rotazione corrispondente autovettore. Il vettore che Computerizzata sopra è l'asse di rotazione normalizzato.

Nota: Per questo ho sostituito il vostro 0,7071 con sqrt (0,5). Se gli errori di arrotondamento sono una preoccupazione ma si sa in anticipo che ci deve essere una soluzione non banale la cosa migliore è fare un valore di decomposizione singolare A-I e scegliere il giusto più a destra singolare vettore:

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

ans =

   0.67859834454585
  -0.67859834454585
   0.28108463771482

In questo modo è possibile calcolare un vettore v che minimizza | A * v-v | sotto il vincolo che | v | = 1 dove |. | è la norma euclidea.

Altri suggerimenti

Non credo che è necessario utilizzare la funzione solve come le vostre equazioni è un sistema di equazioni lineari.

Rifusione come equazione matriciale:

Ax = B

Nel tuo caso:

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

Utilizzare il built-in di vista funzionale di MATLAB per risolverlo. Vedi per esempio MATLAB: Soluzione di sistemi di equazioni lineari .

Il nucleo di MATLAB è quello di risolvere questo tipo di equazione.


FreeMat (un open-source ambiente MATLAB-like con una licenza GPL; download diretto URL per Windows installer):

   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

Quindi la soluzione è: x = 0, y = 0, z = 0


La soluzione può anche essere derivata a mano. A partire dalle ultime due equazioni:

    -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

Così y = 0,0 e:

    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

Inserimento nella prima equazione:

    0.7071*x + 0.7071*z = x 

    0.7071*x + 0.7071*x = x 

    1.4142*x = x 

Quindi x = 0.0. E come x = z, allora z = 0.0.

x = 0, y = 0, z = 0 è la soluzione corretta. Questo problema può essere facilmente lavorato a mano.

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

Amici utilizzano MATLAB comando rref (A) per Ax = B .... Vi darà una matrice triangolare superiore. Quindi u può calcolare soluzioni non banali facilmente ... Ma tenga presente che se rref (A) = I (come nel tuo caso), allora non esistono soluzioni non banali. Buona fortuna

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top