সূর্য সিদ্ধান্ত পঞ্জিকা সকল প্রবন্ধ

মধ্যগ্রহ, স্পষ্টগ্রহ ও বীজসংস্কার: Mean ও True Position-এর পার্থক্য কী?

সূর্যসিদ্ধান্তের mean motion, manda-śīghra correction, bīja-saṃskāra এবং ১৯৪৭-পরবর্তী Sankranti-only Modern Star Fit-এর ব্যাখ্যা।

গণনাপদ্ধতি · গ্রহগণিত ও সংস্কার · প্রবন্ধ ৩৯

মধ্যগ্রহ, স্পষ্টগ্রহ ও বীজসংস্কার: Mean ও True Position-এর পার্থক্য কী?

সিদ্ধান্তীয় গ্রহগণনা সরাসরি “আজ গ্রহ কোথায়” দিয়ে শুরু হয় না। প্রথমে uniform mean motion থেকে মধ্যস্থান, তারপর manda ও śīghra equation-এর মাধ্যমে স্পষ্টস্থান নির্ণীত হয়। এরও আগে বা পাশাপাশি mean-motion parameter-এ bīja correction থাকতে পারে। এই আলাদা স্তরগুলো মিশিয়ে ফেললে Saṅkrānti, তিথি ও গ্রহস্ফুট—সবখানে অনিচ্ছাকৃত পরিবর্তন ছড়িয়ে পড়ে।

এক বাক্যে মূলনীতি: Bīja mean-motion/epoch parameter সংশোধন করে; manda–śīghra equation mean longitude-কে true longitude-এ রূপান্তর করে; project-এর Modern Sankranti Star Fit কেবল solar boundary ও Bengali date-এ সীমাবদ্ধ।

একটি ফলের পেছনে তিনটি আলাদা layer

LayerকাজOutput
Mean motionEpoch থেকে uniform angular accumulationমধ্য longitude
Orbital equationsManda ও śīghra non-uniformity modelস্পষ্ট/true longitude
Calendar policySaṅkrānti instant থেকে Bengali month/day ruleপঞ্জিকার তারিখ

এক layer-এর tuning অন্য layer-এ নিজে থেকে প্রযোজ্য নয়। Printed Bengali Panjika-র Saṅkrānti time মিলাতে solar mean parameter-এর একটি isolated fit ব্যবহার করা যেতে পারে; কিন্তু সেই fit Moon, tithi, nakshatra, yoga, karana বা displayed planet longitude-এ ছড়ানো উচিত নয়—যতক্ষণ না আলাদা গবেষণা তা সমর্থন করে।

মধ্যগ্রহ বা mean longitude

Mean বা madhyama model ধরে নেয় যে একটি celestial parameter uniform circular rate-এ চলে। একটি generic modern notation:

λ̄(t) = normalize(λ̄epoch + A · n + B)

A = epoch থেকে elapsed days বা ahargaṇa

n = mean daily motion

B = প্রযোজ্য mean-motion/epoch correction

সূর্যসিদ্ধান্তীয় implementation-এ rate সাধারণত বৃহৎ cycle-এর integer revolutions ও total days থেকে আসে। তাই production engine-এ যতদিন সম্ভব integer/rational arithmetic রাখা ভালো; আগেভাগে decimal degree round করলে শতাব্দীব্যাপী drift তৈরি হতে পারে।

Ahargaṇa, Dinabrinda ও Abda-pinda

  • Ahargaṇa/Dinabrinda: নির্ধারিত epoch থেকে elapsed day count বা তার algorithm-specific reduced form;
  • Abda-pinda: accumulated/reduced year quantity, যা year-to-day বা epoch reduction-এ ব্যবহৃত হয়;
  • Mean revolution: ঐ elapsed interval-এ uniform angular cycles;
  • Dhruva/Kṣepaka: epoch offset বা additive constant—school ও handbook অনুযায়ী terminology বদলাতে পারে।

আপনার yearly report-এ engine যে raw intermediate ব্যবহার করে সেটিই print করুন। ঐতিহাসিক শব্দের একটি generic formula report-এ বসিয়ে actual code-এর অন্য মানকে একই label দেওয়া উচিত নয়।

Manda correction: mean থেকে first equation

Mean longitude uniform motion দেখায়, কিন্তু apparent/true motion কখনও ধীর, কখনও দ্রুত। Manda বা “slow” correction mean planet এবং manda-ucca/apogee-এর angular relation থেকে equation নির্ণয় করে।

Manda-kendra = normalize(mean longitude − manda-ucca)

