কিভাবে ম্যাটল্যাব ব্যাকস্ল্যাশ অপারেটর সমাধান নেই


36

আমি আমার কয়েকটি কোডকে "স্টক" এমএটিএলবি কোডগুলির সাথে তুলনা করছিলাম। ফলাফল দেখে আমি অবাক।

আমি একটি নমুনা কোড চালিয়েছি (স্পার্স ম্যাট্রিক্স)

n = 5000;
a = diag(rand(n,1));
b = rand(n,1);
disp('For a\b');
tic;a\b;toc;
disp('For LU');
tic;LULU;toc;
disp('For Conj Grad');
tic;conjgrad(a,b,1e-8);toc;
disp('Inv(A)*B');
tic;inv(a)*b;toc;

ফলাফল:

    For a\b
    Elapsed time is 0.052838 seconds.

    For LU
    Elapsed time is 7.441331 seconds.

    For Conj Grad
    Elapsed time is 3.819182 seconds.

    Inv(A)*B
    Elapsed time is 38.511110 seconds.

ঘন ম্যাট্রিক্সের জন্য:

n = 2000;
a = rand(n,n);
b = rand(n,1);
disp('For a\b');
tic;a\b;toc;
disp('For LU');
tic;LULU;toc;
disp('For Conj Grad');
tic;conjgrad(a,b,1e-8);toc;
disp('For INV(A)*B');
tic;inv(a)*b;toc;

ফলাফল:

For a\b
Elapsed time is 0.575926 seconds.

For LU
Elapsed time is 0.654287 seconds.

For Conj Grad
Elapsed time is 9.875896 seconds.

Inv(A)*B
Elapsed time is 1.648074 seconds.

কীভাবে হ্যাক এত বিস্ময়কর is বি?


1
ম্যাটল্যাবের অন্তর্নির্মিত ব্যাকস্ল্যাশ, অন্য কথায় লিনিয়ার সমীকরণ সিস্টেমের জন্য প্রত্যক্ষ দ্রাবক, স্পার্স ম্যাট্রিক্সের জন্য মাল্টিফ্রন্টাল পদ্ধতি ব্যবহার করে, এজন্যই এ-বি এতই দুর্দান্ত।
শুহাও কাও

1
এটি টিম ডেভিস কোড cise.ufl.edu/research/sparse এ উপলব্ধ ব্যবহার করে । এছাড়াও বিস্ময়ে দূরে যায় যখন আপনি একটি অ তুচ্ছ সমস্যা
stali

1
"LULU" কী? আপনি কেন এটি LU ফ্যাক্টেরাইজেশন এবং পরবর্তী প্রত্যক্ষ সমাধানের একটি ভাল বাস্তবায়ন বলে মনে করেন?
জেড ব্রাউন

3
@ নুনক্সিক কি বাস্তবায়ন? আপনি নিজে লিখেছেন? উচ্চ-কার্যকারিতা ঘন লিনিয়ার বীজগণিত, সাধারণত সাধারণত অ্যালগোরিদমিকভাবে ভালভাবে বোঝা যায় তবে আধুনিক হার্ডওয়্যারটিতে দক্ষতার সাথে প্রয়োগ করা সহজ নয়। সেরা BLAS / ল্যাপ্যাক বাস্তবায়নগুলি সেই আকারের ম্যাট্রিক্সের জন্য শিখরের কাছাকাছি হওয়া উচিত। এছাড়াও, আপনার মন্তব্যগুলি থেকে, আমি এই ধারণাটি পেয়ে যাচ্ছি যে আপনি মনে করেন এল ইউ এবং গাউসিয়ান নির্মূল বিভিন্ন আলাদা অ্যালগরিদম।
জেড ব্রাউন

1
এটি ইন্টেল এমকেএল ব্যবহার করে লিখিত একটি ফোর্টরান কোডকে কল করে।
26:38

উত্তর:


37

