मैं MATLAB में एक क्यूआर अपघटन एल्गोरिदम कोडिंग कर रहा हूं, यह सुनिश्चित करने के लिए कि मेरे पास यांत्रिकी सही है।गिवर रोटेशन का उपयोग कर क्यूआर अपघटन एल्गोरिदम
function [Q,R] = QRgivens(A)
n = length(A(:,1));
Q = eye(n);
R = A;
for j = 1:(n-1)
for i = n:(-1):(j+1)
G = eye(n);
[c,s] = GivensRotation(A(i-1,j),A(i,j));
G(i-1,(i-1):i) = [c s];
G(i,(i-1):i) = [-s c];
Q = Q*G';
R = G*R;
end
end
end
उप समारोह GivensRotation नीचे दिया गया है: यहाँ मुख्य कार्य के लिए कोड है
function [c,s] = GivensRotation(a,b)
if b == 0
c = 1;
s = 0;
else
if abs(b) > abs(a)
r = -a/b;
s = 1/sqrt(1 + r^2);
c = s*r;
else
r = -b/a;
c = 1/sqrt(1 + r^2);
s = c*r;
end
end
end
मैं शोध किया है और मैं बहुत यकीन है कि यह सबसे सरल उपाय है कर रहा हूँ विशेष रूप से MATLAB में, इस अपघटन को लागू करने के लिए। लेकिन जब मैं इसे मैट्रिक्स ए पर परीक्षण करता हूं, तो आर उत्पादित त्रिकोणीय नहीं है जैसा कि होना चाहिए। क्यू ऑर्थोगोनल है, और क्यू * आर = ए, इसलिए एल्गोरिदम कुछ चीजें सही कर रहा है, लेकिन यह बिल्कुल सही कारक बनाने का उत्पादन नहीं कर रहा है। शायद मैं इस समस्या पर बहुत लंबे समय से देख रहा हूं, लेकिन जो कुछ मैंने अनदेखा किया है, उसकी कोई सराहना की जाएगी।
विश्वास मैं त्रुटि पाया है। 'क्यू = क्यू * जी 'के बजाय; आर = जी * आर; 'मुझे लिखा जाना चाहिए' क्यू = क्यू * जी; आर = जी '* आर' matrices पर transposes उलटा करने में, मैंने प्रभावी दिशा में घूर्णन प्रभावी ढंग से किया, जिससे एक अलग कारक बनाने का उत्पादन किया। –