Manda-corrected longitude = mean longitude ± manda-phala

Sign যোগ না বিয়োগ হবে তা anomaly-এর quadrant ও engine rule নির্ধারণ করে। Manda-phala একটি fixed modern Kepler equation নয়; traditional epicycle circumference, sine table এবং prescribed iteration অনুসারে নির্ণীত হয়।

Śīghra correction: Sun-এর সঙ্গে সম্পর্ক

পাঁচ গ্রহের apparent motion ব্যাখ্যায় দ্বিতীয় “fast” বা śīghra construction ব্যবহৃত হয়। Superior ও inferior planet-এর parameter interpretation এক নয়; Mercury ও Venus-এর mean-motion setup-এ śīghrocca গুরুত্বপূর্ণ ভূমিকা রাখে।

সূর্যসিদ্ধান্তের true-place procedure-এ Mars প্রভৃতি গ্রহের জন্য correction একবারে শেষ হয় না। সংক্ষেপে:

  1. প্রথম śīghra equation-এর অর্ধেক mean place-এ প্রয়োগ;
  2. তার ওপর প্রথম manda equation-এর অর্ধেক প্রয়োগ;
  3. Recomputed পূর্ণ manda equation প্রয়োগ;
  4. Rectified অবস্থান থেকে recomputed পূর্ণ śīghra equation প্রয়োগ।

Sun ও Moon-এর ক্ষেত্রে মূল text একটি manda operation দিয়ে true place নির্ণয়ের কথা বলে; planets-এর ক্ষেত্রে multi-stage correction দেয়।

স্পষ্টগ্রহ বা true position

সব prescribed correction-এর পরে প্রাপ্ত longitude হলো spaṣṭa বা true place। এখানে “true” মানে ঐ traditional model-এর corrected result—Swiss Ephemeris/JPL-এর modern physical ephemeris-এর সঙ্গে গাণিতিকভাবে identical হওয়া নয়।

Outputব্যবহারকী লেখা উচিত
Mean longitudeResearch trace, yearly mean report“মধ্যগ্রহ”
Manda-correctedIntermediate audit“মন্দস্পষ্ট” বা explicit intermediate
Final traditional trueClassical গ্রহস্ফুট ও pañcāṅga“সূর্যসিদ্ধান্ত স্পষ্টগ্রহ”
Swiss modern longitudeDrik comparison, eclipse, rise/set“Swiss Ephemeris, Lahiri”

Comparison rule: একই instant, calendar, time scale, geocentric/topocentric setting, ayanāṃśa ও coordinate type না মিলিয়ে দুই longitude-এর difference প্রকাশ করবেন না।

Bīja-saṃskāra কী?

Bīja বা “seed correction” mean-motion computation-এর parameter/epoch value-তে ছোট পরিবর্তন আনে। ঐতিহাসিক ব্যবহারে এটি দীর্ঘ সময়ে accumulated secular mismatch কমাতে অথবা এক astronomical school/pakṣa-এর result-কে অন্য parameter set-এর সঙ্গে রূপান্তর করতে ব্যবহৃত হয়েছে।

অতএব bīja:

  • Manda-phala নয়;
  • Śīghra-phala নয়;
  • Final longitude-এ ইচ্ছামতো degree যোগ নয়;
  • একটি documented mean-motion/epoch correction profile;
  • কোন body/parameter-এ কত unit প্রয়োগ হয়েছে তা প্রকাশযোগ্য হওয়া উচিত।

Kyoto pancanga3.14-এর add_bija() port করলে exact body keys, sign ও integer units অপরিবর্তিত রাখুন। C# dictionary-তে value-এর unit comment/XML metadata-তে লিখুন; শুধু “+31” দেখালে সেটি degree, arcminute, revolution count না internal unit—বোঝা যায় না।

এই project-এ তিনটি correction profile

ProfileScopeপ্রয়োগ
Classical Baseমূল Surya Siddhanta constantsHistorical ও reproducible baseline
Classical Bījapancanga3.14 add_bija()-এর documented adjustmentsTraditional engine-এর নির্ধারিত সব সংশ্লিষ্ট calculations
Modern Sankranti Star Fit১৯৪৭+ Saṅkrānti ও Bengali month/date onlyPrinted modern Panjika alignment

তৃতীয় profile-কে “classical bīja” বলা উচিত নয়। এটি আপনার empirical month-specific modern fit; নাম, cutoff, table version এবং evidence আলাদাভাবে report করতে হবে।

Modern Sankranti Star Correction table

