সংখ্যার কোডে জটিলতার সাথে কীভাবে মোকাবিলা করবেন, উদাহরণস্বরূপ, বড় জ্যাকবিয়ান ম্যাট্রিক্সের সাথে ডিল করার সময়?


10

আমি যুগল সমীকরণের একটি লিনিয়ার ব্যবস্থা সমাধান করছি, এবং বিভ্রান্ত সিস্টেমের জ্যাকবীয় গণনা করেছি। ফলাফলটি সত্যই জটিল, নীচে 3 × 9 ম্যাট্রিক্সের প্রথম 3 কলাম রয়েছে (কেবল!)3×9

আংশিক জ্যাকবিয়ান ম্যাট্রিক্স

(কিছুটা জটিলতা দেখা দেয়, কারণ সংখ্যার স্কিমটির স্থায়িত্বের জন্য ক্ষতিকারক ফিটিং প্রয়োজন))

জ্যাকবীয়দের ব্যবহার করে সংখ্যাসূচক কোড প্রয়োগের বিষয়ে আমার কাছে সাধারণ প্রশ্ন রয়েছে।

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

প্রথমে আমি একটি সীমাবদ্ধ পার্থক্য আনুমানিক সঙ্গে বিশ্লেষণকারী জ্যাকবিয়ান ডিবাগ করার পরিকল্পনা করি, আমি কি কোনও সমস্যা সম্পর্কে সচেতন হতে পারি? আপনি কীভাবে আপনার কোডে একই রকম সমস্যা মোকাবেলা করবেন?

হালনাগাদ

আমি পাইথনে এটি কোডিং করছি এবং জ্যাকবিয়ান তৈরি করতে সিম্পি ব্যবহার করেছি । সম্ভবত আমি কোড-প্রজন্মের বৈশিষ্ট্যটি ব্যবহার করতে পারি ?


জ্যাকবীয় অভিব্যক্তি তৈরি করতে আপনি কোন কম্পিউটার বীজগণিত সিস্টেমটি ব্যবহার করছেন? আপনি যদি ম্যাপেল ব্যবহার করছেন তবে আপনি codegenএতে প্যাকেজটি দেখতে চাইবেন কারণ এটি প্রতিটি বা সমস্ত প্রকাশের জন্য স্বয়ংক্রিয়ভাবে কমপ্যাক্ট এবং দক্ষ সি বা ফোর্টরান কোড তৈরি করতে পারে।
পেড্রো

এখানে অনেকগুলি দরকারী উত্তর রয়েছে, এটির কোনও বাছাই করার কোনও অর্থ নেই। আমি কি এটি একটি সম্প্রদায়ের উইকি পোস্ট করব?
বয়ফ্যারেল

উত্তর:


6

একটি শব্দ: পরিমিতি

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

মডুলার কোড পরীক্ষাও সহজ করে তুলবে; পুরো ম্যাট্রিক্স পরীক্ষা করার চেষ্টা করার বিপরীতে আপনি আপনার জ্যাকবিয়ানের প্রতিটি উপাদানগুলির জন্য পরীক্ষা লিখতে পারেন। উদাহরণস্বরূপ, আপনি যদি নিজের ফাংশনটি am () একটি মডুলার ফ্যাশনে লিখেন তবে আপনি সহজেই এর জন্য স্যানিটি টেস্ট লিখতে পারেন, আপনি এটি সঠিকভাবে আলাদা করছেন কিনা তা পরীক্ষা করুন etc.

আর একটি পরামর্শ হ'ল জ্যাকবীয়দের একত্রিত করার জন্য স্বয়ংক্রিয় ডিফারেনশন লাইব্রেরিগুলিতে নজর দেওয়া। এগুলি ত্রুটিমুক্ত থাকার কোনও গ্যারান্টি নেই তবে সম্ভবত নিজের লেখার চেয়ে কম ডিবাগিং / কম ত্রুটি থাকবে। এখানে কয়েকটি আপনি এটি দেখতে চাইতে পারেন:

দুঃখিত, সবেমাত্র দেখেছি যে আপনি অজগর ব্যবহার করছেন। সায়েন্টিফিক পাইথনের AD এর সমর্থন রয়েছে।


সদুপদেশ. ইন্টারমিডিয়েট এক্সপ্রেশনগুলির প্রায়শই তাদের নিজস্ব ফাংশনগুলির প্রয়োজন হয় না - কেবল এগুলি মধ্যবর্তী ভেরিয়েবলগুলিতে সঞ্চয় করুন।
ডেভিড কেচসন

5

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

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

  • দীর্ঘ অভিব্যক্তিগুলিতে, যেমন সিএ সিস্টেমগুলি দ্বারা উত্পাদিত হয়, সেখানে বৃহত্তর সাবট্র্যাকটিভ বাতিল হওয়ার ঝুঁকি রয়েছে। প্রচুর পরিমাণে গণনা করুন, কেবলমাত্র অল্প সংখ্যক ফল দেওয়ার জন্য তারা সবাই একে অপরকে বাতিল করে দেয় find

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

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

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

কোডটি পরীক্ষা করুন। ডেরিভেটিভস যাচাই করুন।

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

আপনি যদি বিশ্লেষণী ডেরিভেটিভ ব্যবহার করেন তবে পদগুলি পুনরায় ব্যবহার করতে তাদের কোড করুন। এটি একটি গুরুতর সময় সাশ্রয় হতে পারে এবং আপনার নিজের সময় সাশ্রয় করে বাগগুলি হ্রাস করতে পারে। তবে তারপরে numbers নম্বরগুলি পরীক্ষা করে দেখুন!


5

বিবেচনা করার জন্য বিভিন্ন কৌশল রয়েছে:

  1. সিএএস ব্যবহার করে প্রতীকী আকারে ডেরিভেটিভগুলি সন্ধান করুন, তারপরে ডেরিভেটিভগুলি গণনার জন্য কোড রফতানি করুন।

  2. ফাংশনগুলি গণনা করতে কোড থেকে ডেরিভেটিভসকে গণনা করে এমন কোড তৈরি করতে একটি স্বয়ংক্রিয় ডিফারেন্টেশন (AD) সরঞ্জাম ব্যবহার করুন।

  3. জ্যাকবীয়দের আনুমানিক করতে সীমাবদ্ধ পার্থক্য অনুমান ব্যবহার করুন।

স্বয়ংক্রিয় পার্থক্য পুরো জ্যাকবিয়ান গণনার জন্য আরও কার্যকর কোড তৈরি করতে পারে তারপরে ম্যাট্রিক্সে প্রতিটি প্রবেশের সূত্র তৈরি করতে প্রতীকী গণনা ব্যবহার করে। সীমাবদ্ধ পার্থক্য হ'ল আপনার ডেরাইভেটিভগুলি ডাবল পরীক্ষা করার একটি ভাল উপায়।


3

এখানে আমরা একটি কোডে স্যাকাদো ব্যবহার করে যেখানে স্বয়ংক্রিয় পার্থক্য ব্যবহার করেছি তার একটি উদাহরণ এখানে দেওয়া হয়েছে: http://www.dealii.org/developer/do ऑक्सीजन / ডিজাল II/step_33.html


1

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

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