কীভাবে কার্যকরভাবে গ্লোবাল স্পার্স সসীম উপাদান স্টিফনেস ম্যাট্রিক্সে ডিরিচলেট সীমানা শর্তাবলী কার্যকর করতে


9

আমি ভাবছি যে কীভাবে গ্লোবাল স্পার্স সসীম উপাদান ম্যাট্রিকগুলিতে ডিরিচলেট সীমানা শর্তগুলি কার্যকরভাবে কার্যকর করা হয়। উদাহরণস্বরূপ বলতে দিন যে আমাদের বিশ্বব্যাপী সসীম উপাদান ম্যাট্রিক্স ছিল:

কে=[520-102410001632-1037000203]এবং ডানদিকে ভেক্টর=[12345]

তারপরে প্রথম নোডে ডিরিচলেট শর্তটি প্রয়োগ করতে ( ) আমরা প্রথম সারিতে শূন্য করে, কে 1 put at এ 1 রেখে এবং ডান দিকের প্রথম কলামটি বিয়োগ করব। উদাহরণস্বরূপ আমাদের সিস্টেমটি হয়ে উঠবে: এক্স1=কে11

কে=[1000004100016320037000203]এবং ডানদিকে ভেক্টর=[2-2×3-0×4+ +1×5-0×]

এটি তত্ত্বের ক্ষেত্রে সমস্ত ভাল এবং ভাল, তবে আমাদের কে ম্যাট্রিক্স যদি সংকুচিত সারি বিন্যাসে (সিআরএস) সঞ্চিত থাকে তবে কলামগুলি ডানদিকে সরিয়ে নেওয়া বড় সিস্টেমে ব্যয়বহুল হয়ে ওঠে (অনেকগুলি নোড ডেরিচলেট সহ)। একটি বিকল্প হ'ল ডেরিচলেট শর্তের সাথে সম্পর্কিত কলামগুলি ডান হাতের কাছে না সরিয়ে নেওয়া, অর্থাৎ আমাদের সিস্টেমটি হয়ে উঠবে:

কে=[100002410001632-1037000203]এবং ডানদিকে ভেক্টর=[2345]

তবে এটির পিছনে একটি বড় অঙ্কন রয়েছে যে সিস্টেমটি আর প্রতিসম নয় এবং তাই আমরা আর পূর্ব শর্তযুক্ত কনজুগেট গ্রেডিয়েন্ট (বা অন্যান্য প্রতিসাম্পিক দ্রাবক) ব্যবহার করতে পারি না। একটি আকর্ষণীয় সমাধান যা আমি পেলাম তা হ'ল "বড় সংখ্যাগুলির পদ্ধতি" যা আমি জেনেডি নিকিশকভের "প্রোগ্রামিং ফিনিট এলিমেন্টস অফ জাভা" বইটিতে পেয়েছি। এই পদ্ধতিটিতে এই সত্যটি ব্যবহার করা হয় যে ডাবল নির্ভুলতার মধ্যে প্রায় 16 সংখ্যক নির্ভুলতা রয়েছে। পজিশনে 1 রাখার পরিবর্তে আমরা একটি বিশাল সংখ্যা রাখি। উদাহরণস্বরূপ আমাদের সিস্টেমটি হয়ে যায়: কে11

কে=[1.06420-102410001632-1037000203]এবং ডানদিকে ভেক্টর=[×1.0642345]

এই পদ্ধতির সুবিধাগুলি হ'ল এটি ম্যাট্রিক্সের প্রতিসাম্যতা বজায় রাখে এবং স্পার্স স্টোরেজ ফর্ম্যাটগুলির জন্যও খুব দক্ষ। আমার প্রশ্নগুলি তখন নিম্নরূপ:

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


2
আপনার কাছে কি প্রমাণ রয়েছে যে এটি আপনাকে যথেষ্ট পরিমাণে কমিয়ে দিচ্ছে?
বিল বার্থ

@ বিলবার্থ হ্যাঁ, যদিও সবসময়ই সুযোগ থাকে যে আমি অদক্ষভাবে কিছু করছি। জেনাডিলি নিজে লিখেছেন যে স্পষ্ট পদ্ধতিটি সম্পূর্ণ 2 ডি অ্যারেগুলির জন্য সহজ, ".. যখন ম্যাট্রিক্স কমপ্যাক্ট ফর্ম্যাটে থাকে তখন ম্যাট্রিক্স সারি এবং কলামগুলি অ্যাক্সেস করা সর্বদা সহজ নয়।" সুস্পষ্ট পদ্ধতিটি দক্ষতার সাথে বাস্তবায়নের জন্য আরও চ্যালেঞ্জ হতে পারে এমন পরামর্শ দেওয়া হচ্ছে। যেহেতু আমার কোডটি বর্তমানে লিখিত হয়েছে, সুস্পষ্ট পদ্ধতিটি প্রকৃত সমাধানের পরে আরও বেশি সময় নিতে পারে।
জেমস

