একটি পূর্ণসংখ্যা ম্যাট্রিক্স নির্ধারণকারী


34

ইনপুট হিসাবে একটি বর্গ পূর্ণসংখ্যার ম্যাট্রিক্স দেওয়া হয়েছে, ম্যাট্রিক্সের নির্ধারকটিকে আউটপুট দেয়।

বিধি

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

পরীক্ষার মামলা

[[42]] -> 42
[[2, 3], [1, 4]] -> 5
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] -> 0
[[13, 17, 24], [19, 1, 3], [-5, 4, 0]] -> 1533
[[372, -152, 244], [-97, -191, 185], [-53, -397, -126]] -> 46548380
[[100, -200, 58, 4], [1, -90, -55, -165], [-67, -83, 239, 182], [238, -283, 384, 392]] -> 571026450
[[432, 45, 330, 284, 276], [-492, 497, 133, -289, -28], [-443, -400, 56, 150, -316], [-344, 316, 92, 205, 104], [277, 307, -464, 244, -422]] -> -51446016699154
[[416, 66, 340, 250, -436, -146], [-464, 68, 104, 471, -335, -442], [159, -407, 310, -489, -248, 370], [62, 277, 446, -325, 47, -193], [460, 460, -418, -28, 234, -374], [249, 375, 489, 172, -423, 125]] -> 39153009069988024
[[-246, -142, 378, -156, -373, 444], [186, 186, -23, 50, 349, -413], [216, 1, -418, 38, 47, -192], [109, 345, -356, -296, -47, -498], [-283, 91, 258, 66, -127, 79], [218, 465, -420, -326, -445, 19]] -> -925012040475554
[[-192, 141, -349, 447, -403, -21, 34], [260, -307, -333, -373, -324, 144, -190], [301, 277, 25, 8, -177, 180, 405], [-406, -9, -318, 337, -118, 44, -123], [-207, 33, -189, -229, -196, 58, -491], [-426, 48, -24, 72, -250, 160, 359], [-208, 120, -385, 251, 322, -349, -448]] -> -4248003140052269106
[[80, 159, 362, -30, -24, -493, 410, 249, -11, -109], [-110, -123, -461, -34, -266, 199, -437, 445, 498, 96], [175, -405, 432, -7, 157, 169, 336, -276, 337, -200], [-106, -379, -157, -199, 123, -172, 141, 329, 158, 309], [-316, -239, 327, -29, -482, 294, -86, -326, 490, -295], [64, -201, -155, 238, 131, 182, -487, -462, -312, 196], [-297, -75, -206, 471, -94, -46, -378, 334, 407, -97], [-140, -137, 297, -372, 228, 318, 251, -93, 117, 286], [-95, -300, -419, 41, -140, -205, 29, -481, -372, -49], [-140, -281, -88, -13, -128, -264, 165, 261, -469, -62]] -> 297434936630444226910432057


ম্যাট্রিক্সের সর্বাধিক আকার রয়েছে যা সমর্থন করা প্রয়োজন বা এটি নির্বিচারে?
টেলর স্কট

1
@ টেলরস্কট প্রথম বিধি তালিকাভুক্ত:You may assume that all elements in the matrix, the determinant of the matrix, and the total number of elements in the matrix are within the representable range of integers for your language.
মেগো

4
আপনি জানেন যে আপনার কাছে একটি আকর্ষণীয় চ্যালেঞ্জ রয়েছে যখন আপনি 4 জেলি উত্তর ক্রমাগত একে অপরকে গলফ করে
চলেছেন

উত্তর:


25

জেলি , 15 বাইট

LŒ!ðŒcIṠ;ị"Pð€S

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

LŒ!ðŒcIṠ;ị"Pð€S   input
L                 length
 Œ!               all_permutations
   ð        ð€    for each permutation:
    Œc                take all unordered pairs
      I               calculate the difference between
                      the two integers of each pair
       Ṡ              signum of each difference
                      (positive -> 1, negative -> -1)
        ;             append:
         ị"             the list of elements generated by taking
                        each row according to the index specified
                        by each entry of the permutation
           P          product of everything
              S   sum

এটি কেন কাজ করে - ম্যাথি সংস্করণ

অপারেটর ডিট একটি ম্যাট্রিক্স নেয় এবং একটি স্কেলার ফিরিয়ে দেয়। একটি এন বাই এন ম্যাট্রিক্স একটি সংগ্রহ হিসাবে ভাবা যেতে পারে এন দৈর্ঘ্যের ভেক্টর এন , তাই Det সত্যিই একটি ফাংশন যা লাগে এন ℤ থেকে ভেক্টর এন এবং আয় স্কেলের।

অতএব, আমি ডিট [ ভি 1 ভি 2 ভি 3 ... ভি এন ] এর জন্য ডিট ( 1 , ভি 2 , ভি 3 , ..., ভি এন ) লিখছি ।

লক্ষ করুন যে, Det প্রতিটি যুক্তি রৈখিক, অর্থাত্ Det ( বনাম 1 + + λ W 1 , V 2 , V 3 , ..., বনাম এন ) = Det ( বনাম 1 , V 2 , V 3 , ..., বনাম এন ) + λ ডিট ( ডাব্লু 1 , ভি 2 , ভি 3 , ..., ভি এন ) সুতরাং এটি (ℤ n ) থেকে ℤ পর্যন্ত লিনিয়ার মানচিত্র ℤ line n এর

রৈখিক মানচিত্রের নীচে ভিত্তির চিত্র নির্ধারণ করা যথেষ্ট suff এর (ℤ ভিত্তিতে এন ) এন নিয়ে গঠিত এন ℤ ভিত্তিতে উপাদানের ধা টেন্সর পণ্য এন , ieeg ই 5 ⊗ ই 3 ⊗ ই 1 ⊗ ই 5 ⊗ ই 1 । টেনসর পণ্যগুলিতে অভিন্ন টেনারগুলি অন্তর্ভুক্ত করতে অবশ্যই শূন্য প্রেরণ করতে হবে, যেহেতু একটি ম্যাট্রিক্সের নির্ধারক যেখানে দুটি কলাম সমান হয় শূন্য। স্বতন্ত্র ভিত্তির উপাদানগুলির টেনসর পণ্যগুলি কী পাঠানো হয় তা যাচাই করা অবশেষ remains টেনসর প্রোডাক্টে ভেক্টরগুলির সূচকগুলি একটি বাইজিকেশন গঠন করে, যেমন একটি ক্রমশক্তি, যেখানে এমনকি অনুমতিগুলি 1-তে প্রেরণ করা হয় এবং বিজোড় আদেশগুলি -1 এ প্রেরণ করা হয়।