মতলবতে '\' কমান্ড একটি অ্যালগরিদম আহ্বান করে যা ম্যাট্রিক্স এ এর ​​কাঠামোর উপর নির্ভর করে এবং এর বৈশিষ্ট্যগুলিতে চেক (ছোট ওভারহেড) অন্তর্ভুক্ত করে includes

  1. যদি এ স্পার্স এবং ব্যান্ডড হয় তবে একটি ব্যান্ডেড সলভার নিয়োগ করুন।
  2. যদি ক একটি উচ্চ বা নিম্ন ত্রিভুজাকার ম্যাট্রিক্স হয় তবে পশ্চাৎ প্রতিস্থাপন অ্যালগরিদম নিয়োগ করুন।
  3. যদি এ প্রতিসম হয় এবং সত্যিকারের ধনাত্মক তির্যক উপাদান থাকে তবে কোলেস্কি ফ্যাক্টেরাইজেশন চেষ্টা করুন। যদি এ কদাচিৎ হয় তবে প্রথমে পুনরায় অর্ডারিং নিয়োগ করুন পূরণ করতে হবে না to
  4. যদি উপরের কোনও মানদণ্ড পূরণ না হয়, তবে আংশিক পাইভটিংয়ের মাধ্যমে গাউসিয়ান নির্মূলকরণকে ব্যবহার করে একটি সাধারণ ত্রিভুজাকৃতির অনুষঙ্গ করুন।
  5. যদি এগুলি খুব কম হয় তবে ইউএমএফপ্যাক লাইব্রেরি নিয়োগ করুন।
  6. যদি এ বর্গক্ষেত্র না হয়, নির্ধারিত সিস্টেমগুলির জন্য কিউআর ফ্যাক্টেরাইজেশনের ভিত্তিতে অ্যালগরিদম নিয়োগ করুন।

ওভারহেড হ্রাস করার জন্য মতলবতে লিনসলভ কমান্ডটি ব্যবহার করা সম্ভব এবং এই বিকল্পগুলির মধ্যে একটি উপযুক্ত সমাধানকারী নির্বাচন করুন।


ধরে নিচ্ছি যে আমি 10000x10000 আনস্ট্রাকচার্টড ঘন ম্যাট্রিক্সের সাথে সমস্ত উপাদান ননজারো (ঘনত্বের উচ্চ স্তরের) সাথে কাজ করছি, আমার সেরা বাজিটি কী হবে? আমি সেই 1 টি অ্যালগরিদমকে আলাদা করতে চাই যা ঘন ম্যাট্রিক্সের জন্য কাজ করে। এটি কি এলইউ, কিউআর বা গাউসিয়ান নির্মূল?
সুরতহাল

1
৪ য় ধাপের মতো শোনা যাচ্ছে যেখানে গাউসিয়ান নির্মূলের অনুরোধ জানানো হয়েছে যা সর্বাধিক সাধারণ ক্ষেত্রে সাদৃশ্যপূর্ণ যেখানে কার্যকারিতা বাড়াতে A এর কোনও কাঠামো কাজে লাগানো যায় না। সুতরাং, মূলত এটি একটি এলইউ ফ্যাক্টেরাইজেশন এবং পরবর্তী একটি ফরোয়ার্ড এবং তারপরে একটি পশ্চাৎ প্রতিস্থাপন পদক্ষেপ।
অ্যালান পি। ইঞ্জিগ-কারুপ

ধন্যবাদ! আমি মনে করি এটি আমাকে চিন্তা করার দিকনির্দেশ দেয়। বর্তমানে এই জাতীয় কাঠামোগত সমস্যা সমাধানের জন্য আমাদের মধ্যে গাউসিয়ান নির্মূলাই সেরা, এটি কি সঠিক?
25:25

37

আপনি যদি দেখতে চান যে a\bআপনার নির্দিষ্ট ম্যাট্রিক্সের জন্য কী করে আপনি সেট করতে পারেন spparms('spumoni',1)এবং ঠিক কী অ্যালগরিদম দ্বারা প্রভাবিত হয়েছিলেন তা নির্ধারণ করতে পারেন । উদাহরণ স্বরূপ:

spparms('spumoni',1);
A = delsq(numgrid('B',256));
b = rand(size(A,2),1);
mldivide(A,b);  % another way to write A\b

আউটপুট হবে

sp\: bandwidth = 254+1+254.
sp\: is A diagonal? no.
sp\: is band density (0.01) > bandden (0.50) to try banded solver? no.
sp\: is A triangular? no.
sp\: is A morally triangular? no.
sp\: is A a candidate for Cholesky (symmetric, real positive diagonal)? yes.
sp\: is CHOLMOD's symbolic Cholesky factorization (with automatic reordering) successful? yes.
sp\: is CHOLMOD's numeric Cholesky factorization successful? yes.
sp\: is CHOLMOD's triangular solve successful? yes.

সুতরাং আমি দেখতে পাচ্ছি যে "OL" এই ক্ষেত্রে "CHOLMOD" ব্যবহার করে শেষ হয়েছে।


3
নতুন ম্যাটল্যাব সেটিংসের জন্য +1 আমি কখনও শুনিনি। ভাল খেলেছে স্যার।
জেফ অক্সবেরি