Solar monthবাংলা মাসyr["star"] delta
Meṣaবৈশাখ+31
Vṛṣabhaজ্যৈষ্ঠ+20
Mithunaআষাঢ়+23
Karkaṭaশ্রাবণ+48
Siṃhaভাদ্র+51
Kanyāআশ্বিন+39
Tulāকার্তিক+33
Vṛścikaঅগ্রহায়ণ+39
Dhanuপৌষ+43
Makaraমাঘ+32
Kumbhaফাল্গুন+30
Mīnaচৈত্র+34

Selected cutoff: Gregorian year 1947। ১৯৪৭-এর আগে base/classical profile; ১৯৪৭ ও পরে month-specific fit। Boundary year, table version এবং fit source output metadata-তে লিখুন।

Scope lock: এই table কেবল Saṅkrānti instant ও সেই instant-নির্ভর Bengali date/month boundary-তে। Tithi, yoga, karana, nakshatra, Moon, অন্যান্য planet position, eclipse বা historical data-তে নয়।

C# isolation architecture

১. Solar month এবং immutable table

public enum SolarMonth
{
    Mesha = 0, Vrishabha = 1, Mithuna = 2, Karkata = 3,
    Simha = 4, Kanya = 5, Tula = 6, Vrischika = 7,
    Dhanu = 8, Makara = 9, Kumbha = 10, Mina = 11
}

public static class ModernSankrantiStarFit
{
    public const int CutoffGregorianYear = 1947;
    public const string Version = "modern-star-fit-1947-v1";

    static readonly int[] DeltaBySolarMonth = {
        31, 20, 23, 48, 51, 39, 33, 39, 43, 32, 30, 34
    };

    public static bool Applies(int gregorianYear)
    {
        return gregorianYear >= CutoffGregorianYear;
    }

    public static int Delta(SolarMonth month)
    {
        return DeltaBySolarMonth[(int)month];
    }
}

২. Shared dictionary কখনও mutate করবেন না

static IDictionary<string, double> CloneConstants(
    IDictionary<string, double> source)
{
    return new Dictionary<string, double>(
        source, StringComparer.OrdinalIgnoreCase);
}

static IDictionary<string, double> ConstantsForSankranti(
    IDictionary<string, double> baseConstants,
    int gregorianYear,
    SolarMonth month)
{
    IDictionary<string, double> copy =
        CloneConstants(baseConstants);

    if (ModernSankrantiStarFit.Applies(gregorianYear))
        copy["star"] = copy["star"] +
            ModernSankrantiStarFit.Delta(month);

    return copy;
}

Global yr dictionary-তে delta যোগ করে পরে বাদ দেওয়া thread-safe নয়। Exception ঘটলে value restore নাও হতে পারে। Clone-per-calculation সবচেয়ে পরিষ্কার; performance দরকার হলে immutable prebuilt ১২-profile cache ব্যবহার করুন।

৩. Scope-specific service boundary

public SankrantiResult FindSankranti(
    int gregorianYear,
    SolarMonth month,
    PanchangaRequest request)
{
    IDictionary<string, double> constants =
        ConstantsForSankranti(
            _baseYearConstants, gregorianYear, month);

    return _solarBoundaryEngine.Find(
        gregorianYear, month, request, constants);
}

public ClassicalResult CalculatePanchanga(
    PanchangaRequest request)
{
    // No Modern Sankranti Star Fit here.
    return _classicalEngine.Calculate(
        request, _baseYearConstants);
}

Bengali date service মাসের start boundary পাবে FindSankranti() থেকে। কিন্তু sunrise tithi/nakshatra engine সরাসরি unmodified classical constants ব্যবহার করবে।

৪. Trace metadata

public sealed class SankrantiCorrectionTrace
{
    public string Profile { get; set; }
    public string Version { get; set; }
    public int CutoffYear { get; set; }
    public int GregorianYear { get; set; }
    public SolarMonth SolarMonth { get; set; }
    public int StarDelta { get; set; }
    public bool Applied { get; set; }
}

Daily Details ও “ঐতিহাসিক সংক্রান্তি যাচাই” page-এ trace দেখান। Historical year-এ Applied=false, delta display ০; modern year-এ month-specific value।

৫. Base বনাম fit comparison

public sealed class SankrantiComparison
{
    public SankrantiResult Classical { get; set; }
    public SankrantiResult ModernFit { get; set; }
    public TimeSpan Difference { get; set; }
}

