লাইটওয়েট / নন-ইনস্টল সি বা সি ++ ভিত্তিক ঘন লিনিয়ার বীজগণিত সলভারের জন্য সুপারিশ


9

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



প্রিয় জেপ, ফোরামে স্বাগতম। আপনার প্রশ্নটি এখানে একটির মতোই অনুরূপ: scicomp.stackexchange.com/questions/351/…
GertVdE

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

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

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

উত্তর:


7

আপনার প্রয়োজনীয় ফাংশনে ল্যাপাক ইন্টারফেসটি হুবহু নকল করার পরামর্শ দেব, সম্ভবত আপনার কেবল প্রয়োজন dgesv। যেভাবে লোকেরা ল্যাপ ইনস্টল করেছেন তারা কেবল এটির সাথে লিঙ্ক করতে পারেন এবং এটি কেবল কাজ করবে। যে সমস্ত লোকের কাছে ল্যাপ ইনস্টল নেই, তাদের জন্য আপনি নিজেরাই এই ফাংশনটির সহজ বাস্তবায়ন সরবরাহ করেন বা অন্যদের পরামর্শ মতো সম্ভবত ইগেন বা এফএলএনএস ব্যবহার করে এটি প্রয়োগ করুন।

ফোর্টরান জমিতে ল্যাপ লাইব্রেরিটি এমন একটি মান, যা বেশিরভাগ লোকেরা তাদের নিজস্ব বাস্তবায়ন সরবরাহ না করে কেবল এটি ব্যবহার করে এবং এটিই।


+1 এটিকে যুক্ত করুন যে বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশনের (কমপক্ষে ডেবিয়ান ভিত্তিক) রিপোজিটরিতে বাইনারি প্যাকেজ রয়েছে এবং সমস্ত বিক্রেতার সরবরাহকৃত গণিতের লিবস (এমকেএল, সানপ্রুফ, এসিএমএল, ইএসএসএল ইত্যাদি) এটি বহন করে। আপনার সর্বদা যথাসম্ভব স্ট্যান্ডার্ড লিবস ব্যবহার করা উচিত যদিও আপনি উইন্ডোজ / ম্যাকে থাকলে আপনার উপর সি ফ্রিট্রান সংকলক (গফর্ট্রান) ইনস্টল করার মত কিছু সি থেকে ভাল হতে পারে তবে এটি আমি শুনেছি।
stali

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

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

5

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

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


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

@ জেপ, আপনি সত্যিকার অর্থে পারফরম্যান্সের বিষয়ে যত্ন না নিলে আপনি ক্লিপ্যাক থেকে আপনার প্রয়োজনীয় রুটিনগুলি বেছে নেওয়ার চেষ্টাও করতে পারেন।
অরন আহমদিয়া

সমস্ত নির্ভরশীল কোড একই ভাষায় লেখার ভাল কারণ রয়েছে, বিশেষত, এইচপিসি পরিবেশে, আপনার কাছে অদ্ভুত সংকলক / লিঙ্কিং ইস্যু এবং 32/64-বিট ইন্টারফেস সমস্যা রয়েছে। উদাহরণস্বরূপ, অন্তর্নির্মিত গ্রন্থাগারগুলির জন্য আমি পূর্ণসংখ্যার প্রস্থ কীভাবে জানব? অন্তর্নির্মিত গ্রন্থাগারের জন্য কোন সংকলকটি ব্যবহৃত হয়েছিল তা আমি কীভাবে নিশ্চিত করব এবং আমি অন্য সংকলকটির সাথে এর বিপরীতে লিঙ্ক করতে পারি? একটি ভাষায় সবকিছু থাকা এই বিষয়গুলির অনেকগুলি সরল করে। এবং হ্যাঁ, গুচ্ছ রক্ষণাবেক্ষণকারীদের দ্বারা ডকুমেন্টেশন সরবরাহ করা উচিত, তবে বেশিরভাগ সময় সেখানে নেই।
ভিক্টর লিউ

@ ভিক্টোরিলিউ - আপনি যে বিষয়গুলি উল্লেখ করছেন সেগুলি ভাষাগুলির চেয়ে বাস্তবায়নের ক্ষেত্রে আরও দৃ tight়ভাবে মিলিত। মন্তব্য স্থানটি একটি গুরুতর আলোচনায় আসার জন্য একটি দরিদ্র জায়গা, তবে আপনি চ্যাট বা অন্য কোথাও আপনাকে যুক্ত করতে পেরে আমি আনন্দিত যদি আপনি আমাকে এই বিষয়ে আমার চিন্তাভাবনা প্রসারিত করতে চান তবে।
অরন আহমদিয়া

