এই বিষয়টিতে আমার পূর্বের পোস্টে একটি সিগ হিসাবে আমি লিনিয়ার বীজগণিত এবং সম্পর্কিত আর ফাংশনগুলির পিছনে কিছু অস্থায়ী (অসম্পূর্ণ হওয়া সত্ত্বেও) অনুসন্ধান ভাগ করতে চাই। এটি কাজ চলছে বলে মনে করা হচ্ছে।
ফাংশনগুলির অস্বচ্ছতার অংশটি গৃহকর্তার পচনের "কমপ্যাক্ট" ফর্মের সাথে সম্পর্কিত । গৃহস্থালীর পচনের পিছনে ধারণাটি হ'ল হাইপারপ্লেনের মাধ্যমে ইউনিট-ভেক্টর- দ্বারা নির্ধারিত হাইপারপ্লেন জুড়ে ভেক্টরগুলিকে প্রতিফলিত করা , তবে এই প্লেনটিকে উদ্দেশ্যমূলক উপায়ে বেছে নেওয়া যাতে মূল ম্যাট্রিক্স এর প্রতিটি কলাম ভেক্টর প্রজেক্ট করা যায় to সম্মুখের মান একক ভেক্টর। সাধারণীকৃত আদর্শ -২ ভেক্টর - বিভিন্ন গৃহস্থালীর রূপান্তরগুলি করতে ব্যবহার করা যেতে পারে ।ইউ এ ই 1 1 ইউ আই - 2QRuAe11uI−2uuTx
ফলস্বরূপ অভিক্ষেপ হিসাবে প্রকাশ করা যেতে পারে
sign(xi=x1)×∥x∥⎡⎣⎢⎢⎢⎢⎢⎢⎢100⋮0⎤⎦⎥⎥⎥⎥⎥⎥⎥+⎡⎣⎢⎢⎢⎢⎢⎢⎢x1x2x3⋮xm⎤⎦⎥⎥⎥⎥⎥⎥⎥
ভেক্টর কলাম মধ্যে পার্থক্য প্রতিনিধিত্ব করে ভেক্টর ম্যাট্রিক্স মধ্যে যে আমরা পচা করতে চান এবং ভেক্টর subspace বা "মিরর" দ্বারা নির্ধারিত জুড়ে প্রতিফলন সংশ্লিষ্ট ।vxAyu
ল্যাপাক দ্বারা ব্যবহৃত পদ্ধতিটি গৃহস্থালীর প্রতিচ্ছবিগুলির মধ্যে প্রথম প্রবেশের স্টোরের প্রয়োজনীয়তা এর মধ্যে রূপান্তরিত করে rates পরিবর্তে ভেক্টর স্বাভাবিক করার করার সঙ্গে , এটা ঠিক মুষ্টি এন্ট্রি করে একটি রূপান্তরিত হয় ; তবুও, এই নতুন ভেক্টরগুলি - তাদের কল করুন এখনও দিকনির্দেশক ভেক্টর হিসাবে ব্যবহার করা যেতে পারে।1vu∥u∥=11w
পদ্ধতির সৌন্দর্যটি হ'ল যে কোনও পচে উপরের ত্রিভুজাকার হয়, আমরা এই রিফ্লেক্টরগুলি পূরণ করতে প্রকৃতির ত্রিভুজের নীচে এর উপাদানের সুবিধা নিতে পারি । ধন্যবাদ, এই ভেক্টরগুলিতে নেতৃস্থানীয় এন্ট্রিগুলি সমান , ম্যাট্রিক্সের "বিতর্কিত" তির্যকটিতে একটি সমস্যা প্রতিরোধ করে: জেনেও যে তারা তাদের অন্তর্ভুক্ত করার দরকার নেই, এবং এর এন্ট্রিগুলিতে তির্যকটি উত্পাদন করতে পারে ।RQR0Rw11R
ফাংশনের "কমপ্যাক্ট কিউআর" ম্যাট্রিক্সটিকে "মোডিফাইড" রিফ্লেক্টরগুলির জন্য qr()$qr
প্রায় ম্যাট্রিক্স এবং নিম্ন ত্রিভুজাকার "স্টোরেজ" ম্যাট্রিক্সের সংযোজন হিসাবে বোঝা যায় ।R
গৃহস্থালীর অভিক্ষেপে এখনও form ফর্মটি থাকবে তবে আমরা ( ) এর সাথে কাজ করব না , বরং ভেক্টর দিয়ে f বিএফ ডাব্লু , যার মধ্যে কেবল প্রথম এন্ট্রিটি হওয়ার গ্যারান্টেড এবংI−2uuTxu∥x∥=1w1
I−2uuTx=I−2w∥w∥wT∥w∥x=I−2wwT∥w∥2x(1) ।
কেউ ধরে নিতে পারে যে এই প্রতিফলকের প্রথম এন্ট্রি বাদ দিয়ে তির্যক বা নীচে সংরক্ষণ করা ঠিক হবে এবং একটি দিন কল করুন। যাইহোক, জিনিসগুলি এত সহজ কখনও হয় না। পরিবর্তে কি তির্যক নিচের সংরক্ষিত হয় তার সংমিশ্রণ সেইমালিকের রূপান্তর (1), যেমন, যে হিসাবে প্রকাশ মধ্যে কোফিসিয়েন্টস সংজ্ঞা
হিসাবে:wR1qr()$qr
wtau
τ=wTw2=∥w∥2 , প্রতিফলকগুলি হিসাবে প্রকাশ করা যেতে পারে । এই "প্রতিবিম্বক" ভেক্টরগুলি তথাকথিত "কমপ্যাক্ট " -এ অধীনে সঞ্চিত ।reflectors=w/τRQR
এখন আমরা ভেক্টর থেকে এক ডিগ্রি দূরে রয়েছি এবং প্রথম এন্ট্রিটি আর , সুতরাং "প্রতিফলক" ভেক্টরগুলির প্রথম এন্ট্রি বাদ দিয়ে আমরা জোর দিয়েছি বলে আউটপুট এগুলি পুনরুদ্ধার করার কীটি অন্তর্ভুক্ত করতে হবে to সব কিছু ফিট । সুতরাং আমরা আউটপুটে মান দেখতে পাচ্ছি ? ঠিক আছে, এটি অনুমানযোগ্য হবে না would এর পরিবর্তে (যেখানে এই কীটি সঞ্চিত রয়েছে) আমরা ।w1qr()
qr()$qr
τqr()$qraux
ρ=∑reflectors22=wTwτ2/2
নীচে লাল রঙের মধ্যে ফ্রেমযুক্ত, আমরা তাদের প্রথম এন্ট্রি বাদ দিয়ে "প্রতিচ্ছবি" ( ) দেখতে পাচ্ছি ।w/τ
সমস্ত কোড এখানে , তবে যেহেতু এই উত্তরটি কোডিং এবং লিনিয়ার বীজগণিতের ছেদ সম্পর্কিত, তাই আমি আউটপুটটি খুব সহজেই পেস্ট করব:
options(scipen=999)
set.seed(13)
(X = matrix(c(rnorm(16)), nrow=4, byrow=F))
[,1] [,2] [,3] [,4]
[1,] 0.5543269 1.1425261 -0.3653828 -1.3609845
[2,] -0.2802719 0.4155261 1.1051443 -1.8560272
[3,] 1.7751634 1.2295066 -1.0935940 -0.4398554
[4,] 0.1873201 0.2366797 0.4618709 -0.1939469
এখন আমি ফাংশনটি নীচে লিখেছি House()
:
House = function(A){
Q = diag(nrow(A))
reflectors = matrix(0,nrow=nrow(A),ncol=ncol(A))
for(r in 1:(nrow(A) - 1)){
# We will apply Householder to progressively the columns in A, decreasing 1 element at a time.
x = A[r:nrow(A), r]
# We now get the vector v, starting with first entry = norm-2 of x[i] times 1
# The sign is to avoid computational issues
first = (sign(x[1]) * sqrt(sum(x^2))) + x[1]
# We get the rest of v, which is x unchanged, since e1 = [1, 0, 0, ..., 0]
# We go the the last column / row, hence the if statement:
v = if(length(x) > 1){c(first, x[2:length(x)])}else{v = c(first)}
# Now we make the first entry unitary:
w = v/first
# Tau will be used in the Householder transform, so here it goes:
t = as.numeric(t(w)%*%w) / 2
# And the "reflectors" are stored as in the R qr()$qr function:
reflectors[r: nrow(A), r] = w/t
# The Householder tranformation is:
I = diag(length(r:nrow(A)))
H.transf = I - 1/t * (w %*% t(w))
H_i = diag(nrow(A))
H_i[r:nrow(A),r:ncol(A)] = H.transf
# And we apply the Householder reflection - we left multiply the entire A or Q
A = H_i %*% A
Q = H_i %*% Q
}
DECOMPOSITION = list("Q"= t(Q), "R"= round(A,7),
"compact Q as in qr()$qr"=
((A*upper.tri(A,diag=T))+(reflectors*lower.tri(reflectors,diag=F))),
"reflectors" = reflectors,
"rho"=c(apply(reflectors[,1:(ncol(reflectors)- 1)], 2,
function(x) sum(x^2) / 2), A[nrow(A),ncol(A)]))
return(DECOMPOSITION)
}
আসুন আউটপুটটি আর-বিল্ট-ইন ফাংশনগুলির সাথে তুলনা করি। প্রথমে ঘরে তৈরি ফাংশন:
(H = House(X))
$Q
[,1] [,2] [,3] [,4]
[1,] -0.29329367 -0.73996967 0.5382474 0.2769719
[2,] 0.14829152 -0.65124800 -0.5656093 -0.4837063
[3,] -0.93923665 0.13835611 -0.1947321 -0.2465187
[4,] -0.09911084 -0.09580458 -0.5936794 0.7928072
$R
[,1] [,2] [,3] [,4]
[1,] -1.890006 -1.4517318 1.2524151 0.5562856
[2,] 0.000000 -0.9686105 -0.6449056 2.1735456
[3,] 0.000000 0.0000000 -0.8829916 0.5180361
[4,] 0.000000 0.0000000 0.0000000 0.4754876
$`compact Q as in qr()$qr`
[,1] [,2] [,3] [,4]
[1,] -1.89000649 -1.45173183 1.2524151 0.5562856
[2,] -0.14829152 -0.96861050 -0.6449056 2.1735456
[3,] 0.93923665 -0.67574886 -0.8829916 0.5180361
[4,] 0.09911084 0.03909742 0.6235799 0.4754876
$reflectors
[,1] [,2] [,3] [,4]
[1,] 1.29329367 0.00000000 0.0000000 0
[2,] -0.14829152 1.73609434 0.0000000 0
[3,] 0.93923665 -0.67574886 1.7817597 0
[4,] 0.09911084 0.03909742 0.6235799 0
$rho
[1] 1.2932937 1.7360943 1.7817597 0.4754876
আর ফাংশন:
qr.Q(qr(X))
[,1] [,2] [,3] [,4]
[1,] -0.29329367 -0.73996967 0.5382474 0.2769719
[2,] 0.14829152 -0.65124800 -0.5656093 -0.4837063
[3,] -0.93923665 0.13835611 -0.1947321 -0.2465187
[4,] -0.09911084 -0.09580458 -0.5936794 0.7928072
qr.R(qr(X))
[,1] [,2] [,3] [,4]
[1,] -1.890006 -1.4517318 1.2524151 0.5562856
[2,] 0.000000 -0.9686105 -0.6449056 2.1735456
[3,] 0.000000 0.0000000 -0.8829916 0.5180361
[4,] 0.000000 0.0000000 0.0000000 0.4754876
$qr
[,1] [,2] [,3] [,4]
[1,] -1.89000649 -1.45173183 1.2524151 0.5562856
[2,] -0.14829152 -0.96861050 -0.6449056 2.1735456
[3,] 0.93923665 -0.67574886 -0.8829916 0.5180361
[4,] 0.09911084 0.03909742 0.6235799 0.4754876
$qraux
[1] 1.2932937 1.7360943 1.7817597 0.4754876
qr.qy()
ম্যানুয়াল গণনার সাথে একমত হয় । আমি সত্যিই আশ্চর্য হয়েছি যে সদৃশ ছাড়াই আপনার প্রশ্নের উত্তর দেওয়ার জন্য আমি আলাদা কিছু বলতে পারি। আমি সত্যিই খারাপ কাজ করতে চাই না ... আপনার প্রতি শ্রদ্ধা জানাতে আমি আপনার পোস্টগুলি যথেষ্ট পরিমাণে পড়েছি ... যদি আমি কোড ব্যতীত ধারণাটি প্রকাশ করার উপায় খুঁজে পাই তবে কেবল লিনিয়ার বীজগণিতের মাধ্যমে, আমি এটি ফিরে আসব। আমি খুশি, যদিও আপনি কিছু মূল্য হিসাবে আমার অনুসন্ধান খুঁজে পেয়েছেন। শুভেচ্ছা, টনি।qr.Q(qr(X))
Q%*%z