public SankrantiComparison Compare(
    int year, SolarMonth month, PanchangaRequest request)
{
    SankrantiResult classical = _solarBoundaryEngine.Find(
        year, month, request, _baseYearConstants);
    SankrantiResult fitted = FindSankranti(year, month, request);

    return new SankrantiComparison {
        Classical = classical,
        ModernFit = fitted,
        Difference = fitted.InstantUtc - classical.InstantUtc
    };
}

Bengali year শুরুর Mean Planet report

Report instant হবে ঐ Bengali year-এর Meṣa Saṅkrānti। Modern production year হলে fitted Meṣa instant report anchor হতে পারে; কিন্তু ঐ instant-এ mean ও true planets গণনা করতে unmodified classical planetary constants ব্যবহার করুন। এতে time selection ও planetary model আলাদা থাকে।

প্রস্তাবিত sections

  1. Bengali year ও dual Julian/Gregorian date;
  2. Meṣa Saṅkrānti local time, UTC ও Julian Day;
  3. Saṅkrānti profile: classical না modern fit;
  4. Modern star delta ও version;
  5. Abda-pinda;
  6. Dinabrinda/Ahargaṇa;
  7. Deshāntara correction;
  8. Classical bīja table/flags;
  9. Mean Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn;
  10. Mean apogee/node/śīghrocca parameters;
  11. Manda ও śīghra correction trace;
  12. Final traditional true longitudes.
public YearlyMeanPlanetReport BuildYearReport(
    int bengaliYear,
    DesktopLocation location)
{
    int approximateGregorianYear = bengaliYear + 593;
    SankrantiResult mesha = FindSankranti(
        approximateGregorianYear,
        SolarMonth.Mesha,
        RequestTemplate(location));

    // Planetary calculation remains classical/unmodified.
    ClassicalTrace trace = _classicalEngine.CalculateTraceAt(
        mesha.InstantUtc,
        location,
        _baseYearConstants);

    return YearlyMeanPlanetReport.From(
        bengaliYear,
        mesha,
        trace,
        BuildCorrectionTrace(
            approximateGregorianYear, SolarMonth.Mesha));
}

bengaliYear + 593 শুধু search seed। Exact year mapping ও historical calendar label আপনার existing BengaliCalendarGridService/Mesha finder থেকে resolve করুন; final date কখনও এই arithmetic alone দিয়ে স্থির করবেন না।

Deshāntara কোথায়?

Deshāntara reference meridian ও local longitude-এর time correction। এটি planet-এর revolution number বা bīja নয়। Report-এ আলাদা line দিন:

Deshāntara time ≈ longitude difference × ৪ minutes per degree

Traditional reference, east/west sign ও unit engine অনুযায়ী লিখুন। Modern time-zone offset-কে deshāntara নামে দেখাবেন না।

Swiss Ephemeris-এর সঙ্গে comparison

Swiss result comparison table useful, কিন্তু model replacement নয়। প্রতি body-র জন্য রাখুন:

  • Traditional mean longitude;
  • Traditional true longitude;
  • Swiss tropical longitude;
  • Swiss Lahiri nirayana longitude;
  • Traditional true − Swiss Lahiri signed difference;
  • Same JD UT/TT, geocentric/topocentric এবং flags.

Mean traditional longitude-কে Swiss true longitude-এর সঙ্গে directly “error” বলা বৈজ্ঞানিকভাবে ঠিক নয়; তারা আলাদা model stage। Compare true-to-true অথবা mean-to-corresponding mean model।

API/XML profile

{
  "calculation_profile": {
    "classical_constants": "surya-siddhanta-pancanga-3.14",
    "classical_bija": true,
    "sankranti_fit": "modern-star-fit-1947-v1",
    "sankranti_fit_applied": true,
    "sankranti_star_delta": 31,
    "planetary_fit_applied": false
  },
  "epoch_trace": {
    "julian_day_ut": "...",
    "abda_pinda": "...",
    "dinabrinda": "...",
    "ahargana": "...",
    "deshantara": "..."
  },
  "planets": [
    {
      "key": "sun",
      "mean_longitude": "...",
      "manda_correction": "...",
      "sighra_correction": null,
      "true_longitude": "..."
    }
  ]
}

String ellipsis schema illustration; output নয়। Numerical values raw decimal/rational form এবং formatted degree—দুটিতে রাখা ভালো।