4

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

FLENS একটি BSD লাইসেন্সের অধীনে এবং সুতরাং মালিকানাজাত পণ্যগুলিতে অন্তর্ভুক্ত করার অনুমতি দেয়।

FLENS কেবলমাত্র শিরোনাম এবং আপনার যদি কেবল FLENS এর একটি উপসেট প্রয়োজন হয় আমি আপনাকে কেবল প্রয়োজন এমন ফাংশনগুলি সহ একটি স্ট্রিপড ডাউন সংস্করণ দিতে পারি। FLENS তার নিজস্ব রেফারেন্স BLAS বাস্তবায়ন নিয়ে আসে। তবে usersচ্ছিকভাবে আপনার ব্যবহারকারীরা আটলাস, ওপেনবিএলএস বা গোটোবালসের মতো অপ্টিমাইজড বিএলএএস লাইব্রেরির সাথে লিঙ্ক করতে পারেন। বড় ম্যাট্রিকের ক্ষেত্রে এটি ইগেনের তুলনায় প্রায় 40% এর পারফরম্যান্স লাভ দেয়।

এবং হ্যাঁ, আইগেন তাদের ফলাফলগুলি পরীক্ষা করতে ল্যাপাক টেস্ট স্যুটও ব্যবহার করে। তারা এটি 3 টি কার্যের জন্য করে (লু, কোলেস্কি এবং ইগেনভ্যালু / একটি প্রতিসামগ্রী ম্যাট্রিক্সের ভেক্টর)। তবে একটি অ-প্রতিসাম্য ম্যাট্রিক্সের ইগেনভ্যালু / -ভেক্টরগুলির তাদের গণনা LAPACK পরীক্ষার স্যুটটিতে ব্যর্থ হবে।

দাবি অস্বীকার: হ্যাঁ, FLENS আমার বাচ্চা! তার মানে আমি এর প্রায় 95% কোড করেছি এবং কোডের প্রতিটি লাইনই এর মূল্য ছিল।


1
মাইকেল - দয়া করে এটিকে বন্ধুত্বপূর্ণ সতর্কতা হিসাবে বিবেচনা করুন যা আপনাকে সম্পর্কিত তথ্য প্রকাশের বিষয়ে FAQ এ নিয়মটি অনুসরণ করতে হবে ।
অরন আহমদিয়া

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

1
আইগেন সম্পর্কে আপনার মন্তব্য এখানে বিতর্কিত নয় (যদিও এগুলি আমার কাছে অফ-বিষয় বলে মনে হচ্ছে)। আপনি FLENS এর প্রাথমিক বিকাশকারী, যদি আপনি এখানে একটি উত্তরে এটি সুপারিশ করতে চলেছেন তবে আপনাকে অবশ্যই প্রকল্পটির বিকাশকারী হিসাবে আপনার অনুমোদিততা প্রকাশ করতে হবে।
অরন আহমদিয়া

আহ, ঠিক আছে। আমি ভেবেছিলাম '... আমি আপনাকে দিতে পারি ...' দ্বারা স্পষ্টভাবে পরিষ্কার ছিল। এই ফর্ম প্রকাশ কি ঠিক আছে?
মাইকেল লেহন

2
আমি এটি করার জন্য ধন্যবাদ বলতে চাই; ল্যাপকের একটি বড় অংশকে সি ++ এ পুনরায় প্রয়োগ করার জন্য আমার একই পরিকল্পনা ছিল। তবে, মনে হয় বেশিরভাগ উন্নত (ইগেনভ্যালু) রুটিনগুলির জন্য, আপনি কেবল ল্যাপকে কল করতেই পিছপা হন, তাই আপনি পুরো বিষয়টি পুনরায় বাস্তবায়িত করেন তা বলা কিছুটা মিথ্যা বিজ্ঞাপন। অন্যদিকে, আমি আসলে সি ++ করার ZGEEV সোর্সে বৈশিষ্ট্যসমূহ নিয়ে আসা হয়েছে RNP , যদিও কিছু অংশ স্বয়ংক্রিয় রূপান্তর থেকে 1 ভিত্তিক ইন্ডেক্স এখনও।
ভিক্টর লিউ 1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.