2
হেই ধন্যবাদ! এটা ভিতরে help mldivide
dranxo

16

স্পার্স ম্যাট্রিক্সের জন্য, মতলব " \" অপারেশনের জন্য ইউএমএফপ্যাক ব্যবহার করে , যা আপনার উদাহরণস্বরূপ, মূলত এর মানগুলির মধ্য দিয়ে চলে a, তাদের উল্টে দেয়, এবং তাদের মানগুলির সাথে বহুগুণ করে b। এই উদাহরণস্বরূপ, যদিও, আপনার ব্যবহার করা উচিত b./diag(a), যা অনেক দ্রুত।

ঘন সিস্টেমের জন্য, ব্যাকস্ল্যাশ-অপারেটরটি কিছুটা জটিল। এখানে দেওয়া হলে কী করা হয় তার একটি সংক্ষিপ্ত বিবরণ । সেই বিবরণ অনুসারে, আপনার উদাহরণে মতলব a\bপশ্চাদপদ বিকল্প ব্যবহার করে সমাধান করবে । সাধারণ বর্গ ম্যাট্রিক্সের জন্য, একটি এলইউ-পচন ব্যবহার করা হয়।


নিবন্ধিত। স্পারসিটি, একটি ডায়াগ ম্যাট্রিক্সের আমন্ত্রণটি কেবল তির্যক উপাদানগুলির সদৃশ হয়ে যায় তাই খ। / ডায়াগুয়া) কাজ করবে তবে একটি বি বি সাধারণ স্পার্স ম্যাট্রিকগুলির জন্যও দুর্দান্ত কাজ করে। লিন্সলভ বা লুলু (এলইউর আমার অপ্টিমাইজড সংস্করণ) কেন তত দ্রুত নয় যে ক্ষেত্রে d ঘন ম্যাট্রিকের জন্য একটি \ বি।
সুরতহাল

@ নুনোসিক আপনার ঘন ম্যাট্রিক্সের ত্রিভুজ বা ত্রিভুজতা সনাক্ত করতে আপনার এলএলইউ কিছু করতে পারে? যদি তা না হয় তবে প্রতিটি ম্যাট্রিক্সের সাথে এটির সামগ্রীতে বা কাঠামোটি নির্বিশেষে ঠিক ততক্ষণ সময় লাগবে।
পেড্রো

কিছুটা। তবে, লিনসোভাল ওপিটি পতাকাগুলির সাথে, কাঠামোর সংজ্ঞা দেওয়ার জন্য যা আছে তা আমি সংজ্ঞায়িত করেছি। তবুও, একটি \ বি দ্রুত।
সুরতহাল

@ নুনোক্সিক, আপনি যখনই কোনও ব্যবহারকারীর ফাংশন কল করবেন তখন আপনি ওভারহেডের কারণ হবেন। মতলব অভ্যন্তরীণভাবে ব্যাকস্ল্যাশের জন্য সমস্ত কিছু করে, যেমন খুব কম ওভারহেড সহ ডান হাতের পচন এবং পরবর্তী প্রয়োগ, এবং এভাবে দ্রুততর হবে। এছাড়াও, আপনার পরীক্ষাগুলিতে, নির্ভরযোগ্য সময়গুলি পাওয়ার জন্য আপনার কেবলমাত্র একটি কলের বেশি ব্যবহার করা উচিত, যেমন tic; for k=1:100, a\b; end; toc
পেড্রো

5

থাম্বের নিয়ম হিসাবে, আপনার যদি যুক্তিসঙ্গত জটিলতার স্পার্স ম্যাট্রিক্স থাকে (যেমন, এটি 5-পয়েন্ট স্টেনসিল হতে হবে না তবে প্রকৃতপক্ষে স্টোকস সমীকরণের একটি বিচক্ষণতা হতে পারে যার জন্য প্রতি সারি নোনজারো সংখ্যা 5 এর চেয়ে অনেক বড়), তারপরে ইউএমএফপ্যাকের মতো একটি স্পারস ডাইরেক্ট সলভার সাধারণত একটি পুনরাবৃত্ত ক্রাইলোভ সলভারকে মারধর করে যদি সমস্যাটি প্রায় 100,000 অজানা এর চেয়ে বড় না হয়।

অন্য কথায়, 2 ডি বিচক্ষণতার ফলে বেশিরভাগ বিরল ম্যাট্রিকের জন্য, সরাসরি দ্রাবক হ'ল দ্রুততম বিকল্প। কেবলমাত্র 3 ডি সমস্যার জন্য যেখানে আপনি দ্রুত 100,000 অজানা থেকে উপরে চলে আসছেন তা পুনরুক্তিযুক্ত সলভার ব্যবহার করা আবশ্যক হয়ে ওঠে।


