MATLAB Решение проблемы уравнений - PullRequest
1 голос
/ 13 ноября 2009

Я хочу решить эти уравнения, используя 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 ]

5 голосов
/ 13 ноября 2009

Вы ищете нетривиальное решение 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

Итак, у вас одномерное пространство. В противном случае вы увидите более одного столбца. Каждая линейная комбинация столбцов - это точка в этом нулевом пространстве, которую 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

Таким образом, вы можете вычислить вектор v, который минимизирует | A * v-v | при условии, что | v | = 1, где |. | это евклидова норма.

4 голосов
/ 13 ноября 2009

Не думаю, что вам нужно использовать функцию solve, поскольку ваши уравнения - это система линейных уравнений.

Recast как матричное уравнение:

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 (среда с открытым исходным кодом, похожая на MATLAB с лицензия GPL; URL-адрес прямой загрузки для установщика Windows):

   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

Таким образом, у = 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 

Таким образом, х = 0,0. А так как x = z, то z = 0.0.

0 голосов
/ 23 ноября 2013

Друзья используют команду MATLAB rref (A) для Ax = B .... Это даст верхнюю треугольную матрицу. Тогда вы можете легко вычислить нетривиальные решения ... Но имейте в виду, что если rref (A) = I (как в вашем случае), то нетривиальных решений не существует. ЛУЧШИЙ УДАЧИ

0 голосов
/ 13 ноября 2009
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
0 голосов
/ 13 ноября 2009

x = 0, y = 0, z = 0 - правильное решение. Эту проблему легко решить вручную.

...