Validation checklist

  1. Base constants immutable;
  2. Classical bīja profile named;
  3. Modern fit profile named separately;
  4. Modern cutoff exactly 1947;
  5. 1946 fit not applied;
  6. 1947 fit applied;
  7. Meṣa delta +31;
  8. Vṛṣabha delta +20;
  9. Mithuna delta +23;
  10. Karkaṭa delta +48;
  11. Siṃha delta +51;
  12. Kanyā delta +39;
  13. Tulā delta +33;
  14. Vṛścika delta +39;
  15. Dhanu delta +43;
  16. Makara delta +32;
  17. Kumbha delta +30;
  18. Mīna delta +34;
  19. Table length exactly ১২;
  20. Base dictionary unchanged after fitted call;
  21. Exception leaves base unchanged;
  22. Parallel calls do not leak month delta;
  23. Tithi unchanged by modern fit;
  24. Nakshatra unchanged;
  25. Yoga unchanged;
  26. Karana unchanged;
  27. Moon longitude unchanged;
  28. Other planet longitudes unchanged;
  29. Eclipse calculation unchanged;
  30. Historical Saṅkrānti uses base;
  31. Modern Saṅkrānti uses selected delta;
  32. Bengali month start uses same Saṅkrānti;
  33. Daily page and test page agree;
  34. Mean longitude normalized;
  35. Manda anomaly normalized;
  36. Manda sign rule tested by quadrant;
  37. Śīghra sequence preserved;
  38. Sun/Moon single-manda path;
  39. Planet multi-stage path;
  40. No intermediate rounding;
  41. Ahargaṇa raw value reported;
  42. Abda-pinda raw value reported;
  43. Dinabrinda raw value reported;
  44. Deshāntara sign documented;
  45. Mesha report instant traceable;
  46. Planet constants unmodified at report instant;
  47. Swiss comparison same JD;
  48. Swiss comparison same ayanāṃśa;
  49. API/XML profile complete;
  50. Table version in cache key;
  51. Regression snapshots retained.

সাধারণ ভুল

ভুলফলসমাধান
Mean-কে true labelভুল scientific meaningStage-specific labels
Bīja-কে final degree offsetAlgorithm ভেঙে যায়Documented parameter layer
Global yr["star"] mutateThread ও scope leakageClone/immutable profile
Modern fit সব calculation-এTithi ও planets অনিচ্ছায় বদলে যায়Sankranti-only service
Historical year-এ 1947 fitResearch baseline নষ্টExplicit cutoff
Correction unit না লেখাTable পুনরুৎপাদন অসম্ভবInternal-unit metadata
Mean vs Swiss true “error”অসম stage comparisonTrue-to-true compare

উপসংহার

মধ্যগ্রহ uniform mean-motion model-এর অবস্থান; স্পষ্টগ্রহ manda ও śīghra equations-এর পরে traditional corrected অবস্থান। Bīja-saṃskāra mean-motion বা epoch parameter সংশোধনের ঐতিহাসিক উপায়—এটি orbital equation বা arbitrary final offset নয়।

আপনার Modern Sankranti Star Correction একটি আলাদা empirical publication profile: ১৯৪৭ ও পরের বছরে মাসভিত্তিক yr["star"] delta, কেবল Saṅkrānti ও Bengali date-এর জন্য। Base constants clone করে এই service-এ fit প্রয়োগ করলে Tithi, Nakshatra, Yoga, Karana, Moon, planets ও historical research অক্ষত থাকে।

Yearly Mean Planet report-এ fitted Meṣa Saṅkrānti-কে time anchor হিসেবে নেওয়া যেতে পারে; কিন্তু ঐ instant-এর mean/true planets unmodified classical planetary model দিয়ে গণনা করুন। Profile, version, delta ও every intermediate trace প্রকাশ করলেই result যাচাইযোগ্য থাকবে।

তথ্যসূত্র ও আরও পাঠ

  1. Sūrya-Siddhānta English translation; mean এবং true places, manda ও śīghra procedures.
  2. Ebenezer Burgess—Translation of the Sūrya-Siddhānta; complete public-domain edition.
  3. Kyoto Sangyo University Pancanga 3.14; Surya Siddhanta ও Pañcasiddhāntikā selectable calculation implementation.
  4. Cidambi, Montelle & Plofker—Astronomical handbooks in 16th-century South Asia; mean motion ও bīja-correction analysis.
  5. Positional Astronomy Centre—Bīja Corrections; mean Sūrya-Siddhānta longitude ও modern correction comparison.
  6. সূর্য সিদ্ধান্ত পঞ্জিকা project specification; ১৯৪৭ cutoff, ১২-month Modern Sankranti Star Fit এবং scope-isolation policy.

মন্তব্য, আলোচনা ও প্রশ্ন