1
ওল্ফগ্যাং যেমন বলে তেমন করুন এবং এলিট ম্যাট্রিক্সে সীমানা শর্ত প্রয়োগ করুন আপনার একত্রিত হওয়ার আগে।
বিল বার্থ

@ বিলবার্থ হ্যাঁ আমি মনে করি আমি এটি করব। তাঁর ভিডিওগুলি দুর্দান্ত! আপনার জন্য প্রতিটি টাইমস্টেপে গ্লোবাল ম্যাট্রিকগুলি পুনরায় একত্রিত করা দরকার কিনা সে সম্পর্কে আমি কেবল তার জন্য একটি মন্তব্য / প্রশ্ন রেখেছি, যার পরে আমি মনে করি আমি তার উত্তর গ্রহণ করব will
জেমস

উত্তর:


11

ডিল.আইআই ( http://www.dealii.org - দাবি অস্বীকার: আমি সেই লাইব্রেরির অন্যতম প্রধান লেখক), আমরা পুরো সারি এবং কলামগুলি মুছে ফেলি এবং এটি সামগ্রিকভাবে খুব বেশি ব্যয়বহুলও নয়। কৌশলটি হ'ল স্পারসিটি প্যাটার্নটি সাধারণত প্রতিসাম্যযুক্ত তা ব্যবহার করা হয়, সুতরাং আপনি জানেন যে একটি সম্পূর্ণ কলামটি অপসারণ করার সময় আপনাকে কোন সারিগুলি দেখতে হবে।

আমার দৃষ্টিভঙ্গিতে আরও ভাল পন্থা হ'ল বিশ্ব ম্যাট্রিক্সে যুক্ত হওয়ার আগে সেগুলি সারণি ম্যাট্রিকগুলিতে এই সারিগুলি এবং কলামগুলি অপসারণ করা। সেখানে আপনি সম্পূর্ণ ম্যাট্রিক্স নিয়ে কাজ করেন, তাই সবকিছু দক্ষ।

আমি কখনও বিপুল সংখ্যার পদ্ধতির কথা শুনিনি এবং এটি ব্যবহার করব না কারণ অবশ্যই এটি মারাত্মক অসুস্থ শর্তযুক্ত সমস্যার দিকে পরিচালিত করবে।

রেফারেন্সের জন্য, আমরা চুক্তিতে যে অ্যালগরিদমগুলি ব্যবহার করি I আমি প্রবন্ধ 21.1 এবং 21.65 তে http://www.math.colostate.edu/~bangerth/videos.html এ ধারণাগতভাবে বর্ণনা করা হয়েছে । তারা আপনার বর্ণনার সাথে মিলিয়েছে।


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

1
এটা আবেদন উপর নির্ভর করে। সমস্ত "বিগ" কোড অলৈখিক সময় নির্ভর সমস্যাগুলি সমাধান করে এবং এগুলির জন্য এটি স্পষ্ট যে আপনাকে একটি উপায় বা অন্য উপায়ে পুনরায় একত্রিত হওয়া দরকার। লিনিয়ার কোডগুলির জন্য, আপনি কেবল আসল ম্যাট্রিক্সটি সঞ্চয় করতে পারেন এবং প্রতিবার ধাপে এটিকে অন্য কোথাও অনুলিপি করতে পারেন, সীমানা শর্ত প্রয়োগ করুন এবং তারপরে এটি solver এ ব্যবহার করুন। এর জন্য আরও মেমরি প্রয়োজন তবে এটি অন্যথায় সস্তা।
ওল্ফগ্যাং ব্যাঙ্গার্থ

1
আহ আমি দেখি এটিই সন্দেহ করেছিল। আপনার পরামর্শ অনুসারে আমি বাস্তবায়ন করব। আপনার সাহায্যের জন্য ধন্যবাদ। এই দেলালী টিউটোরিয়াল ভিডিওগুলি সত্যিই ভাল বিটিডব্লিউ!
জেমস

2

জিরো বিসিগুলি সহজ। খ্রিস্টপূর্ব নন শূন্যের জন্য আপনি ল্যাঞ্জরেঞ্জ গুণকগুলিও ব্যবহার করতে পারেন। যেমন, এখানে দেখুন । এলএমগুলির একটি সুবিধা হ'ল আপনি যে কোনও সীমাবদ্ধ সমীকরণটি ব্যবহার করতে পারেন, যদিও সিস্টেমটি অনির্দিষ্ট হয়ে যায় তাই আপনার একটি উপযুক্ত দ্রাবক প্রয়োজন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.