কোফ্যাক্টর ম্যাট্রিকেস


18

কোফ্যাক্টর ম্যাট্রিক্স হ'ল অ্যাডজুগেট ম্যাট্রিক্সের স্থানান্তর । এই ম্যাট্রিক্সের উপাদানগুলি হ'ল মূল ম্যাট্রিক্সের কফ্যাক্টর

কোফ্যাক্টর এখানে চিত্র বর্ণনা লিখুন(অর্থাত্ সারি আই এবং কলাম জে কোফ্যাক্টর ম্যাট্রিক্সের উপাদান) মূল ম্যাট্রিক্স থেকে ith সারি এবং জেথ কলাম মুছে ফেলা সাবমেট্রিক্সের নির্ধারক, (-1) by (i + j) দ্বারা গুণিত।

উদাহরণস্বরূপ, ম্যাট্রিক্সের জন্য

এখানে চিত্র বর্ণনা লিখুন

সারি 1 এবং কলাম 2 এ কোফ্যাক্টর ম্যাট্রিক্সের উপাদানটি হ'ল:

এখানে চিত্র বর্ণনা লিখুন

ম্যাট্রিক্সের নির্ধারক কী এবং এখানে কীভাবে গণনা করা যায় সে সম্পর্কে আপনি তথ্য সন্ধান করতে পারেন ।

চ্যালেঞ্জ

আপনার লক্ষ্যটি একটি ইনপুট ম্যাট্রিক্সের কোফ্যাক্টর ম্যাট্রিক্স আউটপুট করা।

দ্রষ্টব্য : বিল্ট-ইনগুলি যা কোফ্যাক্টর ম্যাট্রিক্স, বা অ্যাডজুয়েট ম্যাট্রিক্স, বা নির্ধারক বা অনুরূপ কিছু অনুমোদিত

ইনপুট

ম্যাট্রিক্সটি কোনও কমান্ড লাইন আর্গুমেন্ট হিসাবে, কোনও ফাংশন প্যারামিটার হিসাবে, STDINবা যে কোনও উপায়ে আপনি যে ভাষাটি ব্যবহার করেন তার পক্ষে উপযুক্ত may

ম্যাট্রিক্স তালিকাগুলির তালিকা হিসাবে ফর্ম্যাট হবে, প্রতিটি সাবলিস্ট এক সারি অনুসারে, যাতে বাম থেকে ডানে ক্রমান্বিত উপাদান রয়েছে। তালিকায় শীর্ষ থেকে নীচে সারিগুলি অর্ডার করা হয়।

উদাহরণস্বরূপ, ম্যাট্রিক্স

a b
c d

দ্বারা প্রতিনিধিত্ব করা হবে [[a,b],[c,d]]

আপনি বর্গাকার বন্ধনী থেকে অন্য কিছুর সঙ্গে কমা প্রতিস্থাপন করতে পারি যদি এটা আপনার ভাষা ফিট করে এবং বুদ্ধিমানের (যেমন ((a;b);(c;d)))

ম্যাট্রিকগুলিতে কেবল পূর্ণসংখ্যা থাকবে (যা নেতিবাচক হতে পারে)

ম্যাট্রিকগুলি সর্বদা বর্গক্ষেত্র (যেমন সারি এবং কলামের একই সংখ্যার) হবে।

আপনি ধরে নিতে পারেন ইনপুটটি সর্বদা সঠিক হবে (অর্থাত্ কোনও বিন্যাসের সমস্যা নেই, পূর্ণসংখ্যা ব্যতীত অন্য কিছুই নয়, খালি ম্যাট্রিক্স নেই)।

আউটপুট

ফলস্বরূপ কোফ্যাক্টর ম্যাট্রিক্সের সাথে আউটপুট হতে পারে STDOUT কোনও ফাংশন থেকে ফিরিয়ে দেওয়া, কোনও ফাইলে লিখিত, বা আপনার ব্যবহার করা ভাষার জন্য প্রাকৃতিকভাবে ।

কোফ্যাক্টর ম্যাট্রিক্স অবশ্যই ঠিক একইভাবে ফর্ম্যাট করতে হবে ইনপুট ম্যাট্রিকগুলি যেমন দেওয়া হয়, যেমন [[d,-c],[-b,a]]। আপনি যদি একটি স্ট্রিং পড়ে থাকেন তবে আপনাকে অবশ্যই মেন্রিক্সের ইনপুটটির মতো ম্যাট্রিক্স ফর্ম্যাট করা একটি স্ট্রিং অবশ্যই আউটপুট / আউটপুট করতে হবে। আপনি যদি ইনপুট হিসাবে তালিকার তালিকার মতো কিছু ব্যবহার করেন তবে আপনাকে অবশ্যই তালিকার একটি তালিকাও ফিরিয়ে দিতে হবে।

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

  • ইনপুট: [[1]]

আউটপুট: [[1]]

  • ইনপুট: [[1,2],[3,4]]

আউটপুট: [[4,-3],[-2,1]]

  • ইনপুট: [[-3,2,-5],[-1,0,-2],[3,-4,1]]