3
এটি কীভাবে প্রশ্নের উত্তর দেয় তা আমার কাছে স্পষ্ট নয় তবে আমি এই ভিত্তিটি নিয়ে বিষয়টিও গ্রহণ করি। এটি সত্য যে সরাসরি সমাধানকারীরা মাঝারি আকারের 2D সমস্যার জন্য ভালভাবে কাজ করার ঝোঁক দেখায়, তবে সরাসরি সমাধানকারীরা 100 কে অজানা হওয়ার আগে 3 ডি ভালভাবে ভুগতে থাকে (ভার্টেক্স বিভাজক 2D এর চেয়ে অনেক বড়)। তদুপরি, আমি দাবি করি যে বেশিরভাগ ক্ষেত্রে (যেমন উপবৃত্তাকারী অপারেটর), মাঝারি আকারের 2D সমস্যার জন্যও পুনরাবৃত্ত সমাধানকারীকে সরাসরি দ্রাবকগুলির চেয়ে দ্রুত তৈরি করা যেতে পারে, তবে এটি করার ক্ষেত্রে উল্লেখযোগ্য প্রচেষ্টা হতে পারে (যেমন মাল্টিগ্রিড সম্পাদন করতে সঠিক উপাদান ব্যবহার করে) ।
জেড ব্রাউন

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

আসলে আমার সমস্যাটি হ'ল একটি ভাল ঘন দ্রাবক ডিজাইন করা। আমার যেমন কোনও নির্দিষ্ট অ্যাপ্লিকেশন নেই (সুতরাং, কোনও কাঠামো নেই)। আমি আমার কয়েকটি কোড টুইট করতে এবং বর্তমানে ব্যবহৃত সামগ্রীর সাথে তাদের প্রতিযোগিতামূলক করতে চেয়েছিলাম। আমি কেবলমাত্র একটি \ বি সম্পর্কে কৌতূহলী ছিলাম এবং কীভাবে এটি সর্বদা আমার কোড থেকে ছিটকে যায়।
26:55

@ জেডব্রাউন: হ্যাঁ, সম্ভবত প্রচুর পরিশ্রমের সাথে কেউ ছোট 2 ডি সমস্যার জন্যও প্রত্যক্ষ দ্রষ্টব্যকে পরাস্ত করতে পুনরাবৃত্তি সমাধানকারী পেতে পারে। তবে কেন করবেন? <100k অজানা সমস্যাগুলির জন্য, 2 ডি-তে স্পার্স ডাইরেক্ট সলভারগুলি যথেষ্ট দ্রুত যথেষ্ট। আমি যা বলতে চেয়েছিলাম তা হ'ল: এই জাতীয় ছোট সমস্যার জন্য, প্যারামিটারগুলির সর্বোত্তম সংমিশ্রণটি সঞ্চার করতে এবং সময় কাটানোর জন্য নয় - কেবল ব্ল্যাকবক্স নিন।
ওল্ফগ্যাং ব্যাঙ্গার্থ

5-পয়েন্ট স্টেনসিল (~ 0.05 সেকেন্ডের তুলনায় ~ 0.5 সেকেন্ড) ব্যবহার করে 100k ডফস সহ "ইজি" 2 ডি সমস্যাগুলির জন্য "ইজি" 2 ডি সমস্যাগুলির জন্য ইতিমধ্যে একটি স্পার্স কোলেস্কি এবং (ম্যাট্রিক্স-ভিত্তিক) জ্যামিতিক মাল্টিগ্রিডের মধ্যে ইতিমধ্যে রেন-টাইম ফারাকের অর্ডার রয়েছে। যদি আপনার স্টেনসিল দ্বিতীয় প্রতিবেশী ব্যবহার করে (উদাহরণস্বরূপ চতুর্থ ক্রমের বিচক্ষণতা, নিউটোনার রিওলজি, স্থিতিশীলতা ইত্যাদির কিছু পছন্দের জন্য নিউটন), ভার্টেক্স বিভাজকের আকার প্রায় দ্বিগুণ হয়, সুতরাং সরাসরি সমাধানের ব্যয় প্রায় 8x বেড়ে যায় (ব্যয় আরও বেশি হয়) এমজি এর জন্য সমস্যা-নির্ভর)। অনেক সময়ের পদক্ষেপ বা অপ্টিমাইজেশন / ইউকিউ লুপের সাথে, এই পার্থক্যগুলি উল্লেখযোগ্য।
জেদ ব্রাউন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.