2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Кто знает как MATLAB решает переопределённые СЛАУ?
Сообщение04.01.2012, 13:06 


04/01/12
1
Привет всем.
Есть проблема которая представляет собой переопределённую СЛАУ
дальше код

load Pw.txt; Pw
load Pi.txt; Pi

% Pw = [ 0.0 11.0 8.25 2.75 5.5 5.0 0.0 11.0 2.0 2.0 9.0 8.25 2.75;
% 0.0 0.0 0.0 0.0 0.0 6.0 0.0 0.0 0.0 6.0 0.0 0.0 0.0;
% 0.0 0.0 -4.5 -4.5 -3.5 -3.5 -0.75 -0.75 0.0 0.0 0.0 -1.81 -1.81 ]
% Pi = [ 95.0 592.0 472.0 232.0 350.0 362.0 97.0 592.0 184.0 263.0 501.0 467.0 224.0 ;
% 336.0 368.0 168.0 155.0 205.0 323.0 305.0 336.0 344.0 431.0 363.0 279.0 266.0 ]


m = 20
Q(1:4, 1) = [0; 0; 0; 1];
Q(1:4, 2) = [m; 0; 0; 1];
Q(1:4, 3) = [0; m; 0; 1];
Q(1:4, 4) = [m; m; 0; 1];
Q(1:4, 5) = [0; 0; m; 1];
Q(1:4, 6) = [m; 0; m; 1];
Q(1:4, 7) = [0; m; m; 1];
Q(1:4, 8) = [m; m; m; 1];


for i = 1:size(Pi, 2)
B(2*i - 1:2*i, 1) = Pi(1:2, i);
end

A1 = A_mat(Pw, Pi)

% 1 ) Вариант
% A1t = A1'
% AA1 = A1' * A1
% AB1 = A1' * B
% x1 = AA1 \ AB1

% 2 ) Вариант
x1 = A1 \ B

C(1:3, 1:4) = 0;

for i = 1:3
for j = 1:4
nn = (i - 1) * 4 + j;
if nn < 12
C(i, j) = x1(nn);
else
C(i, j) = 1;
end
end
end

C

Pw(4, 1:size(Pw, 2)) = 1

R = C * Pw

for i = 1:size(R, 2)
R1(1:2, i) = [(R(1, i)/ R(3, i)) ;(R(2, i) / R(3, i))];
end

%save out.txt R1 -ascii

for i = 1:size(R1, 2)
plot(R1(1, i), R1(2, i), 'o'), hold on, grid on
end

C

%R2 = B - A1*x1

Q2 = C * Q
for i = 1:size(Q2, 2)
Q3(1, i) = Q2(1, i) / Q2(3, i);
Q3(2, i) = Q2(2, i) / Q2(3, i);
end

%for i = 1:4
% plot(Q3(1, 1), Q3(2, 1), 'ob' ), grid on, hold on
% plot(Q3(1, 2), Q3(2, 2), 'og' ), grid on % green x
% plot(Q3(1, 3), Q3(2, 3), 'or' ), grid on % red y
% plot(Q3(1, 4), Q3(2, 4), 'ob' ), grid on % blue z
% axis([0 640 0 480])
%end
for i = 1:size(Q3, 2)
plot(Q3(1, i), Q3(2, i), '+'), grid on, hold on
end

там выделены 2 участка
1) это решение методом наименьших квадратов
2) это решение МАТЛАБА
так вот матлаб может решить эту систему, а МНК почему то нет((
если что не понятно пишите я ещё обьясню.

 Профиль  
                  
 
 Re: Кто знает как MATLAB решает переопределённые СЛАУ?
Сообщение07.01.2012, 13:54 
Заслуженный участник


11/05/08
32166
Ingener74 в сообщении #522848 писал(а):
Кто знает как MATLAB решает переопределённые СЛАУ?

Подайте команду help mldivide -- там всё написано.

Выражение типа A\B по-разному интерпретируется для квадратных и для неквадратных систем. Если система переопределена или недоопределена (неважно), то Матлаб пытается решать её именно методом наименьших квадратов, т.е. ищет именно псевдорешение. Но при этом (видимо, имея в виду, что система в любом случае в каком-то смысле, да некорректна) пытается сделать максимум возможного. Он решает систему A'A*X=A'B с помощью QR-разложения, и если видит, что матрица этой системы оказалась (с его точки зрения) вырожденной, т.е. что в системе оказались нулевые строчки, то просто зануляет свободные переменные, а оставшуюся часть системы дорешивает честно. В результате получается нечто удобоваримое -- если, конечно, матрица хорошо обусловлена в том смысле, что её нулевые (в пределах машинной точности) сингулярные числа существенно отделены от ненулевых, которые, в свою очередь, не сильно различаются по порядку.

Но вот квадратные системы она пытается решать тупо методом Гаусса. И если матрица вырождена, то получается, естественно, чёрт-те что.

Так вот: у Вас, судя по всему, матрица переопределённой системы оказалась именно неполного ранга (т.е. её столбцы -- линейно зависимыми; возможно -- просто одинаковыми или нулевыми по какой-либо рассеянности). И когда Вы просите Матлаб сосчитать A\B, тот охотно соглашается (но обязательно должен выдать при этом предупреждение о неполноте ранга). Но когда выписываете МНК самостоятельно в явном виде, подавая команду типа (A'A)\(A'B) -- то это уже решение квадратной системы, и ничего хорошего уже не получится.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group