সমস্যার বিশ্লেষণ
কোনও ম্যাট্রিক্সের এসভিডি কখনও অনন্য নয়। ম্যাট্রিক্স মাত্রা এবং তার এসভিডি হতে দিনAn×k
A=UDV′
অরথনোমালাল কলামগুলির সাথে একটি ম্যাট্রিক্স , অ-নেতিবাচক এন্ট্রি সহ একটি ত্রিভুজ ম্যাট্রিক্স এবং অরথনোমালাল কলামগুলির সাথে একটি ম্যাট্রিক্সn×pUp×pDk×pV
এখন নির্বাচন করুন, ইচ্ছামত কোন তির্যক ম্যাট্রিক্স থাকার তির্যক উপর গুলি, যাতে হয় পরিচয় । তারপরp×pS±1S2=Ip×pIp
A=UDV′=UIDIV′=U(S2)D(S2)V′=(US)(SDS)(VS)′
এছাড়াও একটি এর SVD কারণ প্রমান orthonormal কলাম হয়েছে এবং অনুরূপ গণনা এর অর্থোন্নাল কলামগুলি দেখায় । তদুপরি, এবং তির্যক হওয়ায়, তারা চলে আসে, যেহেতু দেখায় যে এখনও অ-নেতিবাচক এন্ট্রি রয়েছে।A
(US)′(US)=S′U′US=S′IpS=S′S=S2=Ip
USVSSDSDS=DS2=D
D
কোনও এসভিডি সন্ধানের জন্য কোডে প্রয়োগ করা পদ্ধতিটি এমন একটি খুঁজে পায় যা এবং একইভাবে, এমন একটি যা তির্যক করে এটি পাওয়া ইজেনভ্যালুগুলির পরিপ্রেক্ষিতে গণনা করতে এগিয়ে যায় । সমস্যাটি হ'ল এটি এর কলামগুলির সাথে কলামগুলির সাথে সামঞ্জস্যপূর্ণ মিলের নিশ্চয়তা দেয় না ।U
AA′=(UDV′)(UDV′)′=UDV′VD′U′=UD2U′
VA′A=VD2V′.
DD2UV
একটি সমাধান
পরিবর্তে, খোঁজার পর এই ধরনের একটি এবং এই ধরনের একটি তাদের গনা ব্যবহারUV
U′AV=U′(UDV′)V=(U′U)D(V′V)=D
সরাসরি এবং দক্ষতার সাথে। এই এর তির্যক মানগুলি ইতিবাচক নয়। D (এটি কারণ বা উভয়ই তির্যককরণ প্রক্রিয়া সম্পর্কে কিছুই নেই যা গ্যারান্টি দেবে যেহেতু সেই দুটি প্রক্রিয়া পৃথকভাবে পরিচালিত হয়েছিল।) এর তির্যক বরাবর এন্ট্রি নির্বাচন করে তাদের ইতিবাচক করুন Make এর এন্ট্রিগুলির চিহ্নগুলি সমান করতে , যাতে সমস্ত ধনাত্মক মান থাকে। ডান-গুন দ্বারা এই ক্ষতিপূরণ দ্বারা :A′AAA′SDSDUS
A=UDV′=(US)(SD)V′.
যে একটি SVD হয়।
উদাহরণ
সাথে আসুন । একটি এসভিডি হ'লn=p=k=1A=(−2)
(−2)=(1)(2)(−1)
সঙ্গে , , এবং ।U=(1)D=(2)V=(−1)
আপনি যদি টিটি তির্যক করেন তবে আপনি স্বাভাবিকভাবেই এবং । অনুরূপভাবে যদি আপনি diagonalize আপনি বেছে নেবেন । দুর্ভাগ্যক্রমে, পরিবর্তে, গণনা কারণ এটি নেতিবাচক, সেট । এই adjusts থেকে এবং করতে । আপনি যা দুটি সম্ভাব্য এসভিডি (তবে মূলের মতো নয়!) এর মধ্যে একটি।A′A=(4)U=(1)D=(4–√)=(2)AA′=(4)V=(1)
UDV′=(1)(2)(1)=(2)≠A.
D=U′AV=(1)′(−2)(1)=(−2).
S=(−1)UUS=(1)(−1)=(−1)DSD=(−1)(−2)=(2)A=(−1)(2)(1),
কোড
এখানে কোড পরিবর্তিত হয়। এর আউটপুট নিশ্চিত করে
- পদ্ধতিটি
m
সঠিকভাবে পুনরায় তৈরি করে ।
- U এবং সত্যই এখনও orthonormal হয়।V
- তবে ফলাফলটি একই এসভিডি দ্বারা ফিরে আসে না
svd
। (উভয়ই সমানভাবে বৈধ)
m <- matrix(c(1,0,1,2,1,1,1,0,0),byrow=TRUE,nrow=3)
U <- eigen(tcrossprod(m))$vector
V <- eigen(crossprod(m))$vector
D <- diag(zapsmall(diag(t(U) %*% m %*% V)))
s <- diag(sign(diag(D))) # Find the signs of the eigenvalues
U <- U %*% s # Adjust the columns of U
D <- s %*% D # Fix up D. (D <- abs(D) would be more efficient.)
U1=svd(m)$u
V1=svd(m)$v
D1=diag(svd(m)$d,n,n)
zapsmall(U1 %*% D1 %*% t(V1)) # SVD
zapsmall(U %*% D %*% t(V)) # Hand-rolled SVD
zapsmall(crossprod(U)) # Check that U is orthonormal
zapsmall(tcrossprod(V)) # Check that V' is orthonormal