2014-11-26 3 views
0

Я дал nxn верхнюю треугольную матрицу R, и я хочу, чтобы решить систему уравнений Rx=0 где x является вектором размера n. Более того, самый низкий диагональ R составляет 0 (R(n,n)=0). Поэтому я хочу установить x(n)=1.Решить систему уравнений с ограничением х в Matlab

Я пробовал несколько циклов, но я не знаю, как его решить.

Благодарим за помощь.

ответ

2

Гарантируется, что R имеет нулевое собственное значение, а требуемое решение кратно собственному вектору, соответствующему этому собственному значению. Давайте создадим некоторую матрицу R первого:

>> R = triu(rand(3, 3)); 
>> R(3, 3) = 0; 
>> R 

R = 

    0.8147 0.9134 0.2785 
     0 0.6324 0.5469 
     0   0   0 

Теперь давайте собственные значения и собственные векторы:

>> [V, E] = eig(R) 

V = 

    1.0000 -0.9806 0.4289 
     0 0.1958 -0.5909 
     0   0 0.6833 


E = 

    0.8147   0   0 
     0 0.6324   0 
     0   0   0 

собственные векторы диагональные элементы Е

>> E = diag(E); 
>> index = find(abs(E) < 1e-16); %// NB don't use find(E==0) because of fp problems... 

Теперь вытащить правильный собственный вектор

>> v = V(:, index); 

и убедитесь, что его последний элемент равен 1

>> v = v/v(end) 

v = 

    0.6277 
    -0.8648 
    1.0000 

Вы можете проверить, что это решение, которое вы хотите

>> R * v 

ans = 

    0 
    0 
    0 
+0

Я попробовал ваш пример с triu (рандов (6,6)) и определил последние 3 диагональных элемента на 0 (R (4,4) = 0, R (5,5) = 0. R (6,6) = 0), и ваше решение не работает там. – fYpsE

+0

Это потому, что вы спросили меня о решении, где последняя диагональная запись R (6,6) равна нулю. Нет причин, по которым он также должен работать, когда имеется более одной нулевой диагональной записи. –