আউটপুট: [[-8,-5,4],[18,12,-6],[-4,-1,2]]

  • ইনপুট: [[3,-2,7,5,0],[1,-1,42,12,-10],[7,7,7,7,7],[1,2,3,4,5],[-3,14,-1,5,-9]]

আউটপুট:

[[9044,-13580,-9709,23982,-9737],[-1981,1330,3689,-3444,406],[14727,7113,2715,-9792,414],[-28448,-2674,-707,16989,14840],[-2149,2569,-2380,5649,-3689]]

স্কোরিং

এটি তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর w


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

1
সংক্ষেপে: আপনি যদি একটি স্ট্রিং পড়েন, তবে আপনাকে অবশ্যই স্ট্রিংটি আউটপুট দিতে হবে / যাতে আউটপুটটির মতো ম্যাট্রিক্স ফর্ম্যাট হবে। যদি আপনি যেমন তালিকার তালিকার মতো কিছু ব্যবহার করেন তবে আপনাকে অবশ্যই তালিকার একটি তালিকাও ফিরিয়ে দিতে হবে।
ফ্যাটালাইজ করুন

1x1 ম্যাট্রিক্সে আসলেই একটি কোফ্যাক্টর ম্যাট্রিক্স থাকে?
লিয়াম

এছাড়াও আপনার পেনাল্টিমেট পরীক্ষার কেসটি অ্যাজুগেট ম্যাট্রিক্স (এটি কী হওয়া উচিত তা ট্রান্সপোজ) বলে মনে হচ্ছে, যদি না আমি ভুল করি।
লিয়াম

@ আইএনহাজহ্যাটস সঠিক, আমি এটি স্থির করেছি, ধন্যবাদ।
815

উত্তর:


1

জে, 29 বাইট

3 :'<.0.5+|:(-/ .**%.)1e_9+y'

একই অ্যাপসিলন / বিপরীত / নির্ধারক কৌশল ডান থেকে বাম:

  • 1e_9+ একটি এপসিলন যোগ করে,
  • (-/ .**%.)হয় নির্ধারক ( -/ .*) বার বিপরীত (%. ),
  • |: transposes,
  • <.0.5+ চক্রের।

5

মতলব, 42 33 বাইট

বেনামে ফাংশন ব্যবহার করা:

@(A)round(inv(A+eps)'*det(A+eps))

ইনপুট এবং আউটপুট হ'ল ম্যাট্রিক (2 ডি সংখ্যার অ্যারে)।

epsম্যাট্রিক্স একক হওয়ার ক্ষেত্রে যুক্ত করা হয়। এটি ব্যবহার করে "মুছে ফেলা হয়েছে"round (আসল ফলাফলটি পূর্ণসংখ্যা হিসাবে নিশ্চিত হয়)।

উদাহরণ:

>> @(A)round(inv(A+eps)'*det(A+eps))
ans = 
    @(A)round(inv(A+eps)'*det(A+eps))
>> ans([-3,2,-5; -1,0,-2; 3,-4,1])
ans =
-8    -5     4
18    12    -6
-4    -1     2

একক ম্যাট্রিক্স সহ উদাহরণ:

>> @(A)round(inv(A+eps)'*det(A+eps))
ans = 
    @(A)round(inv(A+eps)*det(A+eps)')
>> ans([1,0 ; 0,0])
ans =
     0     0
     0     1

অথবা অষ্টাভে এটি অনলাইন চেষ্টা করুন


2
তবে আমার একটি উদ্বেগ আছে যে আমি চ্যালেঞ্জের বিষয়ে কথা বলিনি: এই উত্তরটি ধরে নেওয়া হয় যে ইনপুট ম্যাট্রিক্সটি অবিচ্ছিন্ন is আপনার কোডটি বলার সাথে সাথে [1,0 ; 0,0]আউটপুট করার সময় একটি ত্রুটি দেয়[0,0 ; 0,1]
16:58

1
যেহেতু আপনি কোনও ফাংশন থেকে ফিরে আসছেন, তাই আপনার প্রয়োজন হওয়া উচিত বলে আমি মনে করি না mat2str: "ফলস্বরূপ কোফ্যাক্টর ম্যাট্রিক্স হতে পারে ... কোনও ফাংশন থেকে ফিরে আসতে হবে"
ফ্রাইআম দ্য এজিগম্যান

1
@ ফ্রাইএইমডিজম্যান ধন্যবাদ! তবে " ইনফোন ম্যাট্রিক্সগুলি ঠিক একইভাবে ফর্ম্যাট করতে হবে " কোফ্যাক্টর ম্যাট্রিক্স । সে কারণেই আমার মনে হয় আমার দরকারmat2str
লুইস মেন্ডো

1
@ ফ্যাটালাইজ হ্যাঁ, এটি। epsপ্রায় 1e-16। সুতরাং এটি ম্যাট্রিক্সকে অ-একবিন্দু করে তোলে (তবে খুব অসুস্থ শর্তযুক্ত)। ফলাফলটি ঠিক পূর্ণসংখ্যার নয়; সুতরাং fix(শূন্যের দিকে গোলাকার) এটি স্থির করে। ত্রুটিটি অতিক্রম না করে তবে এই কাজ করে .5। আমি আশঙ্কা করছি যে কোনও গ্যারান্টি নেই। খুব বড় পূর্ণসংখ্যার ক্ষেত্রে এটি ব্যর্থ হতে পারে। আমি বলেছিলাম এটি একটি নোংরা কৌশল :
লুইস মেন্ডো

1
@ পরিষ্কার করার জন্য ফ্যাটালাইজ করুন, আপনি কি mat2strএখানে বলতে হবে কিনা তা বলতে পারবেন ? আমার কাছে মনে হচ্ছে এটি যেহেতু এটি একটি ফাংশন, তাই ইনপুটটি আসলে অরক্ষিত ম্যাট্রিক্স। আপনি যদি চেষ্টা করেন f=...তবে এটি করুন f(f(...))এটি কার্যকর হবে না, তবে অপসারণ mat2strসেই কাজটিকে সূক্ষ্ম করে তোলে।
FryAmTheEggman

4

গণিত, 27 35 বাইট

Thread[Det[#+x]Inverse[#+x]]/.x->0&

এটি কি অ-পরিবর্তনীয় ম্যাট্রিকগুলির জন্য কাজ করে, যেমন [[1,0],[0,0]]?
মারাত্মক করুন

@FryAmTheEggman- এ কাজ করছে বলে মনে হচ্ছে না।
LegionMammal978

3

আর, 121 94 বাইট

function(A)t(outer(1:(n=NROW(A)),1:n,Vectorize(function(i,j)(-1)^(i+j)*det(A[-i,-j,drop=F]))))

এটি একটি অযৌক্তিকভাবে দীর্ঘ ফাংশন যা শ্রেণীর কোনও বস্তু গ্রহণ করে matrixএবং এই জাতীয় আরেকটি বস্তু প্রদান করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

Ungolfed:

cofactor <- function(A) {
    # Get the number of rows (and columns, since A is guaranteed to
    # be square) of the input matrix A
    n <- NROW(A)

    # Define a function that accepts two indices i,j and returns the
    # i,j cofactor
    C <- function(i, j) {
        # Since R loves to drop things into lower dimensions whenever
        # possible, ensure that the minor obtained by column deletion
        # is still a matrix object by adding the drop = FALSE option
        a <- A[-i, -j, drop = FALSE]

        (-1)^(i+j) * det(a)
    }

    # Obtain the adjugate matrix by vectorizing the function C over
    # the indices of A
    adj <- outer(1:n, 1:n, Vectorize(C))

    # Transpose to obtain the cofactor matrix
    t(adj)
}

এরmapply পরিবর্তে 80 বাইট ব্যবহার করছে outerএবংVectorize
জিউসেপ

2

GAP , 246 বাইট

আপনি বলতে পারেন এটি ট্রিপল নেস্টড লুপসের দ্বারা কোডিং ভাল।

এটা বেশ সোজা। অন্যান্য গণিতমুখী ভাষাগুলি ম্যাট্রিকগুলি মোকাবেলা করার জন্য জিএপি-তে আসলে একই সরঞ্জাম নেই। এখানে কেবলমাত্র ব্যবহৃত জিনিসটি নির্ধারক অপারেটর অন্তর্নির্মিত।

f:=function(M)local A,B,i,j,v;A:=StructuralCopy(M);if not Size(M)=1 then for i in [1..Size(M)] do for j in [1..Size(M)] do B:=StructuralCopy(M);for v in B do Remove(v,j);od;Remove(B,i);A[i][j]:= (-1)^(i+j)*DeterminantMat(B);od;od;fi;Print(A);end;

ungolfed:

f:=function(M)
    local A,B,i,j,v;
    A:=StructuralCopy(M);
    if not Size(M)=1 then
        for i in [1..Size(M)] do
            for j in [1..Size(M)] do
                B:=StructuralCopy(M);
                for v in B do
                    Remove(v,j);
                od;
                Remove(B,i);
                 A[i][j]:= (-1)^(i+j)*DeterminantMat(B);
            od;
        od;
    fi;
    Print(A);
end;

1

ভার্বোসিটি ভি 2 , 196 বাইট

IncludeTypePackage<Matrix>
IncludeTypePackage<OutputSystem>
print=OutputSystem:NewOutput<DEFAULT>
input=Matrix:Adjugate<ARGV0>
input=Matrix:Transpose<input>
OutputSystem:DisplayAsText<print;input>

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

এনবি: বর্তমানে টানার অপেক্ষায় টিআইও-তে কাজ করছেন না। অফলাইনে কাজ করা উচিত

((a b)(c d))প্রতিনিধিত্ব করতে ফর্ম ইনপুট লাগে

[একটি]

অ্যাডজুগেটের জন্য বিল্টিন থাকা সত্ত্বেও ভার্বোসিটির ভারবোসিটি এখনও এটিকে বিকল করে। এটি কীভাবে কাজ করে তা মোটামুটি বেসিক, কেবল ইনপুটটির সংযোজন স্থানান্তর করে।

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