উদাহরণস্বরূপ, [[[1, 2], [3, 4]] এর নির্ধারকটি সন্ধান করার জন্য: নোটগুলি [1, 3] এবং [2, 4] হ'ল নোট করুন। (1 ই 1 + 3 ই 2 ) এবং (2 ই 1 + 4 ই 2 ) দিতে আমরা [1, 3] পচন করি । টেনসর পণ্যের সাথে সম্পর্কিত উপাদানটি হ'ল (1 ই 1 ⊗ 2 ই 1 + 1 ই 1 ⊗ 4 ই 2 + 3 ই 2 ⊗ 2 ই 1 + 3 ই 2 ⊗ 4 ই 2 ), যা আমরা সরলকরণ করি (2 ই 1 ⊗ ই 1 + 4 ই 1 ⊗ ই 2 + 6 ই 2 ⊗ ই 1 + 12 ই 2 ⊗ ই 2)। অতএব:

det [[1, 2], [3, 4]]
= বিট (1 ই 1 + 3 ই 2 , 2 ই 1 + 4 ই 2 )
= ডিট (2 ই 1 ⊗ ই 1 + 4 ই 1 ⊗ ই 2 + 6 ই 2 ⊗ ই 1 + 12 ই 2 ⊗ ই 2 )
= ডিট (2 ই 1 ⊗ ই 1 ) + ডিট (4 ই 1 ⊗ ই 2 ) + ডিট (6 ই 2 ⊗ ই 1 ) + ডিট (12 ই2 ⊗ ই 2 )
= 2 Det (ঙ 1 ⊗ ই 1 ) +4 Det (ঙ 1 ⊗ ই 2 ) + + 6 Det (ঙ 2 ⊗ ই 1 ) + + 12 Det (ঙ 2 ⊗ ই 2 )
= 2 (0) + 4 (1) + 6 (-1) + 12 (0)
= 4 - 6
= -2

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

উদাহরণস্বরূপ, অনুগাম 3614572 এ 9 বিপর্যয় রয়েছে (31, 32, 61, 64, 65, 62, 42, 52, 72), সুতরাং অনুমতিটি বিজোড়।

যৌক্তিকতাটি হ'ল প্রতিটি প্রতিস্থাপন (দুটি উপাদানকে অদলবদল করা হয়) হয় একটি বিবর্তন যুক্ত করে বা একটি বিবর্তন সরিয়ে নিয়ে যায়, বিপর্যয়ের সংখ্যার সমতুল্যতা অদলবদল করে, এবং আদেশের অনুপাত হ'ল অনুমানের প্রাপ্তির জন্য প্রয়োজনীয় সংক্রমণের সংখ্যার সমতা হয়।

অতএব, উপসংহারে, আমাদের সূত্রটি প্রদান করেছেন:

এটি কেন কাজ করে - অ-মথি সংস্করণ

যেখানে σ 𝕊 একটি বিন্যাস হয় এন সমস্ত একাধিক বিন্যাসন গ্রুপ এন অক্ষর, এবং SGN বিন্যাস চিহ্ন, ওরফে হয় (-1) বিন্যাস এর সমতা উত্থাপিত, এবং একটি IJ (হয় IJ ) তম মধ্যে এন্ট্রি ম্যাট্রিক্স ( আমি নিচে, j পেরিয়ে)


17
সেই "অ-ম্যাথিক সংস্করণ" বেশ জঘন্য ম্যাথি।
এমডি এক্সএফ

6
@ এমডিএক্সএফ সূত্র এবং চিহ্ন এবং সংখ্যাগুলি গণিতকে খুব কমই গঠন করে। গণিত হ'ল বিমূর্ততা এবং সাধারণীকরণ এবং প্রতীকগুলির আনুষ্ঠানিক হেরফেরগুলির পিছনে যুক্তি।
Leaky নুন

7
@ জ্যাব জেলি নিজস্ব কাস্টম কোড পৃষ্ঠাটি প্রয়োগ করে । (এই দিনগুলির মধ্যে একটিতে, টিআইও কোড পৃষ্ঠাতে একটি লিঙ্ক অন্তর্ভুক্ত করবে ...)
সম্পূর্ণরূপে

1
@ মিগো "ডায়াগোনাল-পণ্যগুলির যোগফল" কেবল 1x1, 2x2 এবং 3x3 ম্যাট্রিকের জন্য কাজ করে। বড় ম্যাট্রিকের জন্য, আপনাকে সমস্ত ক্রম এবং তাদের সমতা বিবেচনা করতে হবে।
লিকি নুন

3
প্রকৃতপক্ষে +1 বলার পরিবর্তে পোস্টে প্রমাণ অন্তর্ভুক্ত করুন "কারণ এই সূত্রটি abcxyz পৃষ্ঠায় তালিকাবদ্ধ রয়েছে এটি অবশ্যই সত্য হতে হবে"।
ব্যবহারকারী 202729

11

আর , 3 বাইট

মামুলি সমাধান

det

এটি অনলাইন চেষ্টা করুন!

আর , 94 92 বাইট

পুনরায় বাস্তবায়িত সমাধান

জারকো ডাবডেলডাম আউটগল্ফড

d=function(m)"if"(x<-nrow(m),m[,1]%*%sapply(1:x,function(y)(-1)^(y-1)*d(m[-y,-1,drop=F])),1)

এটি অনলাইন চেষ্টা করুন!

ম্যাট্রিক্সের প্রথম কলামটি অপ্রাপ্তবয়স্কদের দ্বারা পুনরাবৃত্তভাবে প্রসারিত ব্যবহার করে।

f <- function(m){
 x <- nrow(m)                 # number of rows of the matrix
 if(sum(x) > 1){              # when the recursion reaches a 1x1, it has 0 rows
                              # b/c [] drops attributes
  minor <- function(y){
   m[y] * (-1)^(y-1) *
   d(m[-y,-1])                # recurse with the yth row and first column dropped
   }
  minors <- sapply(1:x,minor) # call on each row
  sum(minors)                 # return the sum
 } else {
  m                           # return the 1x1 matrix
 }
}



9

জেলি , 16 15 12 10 বাইট

Ḣ×Zß-Ƥ$Ṛḅ-

ল্যাপ্লেস এক্সপেনশন ব্যবহার করে । মাইলকে 3 5 বাইট বন্ধ করে দেওয়ার জন্য ধন্যবাদ !

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

Ḣ×Zß-Ƥ$Ṛḅ-  Main link. Argument: M (matrix / 2D array)

Ḣ           Head; pop and yield the first row of M.
      $     Combine the two links to the left into a monadic chain.
  Z         Zip/transpose the matrix (M without its first row).
   ß-Ƥ      Recursively map the main link over all outfixes of length 1, i.e., over
            the transpose without each of its rows.
            This yields an empty array if M = [[x]].
 ×          Take the elementwise product of the first row and the result on the
            right hand. Due to Jelly's vectorizer, [x] × [] yields [x].
       Ṛ    Reverse the order of the products.
        ḅ-  Convert from base -1 to integer.
                [a]          -> (-1)**0*a
                [a, b]       -> (-1)**1*a + (-1)**0*b = b - a
                [a, b, c]    -> (-1)**2*a + (-1)**1*b + (-1)**0*c = c - b + a
                etc.

8

ওল্ফ্রাম ল্যাঙ্গুয়েজ (ম্যাথমেটিকা) , 14 থেকে 42 বাইটের মধ্যে

আমাদের মধ্যে একটি 3-বাইট অন্তর্নির্মিত এবং একটি 53-বাইট সমাধান রয়েছে যা বিল্ট-ইনগুলি পুরোপুরি এড়িয়ে চলে so সুতরাং এর মধ্যবর্তী কোথাও কিছু অযৌক্তিক সমাধান এখানে দেওয়া হয়েছে।

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

1##&@@Diagonal@Last@JordanDecomposition@#&

নির্ধারকটি বহুগুণ সহ একটি ম্যাট্রিক্সের ইগেনভ্যালুগুলির পণ্যের সমান। ভাগ্যক্রমে, ওল্ফ্রামের ইগেনুয়ালু ফাংশনটি বহুগুণকে ট্র্যাক করে রাখে (এমনকি অ-তির্যক ম্যাট্রিকগুলির জন্যও), সুতরাং আমরা নিম্নলিখিত 20 বাইট সমাধান পাই :

1##&@@Eigenvalues@#&

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

#~Wronskian~1&

(ক্যাসোরিয়ান নির্ধারণকারী আরও 1 বাইটের জন্যও কাজ করে #~Casoratian~1&:)

বিমূর্ত বীজগণিতের ক্ষেত্রে, একটি এন  x  এন ম্যাট্রিক্সের নির্ধারক (মানচিত্র কে → কে হিসাবে নির্ধারক দ্বারা গুণিত হিসাবে বিবেচিত) ম্যাট্রিক্সের n তম বাহ্যিক শক্তি (একটি বিস্মরণকে বেছে নেওয়ার পরে কে ⋀ ⋀ n কে n )। ওল্ফ্রামের ভাষায়, আমরা নিম্নলিখিত 26 বাইট দিয়ে এটি করতে পারি :

HodgeDual[TensorWedge@@#]&

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

RegionMeasure@Parallelepiped[Last@#,#]&

1
এই লাইনগুলির সাথে আমার যে সমাধানটি হয়েছিল Exp@*Tr@*MatrixLogতা ছিল , তবে দুর্ভাগ্যক্রমে এটি একক ম্যাট্রিক্সের জন্য কাজ করে না।
মিশা লাভরভ

1
@ মিশা লাভরভ ওহ, এতো চালাক! আমি মনে করি আপনি এটি দিয়ে ঠিক করতে পারেন Check[E^Tr@MatrixLog@#,0]&
একটি গাছ নয়

দারুণ! আমি Checkআগে সচেতন ছিলাম না ।
মিশা লাভরভ

1
আমি কিছুক্ষণ আগে জর্ডান পচনের জন্য একটি চ্যালেঞ্জ তৈরি করেছি । আপনিও এতে আগ্রহী হতে পারেন। কি দুর্দান্ত উত্তর!
মেগো

8

হাস্কেল , 71 বাইট

-3 বাইট ধন্যবাদ লিনকে। আর একজন ধূলিকণা দিয়ে ক্রেগ রায়কে ধন্যবাদ জানায়।

f[]=1
f(h:t)=foldr1(-)[v*f[take i l++drop(i+1)l|l<-t]|(i,v)<-zip[0..]h]

এটি অনলাইন চেষ্টা করুন! অপ্টিমাইজেশনের উদ্দেশ্যে পতাকা যুক্ত -Oকরা হয়েছে। এটি র কোন দরকার নাই.

ব্যাখ্যা (পুরানো)

f পুনরাবৃত্তভাবে কোফ্যাক্টর সম্প্রসারণ প্রয়োগ করে।

f[[x]]=x

এই লাইনটি 1 × এর বেস কেসটি কভার করে × 1 ম্যাট্রিক্সের ক্ষেত্রে নির্ধারক mat[0, 0]

f(h:t)=

এটি ম্যাট্রিক্সকে মাথায় ভাঙ্গতে হাস্কেলের প্যাটার্ন মিলটি ব্যবহার করে (প্রথম সারিতে) এবং একটি লেজকে (ম্যাট্রিক্সের বাকী অংশ ) ।

          [                                     |(i,v)<-zip[0..]h]

ম্যাট্রিক্সের মাথা গণনা করুন (পুরো সংখ্যার এবং মাথার অসীম তালিকাটি জিপ করে) এবং এটিতে পুনরাবৃত্তি করুন।

           (-1)*i*v

ফলাফল নির্ধারণকারীর গণনাতে বিকল্প সংযোজন এবং বিয়োগফল জড়িত থাকার পরেও এর সূচকটি কিনা তার উপর ভিত্তি করে ফলাফলটি নেগেট করুন।

                     [take i l++drop(i+1)l|l<-t]

এটি প্রাথমিকভাবে আই উপাদানগুলি নিয়ে এবং প্রথম (i + 1) তম দিয়ে সারির সাথে যুক্ত করে লেজের আইথ কলামটি সরিয়ে দেয় লেজের প্রতিটি সারির জন্য উপাদানগুলির সাথে ফেলে দেওয়া ।

                   *f

উপরের ফলাফলের নির্ধারক গণনা করুন এবং ফলাফলের সাথে এটির গুণ করুন (-1)*i*v

       sum

উপরের তালিকার ফলাফলের যোগফল এবং এটি ফিরিয়ে দিন।


2
আপনি যদি এর sum[(-1)^i*...সাথে প্রতিস্থাপন করেন তবে 1 বাইট সংরক্ষণ করতে পারবেনfoldr(-)0[...
ক্রেগ রায়

6

প্রোটন , 99 বাইট

f=m=>(l=len(m))==1?m[0][0]:sum((-1)**i*m[0][i]*f([[m[k][j]for k:1..l]for j:0..l if j-i])for i:0..l)

এটি অনলাইন চেষ্টা করুন!

-৩ বাইটস মিঃ এক্সকোডারকে ধন্যবাদ
ধন্যবাদ -৩ বাইট ধন্যবাদ এরিক দ্য আউটগল্ফারকে

প্রথম সারিতে প্রসারিত


প্রোটনের নির্ধারকের জন্য অন্তর্নির্মিতা নেই বলেই।
ব্যবহারকারী 202729


এছাড়াও বা এর j!=iসাথে প্রতিস্থাপন করে 102 বাইট । j-ii-j
মিঃ এক্সকোডার


হ্যাঁ, ধন্যবাদ!
হাইপারনিউটারিনো

5

অক্টাভা , 28 বাইট

@(x)round(prod(diag(qr(x))))

এটি অনলাইন চেষ্টা করুন!

এই ব্যবহারের কিউ পচানি একটি ম্যাট্রিক্স এর এক্স একটি orthgonal ম্যাট্রিক্স মধ্যে প্রশ্ন এবং একটি ঊর্ধ্ব ত্রিদলীয় ম্যাট্রিক্স আরএক্স এর নির্ণায়ক হ'ল Q এবং R এর পণ্য । অরথোগোনাল ম্যাট্রিক্সের ইউনিট নির্ধারক থাকে এবং ত্রিভুজাকার ম্যাট্রিক্সের জন্য নির্ধারকটি তার তির্যক এন্ট্রিগুলির পণ্য। qrএকক আউটপুট সহ কল ​​করা অষ্টাভের ফাংশনটি আর দেয় ।

ফলাফলটি নিকটতম পূর্ণসংখ্যার সাথে গোল হয়। বৃহত ইনপুট ম্যাট্রিক্সের জন্য, ভাসমান-পয়েন্টের অপ্রাপ্তিগুলি ত্রুটি ছাড়িয়ে যেতে পারে 0.5এবং এর ফলে একটি ভুল ফলাফল তৈরি হতে পারে ।


1
এটি detবিল্টিনকে এড়িয়ে যাওয়ার একটি আকর্ষণীয় উপায় । ;)
টমসডিং

1
@ টমসমিডিং :-) এছাড়াও, এটি ইতিমধ্যে স্টিভির উত্তরে
লুইস মেন্ডো


5

সি,  176  125 বাইট

42 বাইট গল্ফ করার জন্য @ সেলিংক্যাটকে ধন্যবাদ, এবং প্রতিটি লাইটে একটি বাইট সংরক্ষণের জন্য @ লিন এবং @ জোনাথন ফ্রেঞ্চ উভয়কে ধন্যবাদ!

d(M,n)int*M;{int i=n--,s=*M*!n,c,T[n*n];for(;i--;s+=M[i]*(1-i%2*2)*d(T,n))for(c=n*n;c--;T[c]=M[n-~c+c/n+(c%n>=i)]);return s;}

প্রথম সারিতে ল্যাপ্লেস প্রসারণ ব্যবহার করে নির্ধারক গণনা করে ।

এটি অনলাইন চেষ্টা করুন!

Unrolled:

d(M, n)int*M;
{
    int i=n--, s=*M*!n, c, T[n*n];
    for (; i--; s+=M[i]*(1-i%2*2)*d(T,n))
        for (c=n*n; c--;)
            T[c] = M[n-~c+c/n+(c%n>=i)];
    return s;
}

(i%2*-2+1)One (1-i%2*2)আরও একটি বাইট সংরক্ষণ করে।
লিন

n+1+cহতে পারে n-~c
জোনাথন ফ্রেচ

এর i=sপরিবর্তে পরামর্শ দিনreturn s
সিলিংক্যাট

5

জেলি , 43 বাইট

অবশেষে আমি আমার অ-বিল্টিন সলিউশনটি একটি গল্ফের ভাষায় লিখেছি!

ḣ⁹’’¤;ṫḊ€Ç×⁸ị@⁹’¤¤ḷ/¤
çЀ⁸J‘¤µJ-*×NS
ÇḢḢ$Ṗ?

বাইট সংরক্ষণের জন্য হাইপারনিউট্রিনোকে ধন্যবাদ !

এটি অনলাইন চেষ্টা করুন! (স্পষ্টতার জন্য ব্যবধানযুক্ত কোড)

তালিকা থেকে n'th উপাদানগুলি সরিয়ে ফেলতে মারাত্মক দীর্ঘ পথ, পরে উন্নতি হবে


এই উত্তরটি হাইপার নিউট্রিনো, ডেনিস এবং লিকি নুনের উত্তরগুলিতে ছড়িয়ে পড়েছিল। জেলি গল্ফিংয়ের ভাষা হিসাবে খুব জনপ্রিয়।

দ্রুত ব্যাখ্যা:

ÇḢḢ$Ṗ?    Main link.
     ?    If
    Ṗ     after remove the last element, the value is not empty (truthy)
Ç         then execute the last link
 ḢḢ$      else get the element at index [1, 1].

çЀ⁸J‘¤µJ-*×NS     Helper link 1, take input as a matrix.
çЀ                Apply the previous link, thread right argument to
   ⁸J‘¤            the range [2, 3, ..., n+1]
       µ           With the result,
        J-*        generate the range [-1, 1, -1, 1, ...] with that length
           ×N      Multiply by negative
             S     Sum

ḣ⁹’’¤;ṫḊ€Ç×⁸ị@⁹’¤¤ḷ/¤    Helper link 2, take left input as a matrix, right input as a number in range [2..n+1]
ḣ
 ⁹’’¤                    Take head ρ-2 of the matrix
     ;                   concatenate with 
      ṫ                  tail ρ (that is, remove item ρ-1)
       Ḋ€                Remove first column
         Ç               Calculate determinant of remaining matrix
          ×         ¤    multiply by
                  ḷ/     the first column,
            ị@           row #
              ⁹’¤        ρ-1 (just removed in determinant calculation routine) of
           ⁸     ¤       the matrix.

4

জেলি , 24 বাইট

œcL’$ṚÑ€
J-*×Ḣ€×ÇSµḢḢ$Ṗ?

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

œcL’$ṚÑ€         Helper Link; get the next level of subdeterminants (for Laplace Expansion)
œc               Combinations without replacement of length:
  L’$            Length of input - 1 (this will get all submatrices, except it's reversed)
     Ṛ           Reverse the whole thing
      р         Get the determinant of each of these
J-*×Ḣ€×ÇSµḢḢ$Ṗ?  Main Link
              ?  If the next value is truthy
             Ṗ   Remove the last element (truthy if the matrix was at least size 2)
J-*×Ḣ€×ÇSµ       Then expand
          ḢḢ$    Otherwise, get the first element of the first element (m[0][0] in Python)
J                [1, 2, ..., len(z)]
 -*              (-1 ** z) for each z in the length range
   ×             Vectorizing multiply with
    Ḣ€           The first element of each (this gets the first column); modifies each row (makes it golfier yay)
      ×Ç         Vectorizing multiply with the subdeterminants
        S        Sum

-2 বাইট ব্যবহারকারী 202729 এর সমাধান ধন্যবাদ


4

এমএটিএল , 3 বাইট / 5 বাইট

অন্তর্নির্মিত ফাংশন সহ

&0|

এটি অনলাইন চেষ্টা করুন!

অন্তর্নির্মিত ছাড়া

মিশা লাভরভকে একটি ভুল নির্দেশ করার জন্য ধন্যবাদ , এখন সংশোধন করা হয়েছে

YvpYo

এটি অনলাইন চেষ্টা করুন!

এটি নির্ধারকটিকে ইগেনভ্যালুগুলির পণ্য হিসাবে গণনা করে, ভাসমান-পয়েন্টের ভুলগুলি এড়াতে নিকটতম পূর্ণসংখ্যার সাথে গোল করে।

Yv       % Implicit input. Push vector containing the eigenvalues
p        % Product
Yo       % Round. Implicit display

একক মানগুলির পণ্যটি আপনাকে কেবল নির্ধারকের পরম মানটি বলতে পারে না?
মিশা লাভরভ

@ মিশা লাভরভ আপনি পুরোপুরি ঠিক বলেছেন! লক্ষ্য করার জন্য ধন্যবাদ। আমি একক মানগুলির পরিবর্তে ইগেনভ্যালু ব্যবহার করে এটি সংশোধন করেছি ... এবং এটি 4 বাইট সংরক্ষণ করেছে \ o /
লুইস মেন্ডো


3

অক্টোটা , 30 বাইট

@(x)-prod(diag([~,l,~]=lu(x)))

এটি অনলাইন চেষ্টা করুন!

বা, বিরক্তিকর 4 বাইট সমাধান (6 বাটস লুইস মেন্ডোকে ধন্যবাদ (বিল্টিন ফাংশনগুলির সাথে সম্পর্কিত বিধিগুলি ভুলে গেছেন) সংরক্ষণ করেছেন):

@det

ব্যাখ্যা:

এরপর! :)


3

টিআই-বেসিক, 2 বাইট

det(Ans

আহ ভালো.

দয়া করে তুচ্ছ উত্তরগুলি উত্সাহিত করবেন না।

একটি উচ্চ বিদ্যালয়ের শিক্ষার্থী হিসাবে (যিনি এই ক্যালকুলেটরগুলির একজনের মালিক হতে বাধ্য হন), এই ফাংশন হেল্লা দরকারী তাই ...


8
এটি কলেজে এখনও হেলা দরকারী - লিনিয়ার বীজগণিতটি যায় না
টেলর স্কট

5
@ টেলরস্কোট বাস্তবে, এটি ডিফারেনশিয়াল সমীকরণের প্রতিশোধ নিয়ে ফিরে আসে।
মেগো

@ মেগো - আপনি ঠিক সেদিকেই আছেন; যদিও কোনও কারণে তারা আমাকে সমস্ত হিসাব এবং লিনিয়ারের আগে নিতে দেয়: /
টেলর স্কট

1
@ টেলরস্কোটাট আমার বিশ্ববিদ্যালয়ের গণিত বিভাগের তদারকির কারণে, লিনালগ যখন আমি এটি গ্রহণ করতাম তখন তার জন্য পূর্বের প্রয়োজন ছিল না। আমার অধ্যাপক যখন বুঝতে পারলেন, তিনি দ্রুত আমাদেরকে লিনালগে 3 দিনের ক্র্যাশ কোর্স দিয়েছিলেন।
মেগো

3

হাস্কেল, 62 বাইট

a#((b:c):r)=b*d(a++map tail r)-(a++[c])#r
_#_=0
d[]=1
d l=[]#l

এটি অনলাইন চেষ্টা করুন! (@ সম্পূর্ণমানুষের সমাধান থেকে নেওয়া পরীক্ষার কেস সহ পাদলেখ।)

dপ্রথম কলাম বরাবর একটি ল্যাপ্লেস প্রসারণ ব্যবহার করে নির্ধারককে গণনা করে। স্থায়ী চেয়ে তিন বাইট বেশি প্রয়োজন ।


3

পাইথন 2 , 95 বাইট

-12 বাইট লিনকে ধন্যবাদ জানায়।

আমার হাস্কেল উত্তর বন্দর ।

f=lambda m:sum((-1)**i*v*f([j[:i]+j[i+1:]for j in m[1:]])for i,v in enumerate(m[0]))if m else 1

এটি অনলাইন চেষ্টা করুন!


1
এখানেও আপনি []একটি বেস কেস হিসাবে ব্যবহার করতে পারেন : f=lambda m:sum((-1)**i*v*f([j[:i]+j[i+1:]for j in m[1:]])for i,v in enumerate(m[0]))if m else 195 বাইটের জন্য!
লিন


3

ওল্ফ্রাম ভাষা (গণিত) , 53 52 বাইট

1##&@@@(t=Tuples)@#.Signature/@t[Range@Tr[1^#]&/@#]&

এটি অনলাইন চেষ্টা করুন!

দুর্ভাগ্যক্রমে, n ম্যাট্রিক্স দ্বারা একটি এন এর নির্ধারককে এইভাবে গণনা করা O ( n n) ব্যবহার করে ) মেমরি ব্যবহার করে, যা বড় পরীক্ষার কেসগুলিকে নাগালের বাইরে রাখে।

কিভাবে এটা কাজ করে

প্রথম অংশটি, 1##&@@@(t=Tuples)@#প্রদত্ত ম্যাট্রিক্সের প্রতিটি সারি থেকে একটি পদটির সমস্ত সম্ভাব্য পণ্যগুলি গণনা করে। t[Range@Tr[1^#]&/@#]যার দৈর্ঘ্যের উপাদানগুলি সেই জাতীয় দৈর্ঘ্যের একটি তালিকা দেয় যা বলা হয় {3,2,1}বা {2,2,3}বলা হয় যে আমরা প্রতিটি পণ্যটির সাথে সম্পর্কিত পণ্যটির জন্য যে সারিতে প্রবেশ করেছি।

আমরা Signatureদ্বিতীয় তালিকার জন্য আবেদন করি , যা এমনকি নির্গতকরণগুলিতে এমনকি 1বিজোড় অনুমতিগুলিও মানচিত্র করে-1 এবং এর করে 0। এটি যথাযথভাবে সহগ যার সাথে সংশ্লিষ্ট পণ্য নির্ধারকটিতে উপস্থিত হয়।

অবশেষে, আমরা দুটি তালিকার বিন্দু পণ্য গ্রহণ।


এমনকি Signatureযদি বিল্ট-ইন খুব বেশি হয় তবে আমরা 73 বাইট নিতে পারি

1##&@@@(t=Tuples)@#.(1##&@@Order@@@#~Subsets~{2}&/@t[Range@Tr[1^#]&/@#])&

এটি দ্বারা প্রতিস্থাপন 1##&@@Order@@@#~Subsets~{2}&। আদেশের সমস্ত জোড়া উপাদানগুলির প্রয়োগের Signatureপণ্য গ্রহণ করে একটি সম্ভাব্য-ক্রমশক্তিগুলির Orderএই গণনাগুলি। Orderদেব 1যদি জোড়া আরোহী অনুক্রম হল -1যদি এটা অবরোহী, এবং 0যদি তারা সমান।


-1 বাইট @ ইউজার 202729 ধন্যবাদ


1
52 বাইট (যদি আপনি এই ম্যাথমেটিকা ​​গল্ফিং টিপটি জানেন না)
ব্যবহারকারী 202729

আমি করেছি, তবে কোনওভাবে এখানে এটি ভুলে গেছি। ধন্যবাদ!
মিশা লাভরভ

3

পাইথন 3 , 238 বাইট , 227 বাইট , 224 বাইট , 216 বাইট

from functools import*
from itertools import*
r=range;n=len;s=sum
f=lambda l:s(reduce(lambda p,m:p*m,[l[a][b]for a,b in zip(r(n(l)),j)])*(-1)**s(s(y<j[x]for y in j[x:])for x in r(n(l)))for j in permutations(r(n(l))))

এটি অনলাইন চেষ্টা করুন!

আমার সমাধান গণনার জন্য একটি নির্ধারকের সংজ্ঞা ব্যবহার করে। দুর্ভাগ্যক্রমে, এই অ্যালগরিদমের জটিলতা n!এবং আমি শেষ পরীক্ষার উত্তীর্ণটি প্রদর্শন করতে পারি না, তবে তত্ত্বের ক্ষেত্রে এটি সম্ভব।


3

সিজেএম ( 50 45 বাইট)

{:A_,{1$_,,.=1b\)/:CAff*A@zf{\f.*1fb}..-}/;C}

এটি একটি বেনামে ব্লক (ফাংশন) যা স্ট্যাকের উপর একটি 2D অ্যারে নেয় এবং স্ট্যাকের উপর একটি পূর্ণসংখ্যা ছেড়ে যায়।

অনলাইন পরীক্ষা স্যুট

ব্যবচ্ছেদ

এটি ফাদদেব-লেভেরিয়ার অ্যালগোরিদম প্রয়োগ করে এবং আমি মনে করি যে এই পদ্ধতির গ্রহণ করা এটিই প্রথম উত্তর।

উদ্দেশ্যটি হল সহগের হিসাব করা এর বৈশিষ্ট্যযুক্ত বহুত্বের এন×এন জরায়ু একজন,

পি(λ)Det(λআমিএন-একজন)=Σ=0এনλ
যেখানে, স্পষ্টতই, এন=1 এবং 0=(-1)এনDetএকজন

গুণাগুণগুলি সহায়ক ম্যাট্রিক্সের ছাপ দিয়ে উপরে থেকে নীচে থেকে পুনরাবৃত্তভাবে নির্ধারিত হয় এম,

এম00এন=1(=0)এমএকজনএম-1+ +এন-+ +1আমিএন-=-1টিR(একজনএম)=1,...,এন 

কোডটি কখনই সরাসরি কাজ করে না এন- এবং এম, কিন্তু সবসময় সঙ্গে (-1)এন- এবং (-1)+ +1একজনএমসুতরাং, পুনরাবৃত্তি হয়

(-1)এন-=1টিR((-1)+ +1একজনএম)(-1)+ +2একজনএম+ +1=(-1)এন-একজন-একজন((-1)+ +1একজনএম)

{               e# Define a block
  :A            e#   Store the input matrix in A
  _,            e#   Take the length of a copy
  {             e#     for i = 0 to n-1
                e#       Stack: (-1)^{i+2}AM_{i+1} i
    1$_,,.=1b   e#       Calculate tr((-1)^{i+2}AM_{i+1})
    \)/:C       e#       Divide by (i+1) and store in C
    Aff*        e#       Multiply by A
    A@          e#       Push a copy of A, bring (-1)^{i+2}AM_{i+1} to the top
    zf{\f.*1fb} e#       Matrix multiplication
    ..-         e#       Matrix subtraction
  }/
  ;             e#   Pop (-1)^{n+2}AM_{n+1} (which incidentally is 0)
  C             e#   Fetch the last stored value of C
}



2

সেজম্যাথ , বিভিন্ন

নির্ধারকটি যে আমাকে আকর্ষণীয় বলে মনে হয়েছিল, সমস্ত সেজেমেলে প্রোগ্রাম করা হয়েছিল তার গণনার জন্য এখানে বেশ কয়েকটি পদ্ধতি রয়েছে। তাদের সব এখানে চেষ্টা করা যেতে পারে ।

বিল্টিন, 3 বাইট

det

এটি একটি খুব আকর্ষণীয় নয়। সেজ অনেকগুলি সাধারণ ক্রিয়াকলাপকে বিশ্বব্যাপী স্তরের উপকরণ সরবরাহ করে যা সাধারণত অবজেক্টের পদ্ধতি হতে পারে, তাই এটি এর চেয়ে সংক্ষিপ্ত lambda m:m.det()


ইগেনভ্যালুগুলির পণ্যের আসল অংশ, 36 বাইট

lambda m:real(prod(m.eigenvalues()))

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


জর্দানের সাধারণ ফর্ম, 60 বাইটে ডায়াগোনালের পণ্য

lambda m:prod(m.jordan_form()[x,x]for x in range(m.nrows()))

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

যেহেতু সেজ চায় যে জর্দানের স্বাভাবিক ফর্মটি মূল ম্যাট্রিক্সের মতো একই রিংয়ের ওপরে হোক, এটি কেবলমাত্র কাজ করে যদি সমস্ত ইগ্যালভ্যালু যুক্তিযুক্ত হয়। কমপ্লেক্স ইগেনভ্যালুগুলির ফলে একটি ত্রুটির সৃষ্টি হয় (যদি না মূল ম্যাট্রিক্স রিংয়ের উপরে চলে যায় CDF(জটিল ডাবল ফ্লোট) বা SR)। তবে, এর অর্থ এই যে উপরোক্ত সমাধানের তুলনায় আসল অংশ নেওয়া প্রয়োজন নয় is


স্মিথ পচনতে ডায়াগোনালের পণ্য

lambda m:prod(m.smith_form()[0].diagonal())

জর্ডানের স্বাভাবিক ফর্মের বিপরীতে, স্মিথের স্বাভাবিক ফর্মটি মূল ম্যাট্রিক্সের মতো একই ক্ষেত্রের ওপরে গ্যারান্টিযুক্ত। ইগ্যালভ্যালুগুলি গণনা করা এবং তাদেরকে একটি ব্লক ডায়াগোনাল ম্যাট্রিক্সের সাথে প্রতিনিধিত্ব করার পরিবর্তে স্মিথ পচন ম্যাট্রিক্সের প্রাথমিক বিভাজকগুলিকে গণনা করে (এটি একটি বিষয় যা এই পোস্টের জন্য কিছুটা জটিল) এটি একটি তির্যক ম্যাট্রিক্সে রাখে Dএবং ইউনিট সহ দুটি ম্যাট্রিককে গণনা করে নির্ধারক Uএবং Vযেমন D = U*A*V( Aআসল ম্যাট্রিক্সটি কোথায় ) যেহেতু ম্যাট্রিক্সের পণ্যের নির্ধারক ম্যাট্রিক্স ( det(A*B*...) = det(A)*det(B)*...) এর নির্ধারকগুলির পণ্যের সমান হয় Uএবং Vইউনিট নির্ধারক হিসাবে সংজ্ঞায়িত হয় det(D) = det(A),। একটি তির্যক ম্যাট্রিক্সের নির্ধারকটি কেবল তির্যকটিতে থাকা উপাদানগুলির পণ্য product

ল্যাপ্লেস এক্সপেনশন, 109 বাইট

lambda m:m.nrows()>1and sum((-1)**j*m[0,j]*L(m[1:,:j].augment(m[1:,j+1:]))for j in range(m.ncols()))or m[0,0]

এটি পুনরাবৃত্তির পদ্ধতির সাহায্যে প্রথম সারিতে ল্যাপ্লেস সম্প্রসারণ করে। det([[a]]) = aবেস কেস জন্য ব্যবহৃত হয়। det([[]]) = 1বেস কেসটির জন্য এটি ব্যবহার করা আরও ছোট হওয়া উচিত , তবে সেই বাস্তবায়নে আমার প্রচেষ্টায় একটি বাগ ছিল যা আমি এখনও সন্ধান করতে পারিনি।


লাইবনিজের ফর্মুলা, 100 বাইট

L2 = lambda m:sum(sgn(p)*prod(m[k,p[k]-1]for k in range(m.ncols()))for p in Permutations(m.ncols()))

এটি সরাসরি লাইবনিজের সূত্র প্রয়োগ করে। সূত্রটির আরও ভাল ব্যাখ্যার জন্য এবং কেন এটি সম্ভবত আমি লিখতে পারি তার চেয়ে বেশি কাজ করে, এই দুর্দান্ত উত্তরটি দেখুন


e^(Tr(ln(M)))48 বাইটের রিয়েল পার্ট

lambda m:real(exp(sum(map(ln,m.eigenvalues()))))

এই ফাংশন প্রতীকী মত প্রকাশ করে। একটি সংখ্যার আনুমানিক পেতে, n(result)মুদ্রণের আগে কল করুন ।

এটি এমন একটি দৃষ্টিভঙ্গি যা আমি এখনও কাউকে ব্যবহার করতে দেখিনি। আমি এটির জন্য আরও দীর্ঘ, আরও বিশদ ব্যাখ্যা দিতে যাচ্ছি।

Aআসলগুলির উপর একটি বর্গ ম্যাট্রিক্স হওয়া যাক । সংজ্ঞা অনুসারে, নির্ধারক এর Aইগন্যাল্যুজের পণ্যের সমান A। এর ট্রেস এর ইগেনাল্যুজের Aযোগফলের সমান A। বাস্তব সংখ্যার জন্য r_1এবং r_2, exp(r_1) * exp(r_2) = exp(r_1 + r_2)। যেহেতু ম্যাট্রিক্স এক্সফেনসিয়াল ফাংশনটি স্কেলার এক্সফোনেনশিয়াল ফাংশনটির (বিশেষত পূর্ববর্তী পরিচয়টিতে) সমতুল্য হিসাবে সংজ্ঞায়িত করা হয়েছে এবং ম্যাট্রিক্স এক্সফেনসিয়ালটি ম্যাট্রিক্সকে তির্যক করে এবং তির্যকটিতে ইগেনালুয়ালে স্কেলার এক্সফেনশনাল ফাংশন প্রয়োগ করে গণনা করা যায়, তাই আমরা বলতে পারি det(exp(A)) = exp(trace(A))(গুণফল exp(λ)প্রতিটি eigenvalue জন্য λএর Aএর eigenvalues এর সমষ্টি সমান exp(A))। সুতরাং, আমরা যদি একটি ম্যাট্রিক্স এটি পেতে পারেন Lযেexp(L) = A, আমরা গণনা করতে পারি det(A) = exp(trace(L))

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


1
শেষ অংশটি আকর্ষণীয় ধারণা, তবে শিরোনাম এবং ব্যাখ্যা কোডটির সাথে মেলে না, যা কোনও ম্যাট্রিক্স লোগারিদম নেয় না। এটি স্রেফ real(prod(m.eigenvalues()))নিখরচায়
পিটার টেলর

2

জাভা 8, 266 261 259 258 বাইট

long d(int[][]m){long r=0;int i=0,j,k,l=m.length,t[][]=new int[l-1][l-1],q=m[0][0];if(l<3)return l<2?q:q*m[1][1]-m[0][1]*m[1][0];for(;i<l;r+=m[0][i]*(1-i++%2*2)*d(t))for(j=0;++j<l;)for(k=l;k-->0;){q=m[j][k];if(k<i)t[j-1][k]=q;if(k>i)t[j-1][k-1]=q;}return r;}

মা দেখুন, কোনও বিল্ড-ইন নেই .. কারণ জাভার কোনও নেই ..>।>

-7 বাইটস @ সিলিংক্যাটকে ধন্যবাদ ।

ব্যাখ্যা:

এখানে চেষ্টা করুন। (কেবলমাত্র সর্বশেষ পরীক্ষার কেসটি longআকার 2 63 -1 আকারে ফিট করতে খুব বড় )

long d(int[][]m){             // Method with integer-matrix parameter and long return-type
  long r=0;                   //  Return-long, starting at 0
  int i=0,j,k,                //  Index-integers
      l=m.length,             //  Dimensions of the square matrix
      t[][]=new int[l-1][l-1],//  Temp-matrix, one size smaller than `m`
      q=m[0][0];              //  The first value in the matrix (to reduce bytes)
  if(l<3)                     //  If the dimensions are 1 or 2:
    return l<2?               //   If the dimensions are 1:
      q                       //    Simply return the only item in it
     :                        //   Else (the dimensions are 2):
      q*m[1][1]-m[0][1]*m[1][0];
                              //    Calculate the determinant of the 2x2 matrix
                              //  If the dimensions are 3 or larger: 
  for(;i<l;                   //  Loop (1) from 0 to `l` (exclusive)
      r+=                     //    After every iteration: add the following to the result:
         m[0][i]              //     The item in the first row and `i`'th column,
         *(1-i++%2*2)         //     multiplied by 1 if `i` is even; -1 if odd,
         *d(t))               //     multiplied by a recursive call with the temp-matrix
    for(j=0;                  //   Reset index `j` to 0
        ++j<l;)               //   Inner loop (2) from 0 to `l` (exclusive)
      for(k=l;k-->0;){        //    Inner loop (3) from `l-1` to 0 (inclusive)
        q=m[j][k];            //     Set the integer at location `j,k` to reduce bytes
        if(k<i)               //     If `k` is smaller than `i`:
          t[j-1][k]=q;        //      Set this integer at location `j-1,k`
        if(k>i)               //     Else-if `k` is larger than `i`:
          t[j-1][k-1]=q;      //      Set this integer at location `j-1,k-1`
                              //     Else: `k` and `i` are equals: do nothing (implicit)
      }                       //    End of inner loop (3)
                              //   End of inner loop (2) (implicit / single-line body)
                              //  End of loop (1) (implicit / single-line body)
  return r;                   //  Return the result-long
}                             // End of method

2

জাভাস্ক্রিপ্ট (ES6), 91

পুনরাবৃত্তিমূলক ল্যাপ্লেস

q=(a,s=1)=>+a||a.reduce((v,[r],i)=>v-(s=-s)*r*q(a.map(r=>r.slice(1)).filter((r,j)=>j-i)),0)

কম গল্ফড

q = (a,s=1) => // s used as a local variable
  a[1] // check if a is a single element array 
       // if array, recursive call expanding along 1st column
  ? a.reduce((v,[r],i) => v-(s=-s)*r*q(a.map(r=>r.slice(1)).filter((r,j)=>j-i)),0) 
  : +a // single element, convert to number

পরীক্ষা

q=(a,s=1)=>+a||a.reduce((v,[r],i)=>v-(s=-s)*r*q(a.map(r=>r.slice(1)).filter((r,j)=>j-i)),0)

TestCases=`[[42]] -> 42
[[2, 3], [1, 4]] -> 5
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] -> 0
[[13, 17, 24], [19, 1, 3], [-5, 4, 0]] -> 1533
[[372, -152, 244], [-97, -191, 185], [-53, -397, -126]] -> 46548380
[[100, -200, 58, 4], [1, -90, -55, -165], [-67, -83, 239, 182], [238, -283, 384, 392]] -> 571026450
[[432, 45, 330, 284, 276], [-492, 497, 133, -289, -28], [-443, -400, 56, 150, -316], [-344, 316, 92, 205, 104], [277, 307, -464, 244, -422]] -> -51446016699154`
.split('\n')

TestCases.forEach(r=>{
  [a,k] = r.split (' -> ')
  a = eval(a)
  d = q(a)
  console.log('Test '+(k==d ? 'OK':'KO')+
    '\nMatrix '+a.join('|')+
    '\nResult '+d+
    '\nCheck  '+k)
})


একই আচরণ সহ 83 বাইট
Arnauld

অথবা খালি ম্যাট্রিক্সকে সমর্থন করার জন্য 85 বাইট (যার নির্ধারক 1 হওয়া উচিত )।
আর্নল্ড

(আমি এই উত্তরে একই অপটিমাইজেশন ব্যবহার করেছি , যা আপনার
উত্স




1

জাভা (ওপেনজেডিকে 8) , 195 192 177 বাইট

long d(int[][]m){long D=0;for(int l=m.length-1,t[][]=new int[l][l],i=0,j,k;i<=l;D+=m[0][i]*(1-i++%2*2)*(l<1?1:d(t)))for(j=0;j<l*l;)t[j/l][k=j%l]=m[1+j++/l][k<i?k:k+1];return D;}

এটি অনলাইন চেষ্টা করুন!

অন্যান্য অনেক উত্তরের মতো এটি ল্যাপ্লেস সূত্রটিও ব্যবহার করে। কিছুটা কম গল্ফযুক্ত সংস্করণ:

long d(int[][]m){
  long D=0;
  int l=m.length-1,t[][]=new int[l][l],i=0,j,k;
  for(;i<=l;)
    for(j=0;j<l*l;)
      t[j/l][k=j%l]=m[1+j++/l][k<i?k:k+1];
    D+=m[0][i]*(1-i++%2*2)*(l<1?1:d(t));
  return D;
}

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