3 বাই 3 ম্যাট্রিক্সের বিপরীতটি সন্ধান করুন


22

চ্যালেঞ্জ

a, b, c, d, e, f, g, h, iবর্গ ম্যাট্রিক্সের সাথে অনুরূপ ইনপুট হিসাবে নয়টি সংখ্যা দেওয়া হয়েছে :

এম=(একটিআমি)

ম্যাট্রিক্সের বিপরীতটি খুঁজুন, এম - 1 Findএম-1 এবং এর উপাদানগুলি আউটপুট করুন।

বিপরীতমুখী ম্যাট্রিক্স

3 দ্বারা 3 ম্যাট্রিক্সের বিপরীতটি নীচের সমীকরণটি মেনে চলে:

এমএম-1=এম-1এম=আমি=(100010001)

এবং হিসাবে গণনা করা যেতে পারে:

এম-1=1Det(এম)সিটি

যেখানে হল কোফ্যাক্টরের ম্যাট্রিক্স:সি

সি=(আমি--আমি--আমিএকটিআমি--একটি--একটিএকটি-)

আর এর TRANSPOSE হয় সি :CTC

CT=(eifhchbibfcefgdiaicgcdafdhegbgahaebd)

আর এর নির্ধারক হয় এম :det(M)M

Det(এম)=একটি(আমি-)-(আমি-)+ +(-)

কাজের উদাহরণ

উদাহরণস্বরূপ, ধরা যাক ইনপুটটি 0, -3, -2, 1, -4, -2, -3, 4, 1। এটি ম্যাট্রিক্সের সাথে মিলে যায়:

M=(032142341)

প্রথমত, আসুন গণনা করা যাক উপরের সূত্রটি ব্যবহার করে নির্ধারক হিসাবে পরিচিত:

det(M)=0(4×1(2)×4)(3)(1×1(2)×3)+(2)(1×4(4)×3)=1

পরবর্তী কফ্যাক্টরগুলির ম্যাট্রিক্স গণনা করা যাক:

C=(4×1(2)×4(1×1(2)×3)1×4(4)×3(3×1(2)×4)0×1(2)×3(0×4(3)×3)3×2(2)×4(0×2(2)×1)0×4(3)×1)

=(458569223)

তারপরে আমাদের পেতে (সারি এবং কলামগুলি ফ্লিপ করুন) করতে হবেC:CT

CT=(452562893)

পরিশেষে, আমরা উল্টোটি এটির মতো খুঁজে পেতে পারি:

M1=1det(M)CT=11(452562893)=(452562893)

সুতরাং আউটপুট হবে 4, -5, -2, 5, -6, -2, -8, 9, 3

বিধি

  • প্রদত্ত ম্যাট্রিক্সের সর্বদা একটি বিপরীত (অর্থাত্ অ-একবচন) থাকবে। ম্যাট্রিক্স স্ব-বিপরীত হতে পারে

  • প্রদত্ত ম্যাট্রিক্স সর্বদা 9 পূর্ণসংখ্যার সাথে 3 বাই 3 ম্যাট্রিক্সে থাকবে

  • ইনপুটটিতে থাকা সংখ্যাগুলি সর্বদা পরিসরের পূর্ণসংখ্যায় থাকবে 1000n1000

  • দশমিক বা ভগ্নাংশ হিসাবে ম্যাট্রিক্সের অ-পূর্ণসংখ্যার উপাদানগুলি দেওয়া যেতে পারে

উদাহরণ

Input > Output
1, 0, 0, 0, 1, 0, 0, 0, 1 > 1, 0, 0, 0, 1, 0, 0, 0, 1
0, -3, -2, 1, -4, -2, -3, 4, 1 > 4, -5, -2, 5, -6, -2, -8, 9, 3
1, 2, 3, 3, 1, 2, 2, 1, 3 > -1/6, 1/2, -1/6, 5/6, 1/2, -7/6, -1/6, -1/2, 5/6
7, 9, 4, 2, 7, 9, 3, 4, 5 > -1/94, -29/94, 53/94, 17/94, 23/94, -55/94, -13/94, -1/94, 31/94

জয়লাভ

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

উত্তর:


18

এমএটিএল , 54 বাইট

th3LZ)t,3:q&XdpswP]w-lw/GtY*tXdsGXdsUw-IXy*2/+GtXds*-*

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

কেবল এটি আকর্ষণীয় রাখতে, এটি করার জন্য ইনবিল্ট ম্যাট্রিক্স বিভাগ বা নির্ধারক ফাংশন ব্যবহার করবেন না।

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

সররাস বিক্ষোভের বিধি

এবং কেলে – হ্যামিল্টন সূত্রটি ব্যবহার করে অ্যাডজুগেট (ট্রান্সপোজড কোফ্যাক্টর ম্যাট্রিক্স) ।

adj(A)=12((trA)2trA2)I3AtrA+A2.

Commented code:

% Finding determinant
th    % concatenate the matrix to itself sideways
3LZ)  % chop off the last column (since the Rule of Sarrus doesn't need it)
t     % duplicate this matrix (say S)
,     % do this twice:
  3:q&Xd  % get the first three diagonals of S
  ps      % multiply each diagonal's values and add the results
  wP      % switch and flip the matrix (to get the popposing diagonals next time)
]w    % close loop, switch to have correct order of sums
-     % subtract - we now have the determinant
lw/   % invert that

% Finding adjugate using Cayley–Hamilton formula
GtY*  % A^2 term (last term of the formula)
tXds  % trace(A^2) for term 1 of formula
GXdsU % (trace(A))^2 for term1 of formula
w-    % (trace(A))^2 - trace(A^2)
IXy*  % multiply that by the identity matrix
2/    % divide that by 2 - term 1 complete
+
GtXds* % A*trA for term 2 of formula
-      % subtract to get adj(A)

*      % multiply by the inverse of determinant we found earlier
       % implicit output

We could go even more insane purer by replacing the matrix multiplication GtY* done for A2, with something like 3:"Gt!@qYS*!s] 3$v t&v 3:K-&Xd (Try it on MATL Online).

The more direct and obvious way:

4 bytes

-1Y^

Try it online!

(-1 byte thanks to @Luis Mendo.)

-1 - Push the literal -1

Y^ - Raise input to that power (implicit input, implicit output)


Interesting, I never knew it was called the “Rule of Sarrus”. My teacher taught us it, but he had made it up himself while at uni.
Beta Decay

@LuisMendo Thanks, replaced the short version (tbh the previous version was just a blind implementation of the MATL manual's suggestion for inverse, no actual thinking went into that one :) ). For the long version, I think it's a tiny bit clearer to leave it as such, enough to be worth taking a 1 byte hit.
sundar - Reinstate Monica

1
@sundar Heh, I didn't even remember that suggestion. I'll add the suggestion of matrix power too
Luis Mendo


9

R, 51 35 27 8 5 bytes

solve

Try it online!

First go at doing one of these golf challenges. Sorry if my formatting is wrong!

Saved a total additional 11 bytes thanks to Giuseppe! Saved an additional 19 bytes thanks to JAD!


5
Welcome to PPCG!
Beta Decay

Removed the parameter variable names from the matrix function which subtracted 16 bytes!
Robert S.

1
Nice! You can remove most of the variables to save bytes since you're really just chaining the operations together: try it online!
Giuseppe

1
If you're going to use solve, the solution is just solve, as it fulfills all the requirements of the question. It takes a matrix as input and returns a matrix.
JAD


4

Jelly, 3 bytes

æ*-

Try it online!

Assuming we can take input and provide as a 2D list of integers. If a flat list of integers is really required for both input and output, then this works for 6 bytes.


Explanation (I don't think it's worth including in the answer): æ* - matrix exponentiation, - - exponent, which equals 1. - is a syntax character for negative literals but it defaults to 1 when there is no number right after it.
Mr. Xcoder

12
Comments aren't necessarily meant to be long lived. If you're including an explanation in the comments, you should move it to the answer instead.
Poke

4

JavaScript (ES6), 123 bytes

Saved 2 bytes thanks to @Mr.Xcoder
Saved 1 byte thanks to @ETHproductions

Takes input as 9 distinct values.

(a,b,c,d,e,f,g,h,i)=>[x=e*i-h*f,c*h-b*i,b*f-c*e,y=f*g-d*i,a*i-c*g,d*c-a*f,z=d*h-g*e,g*b-a*h,a*e-d*b].map(v=>v/=a*x+b*y+c*z)

Try it online!


আরে, আমি এখন অন্তর্নির্মিত ম্যাট্রিক্স ফাংশনগুলিকে অনুমতি দিয়েছি। এটি হ'ল, জেএসের যদি কোনও হয়
বিটা ডেকে

@ বেটাডেকে জেএস-এর একটিও নেই। :-)
আর্নল্ড

এই বন্ধনীগুলি কি সত্যিই প্রয়োজন?
মিঃ এক্সকোডার




1

পাইথন 3, 77 বাইট

import numpy
lambda l:(numpy.matrix(l).reshape(-1,3)**-1).ravel().tolist()[0]

ফ্ল্যাট তালিকা হিসাবে ইনপুট নেয়।

ইনপুটটিকে 2 ডি অ্যারে হিসাবে নেওয়া হলে এটি 63 বাইট:

import numpy
lambda l:(numpy.matrix(l)**-1).ravel().tolist()[0]






0

ক্লোজার, 165 বাইট

(fn[a b c d e f g h i](let[M map C(M -(M *[e f d c a b b c a][i g h h i g f d e])(M *[f d e b c a c a b][h i g i g h e f d]))](for[i C](/ i(apply +(M *[a b c]C))))))

আমি দুঃখিত যে এই সিটিকে ট্রান্সপোসে আউটপুট দেয় এবং এই মুহূর্তে এটি ঠিক করার জন্য আমি দীর্ঘ চরিত্রের ক্রমগুলি পুনরায় করতে অলস বোধ করছি।


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