আর-তে ম্যাট্রিক্স বিপরীতের কার্যকর গণনা


21

আমার ম্যাট্রিক্স বিপরীত গণনা করতে হবে এবং solveফাংশনটি ব্যবহার করে যাচ্ছি । যদিও এটি ছোট ম্যাট্রিকগুলিতে ভাল কাজ solveকরে, বড় ম্যাট্রিকগুলিতে খুব ধীর হয়ে থাকে। আমি ভাবছিলাম যে অন্য কোনও ক্রিয়াকলাপ বা ফাংশনের সংমিশ্রণ রয়েছে (এসভিডি, কিউআর, এলইউ, বা অন্যান্য পচন ফাংশনের মাধ্যমে) যা আমাকে দ্রুত ফলাফল দিতে পারে।


2
আপনি আরো তথ্য প্রদান করতে পারেন? আনুমানিক মাত্রা কি? ম্যাট্রিক্সের কি কোনও বিশেষ কাঠামো রয়েছে (প্রতিসাম্যতা, স্পারসিটি ইত্যাদি)? "ধীর" আপনার পরিমাণগত সংজ্ঞাটি কী? এবং "দ্রুত"?
কার্ডিনাল

আনুমানিক মাত্রা 2000x2000 এর মতো। ম্যাট্রিক্সের কোনও বিশেষ কাঠামো নেই। ঠিক আছে, solveপদ্ধতিটি অবশ্যই আমার কাজ করে তবে আমি চাই আলগোরিদিমটি আরও দ্রুত হোক। সুতরাং, আমি কেবল ভাবছি যে এত বড় আকারের ম্যাট্রিক্সের জন্য বিপর্যয় গণনা করার জন্য আরও কার্যকর (সময় প্রসঙ্গে) ফাংশন রয়েছে কিনা।
জিতেন্দ্র

1
আপনি কি সাহায্যের পৃষ্ঠায় অন্য কোনও পরামর্শের চেষ্টা করেছেন solve? অবশ্যই, অনুপস্থিত বিশেষ কাঠামো, আপনি সাধারণ ম্যাট্রিক্স বিপরীতে তাত্ত্বিক জটিলতার সীমা থেকে বাঁচতে পারবেন না।
কার্ডিনাল

3
@ কার্ডিনালাল ট্রিকটি হ'ল প্রকৃত প্রয়োগ সম্পর্কে আরও তদন্ত করা, কারণ আপনি জানেন যে অনেক ক্ষেত্রে ম্যাট্রিক্সকে উল্টানো অপ্রয়োজনীয় (এবং সময় সাপেক্ষ এবং ত্রুটি-প্রবণ)।
whuber

@ শুভ: এটি একটি খুব ভাল পয়েন্ট। আমি মনে করি মাঝে মাঝে আমি এই প্রশ্নগুলিতে কিছুটা সরাসরি সরাসরি পৌঁছে যাই।
কার্ডিনাল

উত্তর:


23

বিপরীতমুখী গণনার জন্য কিছু বিকল্প পদ্ধতি যা সুপারিশ করেছিলেন এবং অন্বেষণ করেছেন তা কি আপনি চেষ্টা করেছেন? আসুন একটি নির্দিষ্ট উদাহরণ বিবেচনা করুন:

library(MASS)

k   <- 2000
rho <- .3

S       <- matrix(rep(rho, k*k), nrow=k)
diag(S) <- 1

dat <- mvrnorm(10000, mu=rep(0,k), Sigma=S) ### be patient!

R <- cor(dat)

system.time(RI1 <- solve(R))
system.time(RI2 <- chol2inv(chol(R)))
system.time(RI3 <- qr.solve(R))

all.equal(RI1, RI2)
all.equal(RI1, RI3)

সুতরাং, এটি পারস্পরিক সম্পর্ক ম্যাট্রিক্সের একটি উদাহরণ যার জন্য আমরা বিপরীতটি চাই। আমার ল্যাপটপে (কোর-i5 2.50Ghz), 8-9 সেকেন্ড সময় নেয় , 4 সেকেন্ডের কিছুটা বেশি সময় নেয় এবং 17-18 সেকেন্ড সময় নেয় (কোডের একাধিক রান স্থিতিশীল ফলাফল পাওয়ার জন্য প্রস্তাবিত হয়)।2000×2000solvechol2inv(chol())qr.solve()

সুতরাং Choleski পচন মাধ্যমে বিপরীত প্রায় দ্বিগুণ হিসাবে দ্রুত solve। অবশ্যই এটি করার আরও দ্রুত উপায় থাকতে পারে। আমি এখানে সর্বাধিক সুস্পষ্ট কিছু অনুসন্ধান করেছি। এবং মন্তব্যে ইতিমধ্যে উল্লিখিত হিসাবে, ম্যাট্রিক্সের যদি একটি বিশেষ কাঠামো থাকে, তবে সম্ভবত এটি আরও গতির জন্য কাজে লাগানো যেতে পারে।


এই সমাধানের জন্য অনেক ধন্যবাদ। আমি, কমপক্ষে, একটি পদ্ধতি জানি যা এটি অর্ধেক সময় সমাধান করতে পারে solve:-) তুলনায়
জিতেন্দ্র

8
কোলেস্কি পচনটি কোভেরিয়েন্স / পারস্পরিক সম্পর্ক ম্যাট্রিক্সের জন্য একটি ভাল পছন্দ তবে মনে রাখবেন যে সাধারণভাবে ম্যাট্রিক্সকে হার্মিটিয়ান হতে হবে (রিয়েল ম্যাট্রিক্সের ক্ষেত্রে প্রতিসাম্য অর্থ), ইতিবাচক নির্দিষ্ট ম্যাট্রিক্স। এটি LU পচন জন্য প্রয়োজনীয় মেমরির অর্ধেক ব্যবহার করে।
রেক্সেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.