কম্পিউটার প্রোগ্রামিং-এ, **বৈজ্ঞানিক প্রোগ্রামিং ভাষা** একই ধারণার দুটি বিষয় বোঝানো হয়ে থাকে।

বৃহৎ অর্থে, একটি বৈজ্ঞানিক প্রোগ্রামিং ভাষা হল একটি প্রোগ্রামিং ভাষা যা গণনামূলক বিজ্ঞান এবং গণিত গণিতের জন্য ব্যাপকভাবে ব্যবহৃত হয়। এই অর্থে, সি/সি++ এবং পাইথন বৈজ্ঞানিক প্রোগ্রামিং ভাষা হিসাবে বিবেচিত হতে পারে।

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

বৈজ্ঞানিক প্রোগ্রামিং ভাষাগুলিকে সাধারণভাবে বৈজ্ঞানিক ভাষার সাথে বিভ্রান্ত করা উচিত নয়, যা বৈজ্ঞানিক পদ্ধতির অনুশীলনকারীদের কাছ থেকে প্রত্যাশিত নির্ভুলতা, নির্ভুলতা এবং সংক্ষিপ্ততার উচ্চ মানগুলিকে শিথিলভাবে বোঝায়।

উদাহরণ
------

### রৈখিক বীজগণিত

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

```
A = rand(20, 20) # A is a 20x20 matrix
b = rand(20)   # b is a 20-element vector
x = A\b      # x is the solution to A\*x = b

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

### গাণিতিক অপ্টিমাইজেশান

একটি বৈজ্ঞানিক প্রোগ্রামিং ভাষায়, আমরা গাণিতিক ভাষার কাছাকাছি একটি সিনট্যাক্স সহ ফাংশন অপটিমা গণনা করতে পারি। উদাহরণস্বরূপ, নিম্নলিখিত জুলিয়া কোডটি সর্বনিম্ন বহুপদ খুঁজে পায় {\displaystyle P(x,y)=x^{2}-3xy+5y^{2}-7y+3} .

```
using Optim

P(x,y) = x^2 - 3x\*y + 5y^2 - 7y + 3

z₀ = [ 0.0
    0.0 ]   # starting point for optimization algorithm

optimize(z -> P(z...), z₀, Newton();
     autodiff = :forward)

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

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

আরও দেখুন
---------

* রৈখিক বীজগণিত
* গাণিতিক অপ্টিমাইজেশান
* বৈজ্ঞানিক পরিভাষা

তথ্যসূত্র
---------

1. ↑  Karakan, Burak (১ মে ২০২০)। "Python vs R for Data Science"। *Towards Data Science*। সংগ্রহের তারিখ ১৩ মে ২০২১।
2. ↑  "Definition of scientific language"। *PC Magazine Encyclopedia*। Ziff Davis। সংগ্রহের তারিখ ১৩ মে ২০২১।
3. ↑  "scientific language - Definition of scientific language"। *YourDictionary*। The Computer Language Company Inc। ১২ মে ২০১৪ তারিখে মূল থেকে আর্কাইভ করা। সংগ্রহের তারিখ ২৭ মার্চ ২০১৪।
4. ↑  Ning, Andrew। "Scientific Programming Languages"। *Flight, Optimization, and Wind Laboratory*। Brigham Young University। সংগ্রহের তারিখ ১৩ মে ২০২১।
5. ↑  Zachary, Joseph। "Introduction to Scientific Programming: Computational Problem Solving Using Maple and C"। *Joseph L. Zachary*। University of Utah। সংগ্রহের তারিখ ১৩ মে ২০২১।