ইগেনপেইস যাচাই করুন


21

এই চ্যালেঞ্জে আপনাকে একটি বর্গ ম্যাট্রিক্স A, একটি ভেক্টর vএবং একটি স্কেলার দেওয়া হবে λ। আপনাকে নির্ধারণ করতে হবে যে (λ, v)কোনও ইগেনপায়ারের সাথে সম্পর্কিত কিনা A; তা হচ্ছে, না হোক Av = λv

বিন্দু পণ্য

দুটি ভেক্টরের ডট পণ্য হ'ল উপাদান অনুসারে গুণনের যোগফল। উদাহরণস্বরূপ, নিম্নলিখিত দুটি ভেক্টরের ডট পণ্য হ'ল:

(1, 2, 3) * (4, 5, 6) = 1*4 + 2*5 + 3*6 = 32

নোট করুন যে ডট পণ্যটি কেবল একই দৈর্ঘ্যের দুটি ভেক্টরের মধ্যে সংজ্ঞায়িত।

ম্যাট্রিক্স-ভেক্টর গুণ

একটি ম্যাট্রিক্স হ'ল একটি 2D গ্রিড। একটি mএক্স nম্যাট্রিক্সে mসারি এবং nকলাম রয়েছে। দৈর্ঘ্যের ভেক্টর হিসাবে আমরা mএক্স nম্যাট্রিক্সটি কল্পনা করতে পারি (যদি আমরা সারিগুলি নিই)।mn

ম্যাট্রিক্স-ভেক্টর গুণকে একটি mএক্স nম্যাট্রিক্স এবং একটি আকার- nভেক্টরের মধ্যে সংজ্ঞায়িত করা হয় । যদি আমরা একটি mএক্স nম্যাট্রিক্স এবং একটি আকার- nভেক্টরকে গুণ করি তবে আমরা একটি আকার- ভেক্টর পাই miফলাফলের ভেক্টর মধ্যে -th মূল্যের ডট পণ্য iম্যাট্রিক্স -th সারি এবং মূল ভেক্টর।

উদাহরণ

        1 2 3 4 5
Let A = 3 4 5 6 7
        5 6 7 8 9

        1
        3
Let v = 5
        7
        9

যদি আমরা ম্যাট্রিক্স এবং ভেক্টরকে গুণ করি তবে আমরা Av = xনিম্নলিখিতটি পাই:

এক্স 1 = এ টি 1 * ভি /* AT1 means the first row of A; A1 would be the first column */= (1,2,3,4,5) * (1,3,5,7,9) = 1 * 1 + 2 * 3 + 3 * 5 + 4 * 7 + 5 * 9 = 1 + 6 + 15 + 28 + 45 = 95

এক্স 2 = এ টি 2 * ভি = (3,4,5,6,7) * (1,3,5,7,9) = 3 * 1 + 4 * 3 + 5 * 5 + 6 * 7 + 7 * 9 = 3 + 12 + 25 + 42 + 63 = 145

x 3 = এ টি 3 * ভি = (5,6,7,8,9) * (1,3,5,7,9) = 5 * 1 + 6 * 3 + 7 * 5 + 8 * 7 + 9 * 9 = 5 + 18 + 35 + 56 + 81 = 195

সুতরাং, আমরা পেতে Av = x = (95, 145, 195)

স্কেলার গুণ

একটি স্কেলারের (একক সংখ্যা) এবং একটি ভেক্টরকে গুণন করা কেবল উপাদান-ভিত্তিক গুণ। উদাহরণস্বরূপ 3 * (1, 2, 3) = (3, 6, 9),। এটা মোটামুটি সোজা।

ইগেনভ্যালু এবং ইগেনভেেক্টর

ম্যাট্রিক্স দেওয়া A, আমরা বলি যে λএটি সম্পর্কিত একটি ইগেনভ্যালু vএবং vএটি λ যদি হয় এবং কেবল যদি সাথে সম্পর্কিত একটি ইগেনভেক্টর Av = λv। (যেখানে Avম্যাট্রিক্স-ভেক্টর গুণ এবং λvএটি স্কেলার গুণক)।

(λ, v) একটি ইগনপায়ার।

চ্যালেঞ্জ বিশেষ উল্লেখ

ইনপুট

ইনপুটটিতে একটি ম্যাট্রিক্স, একটি ভেক্টর এবং একটি স্কেলার থাকবে। এগুলি যে কোনও যুক্তিতে কোনও যুক্তিসঙ্গত বিন্যাসে নেওয়া যেতে পারে।

আউটপুট

আউটপুট সত্যবাদী / মিথ্যা মান হবে; সত্য এবং যদি কেবলমাত্র স্কেলার এবং ভেক্টর নির্দিষ্ট ম্যাট্রিক্সের সাথে একটি আইগেনপায়ার হয়।

বিধি

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

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

 MATRIX  VECTOR  EIGENVALUE
 2 -3 -1    3
 1 -2 -1    1    1    ->    TRUE
 1 -3  0    0

 2 -3 -1    1
 1 -2 -1    1    -2   ->    TRUE
 1 -3  0    1

 1  6  3    1
 0 -2  0    0    4    ->    TRUE
 3  6  1    1

 1  0 -1    2
-1  1  1    1    7    ->    FALSE
 1  0  0    0

-4 3    1    
 2 1    2    2    ->    TRUE

2    1    2    ->    TRUE

আমি পরে 4x4 যুক্ত করব।

অপঠনযোগ্য টেস্ট কেসগুলি যা পরীক্ষার পক্ষে সহজ



ধন্যবাদ আমার কাছে মূলত স্বেচ্ছাচারিত আকারের ম্যাট্রিকগুলির জন্য একই রকম চ্যালেঞ্জ ছিল যেখানে আপনি প্রতিটি অনন্য ইগেনস্পেসের জন্য ভিত্তি গণনা করতে চেয়েছিলেন তবে এটি এখনও স্যান্ডবক্সে রয়েছে কারণ এটি খুব বিভ্রান্ত বলে মনে হয় seems
হাইপারনিউটারিনো

যদি ইনপুটগুলির 3x3 ব্যতীত অন্য মাত্রা থাকতে পারে তবে আপনার পরীক্ষার ক্ষেত্রে আপনার এটির কিছুটা coverেকে রাখা উচিত।
মার্টিন এন্ডার

1
@ হাইপার নিউট্রিনো হ্যাঁ যা সাহায্য করে না ... আমাকে এটিকে ব্যাখ্যা করার চেষ্টা করবেন না: আমি উচ্চ বিদ্যালয়ে জিসিএসইয়ের জন্য গণিত অধ্যয়ন করছি যাতে এটি আমার উপর হারিয়ে যায়।
এয়ারড কোইনারিংহিংহিং

1
@ ব্যবহারকারী00001 আপনার যদি সাহায্যের প্রয়োজন হয় তবে এটি আপনার জন্য ইগেনপায়ার-এফ্রেস করুন । : পি
mbomb007

উত্তর:


11

জেলি , 5 বাইট

æ.⁵⁼×

এটি একটি ট্রায়িক, সম্পূর্ণ প্রোগ্রাম।

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

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

æ.⁵⁼×  Main link
       Left argument:  v (eigenvector)
       Right argument: λ (eigenvalue)
       Third argument: A (matrix)

  ⁵    Third; yield A.
æ.     Take the dot product of v and A, yielding Av.
    ×  Multiply v and λ component by component, yielding λv.
   ⁼   Test the results to the left and to the right for equality.

> _> এটি খুব সংক্ষিপ্ত: পি উত্তরের উত্তর
হাইপারনিউটারিনো

6
এটাই পাগল কথা! : পি
ডেনিস

আপনি কিছু লিখুন, এবং "কিছুই ছোট হতে পারে না" বলে মনে করেন। তারপরে এমএটিএল পাশাপাশি আসে এবং আপনার কোডের আকার অর্ধেক করে। তারপর জেলি বরাবর এবং অর্ধেক যে আসে>: _>
HyperNeutrino

@ হাইপারনিট্রিনো আপেল কমলার সাথে তুলনা করবেন না। গল্ফিংয়ের ভাষাগুলিতে অপারেশন হিসাবে এক বাইট কম হয়, সাধারণ কিছু ভাষা খুব কমই থাকে। বর্ণনায় তিনটি অপারেশন (দুটি গুণ এবং একটি সমতা) রয়েছে এবং অতিরিক্ত বাইটের নকল করার ফলে vএকজনকে চারটি বাইটের চেয়ে কম আশা করা যায়।
সান্চাইজস

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

13

ম্যাথমেটিকা, 10 বাইট

#2.#==#3#&

এর মতো ইনপুট নেয় {vector, matrix, scalar}এবং একটি বুলিয়ান দেয়।


1
> _> এটি গণিতের পক্ষে খুব সহজ ছিল। +1: পি
হাইপার নিউট্রিনো

9
@ হাইপার নিউট্রিনো এবং এখন আমরা এমএটিএল-র জন্য অপেক্ষা করছি ...
মার্টিন এন্ডার

2
ওয়েল এমএটিএল উপস্থিত হয়েছে> _>
হাইপার নিউট্রিনো

1
সেই মুহুর্তগুলির মধ্যে একটি যখন আপনি ভাবেন যে কোনও কিছুই খাটো হতে পারে না এবং এমএটিএল হঠাৎ পপ আপ হয় :)
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার এবং তারপরে জেলি দেখায়।
স্টেডিবক্স

11

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

*i2GY*=

অনুক্রমে ইনপুট: l, v, A

ব্যাখ্যা:

*  % implicitly get l and v, multiply.
i  % get A
2G % get second input, i.e., v again
Y* % perform matrix multiplication
=  % test equality of both multiplications

আশ্চর্যজনকভাবে দীর্ঘ উত্তর, আপনি যদি আমাকে জিজ্ঞাসা করেন তবে বেশিরভাগ কারণেই আমার সমস্ত ইনপুট সঠিকভাবে পাওয়ার জন্য আমার প্রয়োজন ছিল। আমি মনে করি না যে 5 বাইটেরও কম সম্ভব, তবে কেউ যদি 5 বা 6 বাইট সমাধান খুঁজে পান তবে এটি দুর্দান্ত হবে।

মূলত, এটি গণনা করে l*v==A*v


"আশ্চর্যজনকভাবে দীর্ঘ" আমি কমপক্ষে 20 বাইট> _> সুন্দর উত্তরটি
প্রত্যাশা করছিলাম

2
ওয়েল, বিবেচনা করা হচ্ছে যে ম্যাটল্যাব উত্তরটি 16 বাইটে আসবে @(A,v,l)A*v==v*l, এটি বেশ ভার্জিক মনে হয়, এবং আমার কিছু অনুভূতি হয় 6 যদি আমি ইনপুট কিছুটা স্মার্ট করে পাই তবে plenty
13:37

স্পষ্টতই এটি 38 বাইটে এসেছিল তবে আমি নিশ্চিত যে এটি গল্ফ হতে পারে।
হাইপারনিউটারিনো

3
পূর্ববর্তী মন্তব্যটি সত্য করার জন্য @ হাইপারনিউট্রিনো আমার নিজের যোগ করেছেন। (অথবা truthy ...?)
Sanchises

6

সিজেম , 15 বাইট

q~W$f.*::+@@f*=

ফর্ম ইনপুট লাগে vector scalar matrix

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

ব্যাখ্যা

q~               e# Read and eval the input
  W$             e# Copy the bottom most value (the vector)
    f.*::+       e# Perform element-wise multiplication with each row of the matrix, then
                 e#   sum the results of each (ie dot product with each row) 
          @@     e# Move the resulting vector to the bottom of the stack
            f*   e# Element-wise multiplication of the scalar and the vector
              =  e# Check if the two vectors are equal

5

ম্যাটল্যাব, 16 বাইট

@(A,v,l)A*v==v*l

বরং তুচ্ছ উত্তর। ইনপুটগুলি গ্রহণ করে একটি বেনামি ফাংশন সংজ্ঞায়িত করে এবং ফলাফলকারী ভেক্টরগুলির উপাদান-ভিত্তিক সমতা গণনা করে। লজিকাল অ্যারেতে একটি একক শূন্যই ম্যাটল্যাবে একটি অ্যারে মিথ্যা করে।


যেমন মিথ্যা কথা সম্পর্কে অবগত ছিল না [true,false], আমাকে শেখানোর জন্য ধন্যবাদ =)
flawr

1
@ ফ্লোয়ার স্যুভারের এই উত্তরটি দেখুন (এটি ম্যাটল্যাবের ক্ষেত্রেও প্রযোজ্য)। মূলত, প্রায়-না-বেশ (খালি ম্যাট্রিক্স []পৃথক) অন্তর্নিহিত , ইত্যাদির all()ifwhile
ইনপুটটিতে

2

ম্যাটল্যাব, 38 বাইট

function r=f(m,v,s);r=isequal(m*v,s*v)

1 বা 0 প্রদান করে

ম্যাটল্যাব, 30 বাইট

function r=f(m,v,s);r=m*v==s*v

রিটার্নস

1
1
1

সত্যবাদী মান হিসাবে একটি মিথ্যা মানটি 1 এর পরিবর্তে 0 বা সমস্ত মান 0 সহ একই ভেক্টর।


আমি ম্যাটল্যাব জানি না, তবে isequalফাংশনটি ==কী ছোট করা যাবে ?
হাইপারনিউটারিনো

1
সত্য isequalযদি সত্য বা মিথ্যা মান না দিয়ে আউটপুটটির প্রয়োজন হয় trueবা falseনা হয় তবে হাইপার নিউট্রিনো প্রয়োজন হবে । চ্যালেঞ্জ দাঁড়িয়ে হিসাবে, ==সত্যিই যথেষ্ট।
13:43

@ হাইপারনিউট্রিনো এটি দুটি ভেক্টরের সাথে এলিমেন্টওয়াল তুলনা করার ফলাফলযুক্ত একটি ভেক্টরকে ফিরিয়ে আনবে।
স্টেডিবক্স

ওহ ঠিক আছে. ভাল উত্তর যদিও!
হাইপারনিউটারিনো

একটি বেনামে ফাংশন সংক্ষিপ্ত হবে না?
ব্যাটম্যান

2

সি ++, 225 203 বাইট

22 বাইট বাঁচানোর জন্য @ কর্ট অ্যামোন এবং জুলিয়ান ওল্ফকে ধন্যবাদ!

#import<vector>
#define F(v,i)for(i=0;i<v.size();++i)
using V=std::vector<float>;int f(std::vector<V>m,V v,float s){V p;int i,j;F(m,i){p.push_back(0);F(v,j)p[i]+=v[j]*m[i][j];}F(v,i)v[i]*=s;return v==p;}

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


1
using std::vector;এটি বন্ধ দুটি বাইট গল্ফ পারে। এটির দাম 18 বাইট, তবে std::20 টি সাশ্রয় করে 4 টি মুছে ফেলতে পারে
কর্ট অ্যামোন - মনিকা

2
আরও ভাল, using V=std::vector<float>;বা অনুরূপ
জুলিয়ান ওল্ফ


2

পাইথন 2.7, 33 বাইট

f=lambda m,s,e:all(m.dot(s)==e*s)

ইনপুট: এম = ম্যাট্রিক্স, এস = স্কেলার, ই = ইজেনভ্যালু। এম এবং এস হ'ল নামী অ্যারে


2
এটি দেখতে দুর্দান্ত লাগছে তবে আমি মনে করি import npএটির বৈধ হওয়ার জন্য আপনার বাইট গণনাটি অন্তর্ভুক্ত করতে হবে
ডিজেএমসিএমহেম

1
আপনার পূর্ববর্তী print(m,s,e)বিবৃতি কাজ হতো না কারণ ভেরিয়েবল m, sএবং eএখনো নির্ধারিত হয়নি / সংজ্ঞায়িত। এছাড়াও, আপনি কোলনের পরে স্থানটি সরিয়ে ফেলতে পারেন। এছাড়াও, আপনি `n` অংশ হিসাবে সরিয়ে ফেলতে পারেন এবং কেবল numpyপরে ব্যবহার করতে পারেন ; যেহেতু আপনি কেবল এটি একবার ব্যবহার করেন, পুরো নামটি ব্যবহার করা আসলে একটি বাইট সংরক্ষণ করে।
হাইপারনিউটারিনো

1
ঠিক আছে আমি এখন বুঝেছি. প্রতিটি বিট
পিষে

2
এর allপরিবর্তে হওয়া উচিত নয় any? এবং আমি মনে করি sভেক্টর, স্কেলার নয়, যদি না আমি কিছু মিস করি
লুইস মেন্ডো

1
স্ট্রিং উপস্থাপনাগুলির তুলনা করা আরও ছোট হবে। tio.run/nexus/python2#jZDPCoMwDIfP@hQ9tiOV/hEHgk/…
ডেনিস

2

পাইথন 3 , 96 70 বাইট

ম্যাট্রিক্স-ভেক্টর বা স্কেলার-ভেক্টর গুণনের জন্য কোনও বিল্টিন নেই!

lambda A,L,v:all(L*y==sum(i*j for i,j in zip(x,v))for x,y in zip(A,v))

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

-26 বাইটস zip@ লিক্যুনকে ধন্যবাদ ব্যবহার করে !


জিপ ব্যবহার করার চেষ্টা করুন:f=lambda A,L,v:all(L*y==sum(i*j for i,j in zip(x,v))for x,y in zip(A,v))
লিকি নুন


1

আর, 30 25 বাইট

s=pryr::f(all(a%*%v==λ*v))

বেনামে ফাংশন, মোটামুটি সোজা। রিটার্ন TRUEবা FALSE


0

ওকে, 12 বাইট

{y~z%+/y*+x}

এটি একটি ফাংশন, এটি গ্রহণ করে [matrix;vector;scalar]

এটি কে হিসাবে একই কারণে ফলাফল হিসাবে 3.0~3দেয় কারণ কাজ করে না 0


নিম্নলিখিতটি 14 টি বাইট সহ কে-তে কাজ করে :

{(y*z)~+/y*+x}

0

অ্যাক্সিয়োম, 27 বাইট

f(a,b,c)==(a*b=c*b)@Boolean

অনুশীলন

(17) -> m:=matrix[[2,-3,-1],[1,-2,-1],[1,-3,0] ]; v:=matrix[[3],[1],[0]];
(18) -> f(m,v,1)
   (18)  true

(19) -> m:=matrix[[2,-3,-1],[1,-2,-1],[1,-3,0] ]; v:=matrix[[1],[1],[1]];
(20) -> f(m,v,-2)
   (20)  true

(21) -> m:=matrix[[1,6,3],[0,-2,0],[3,6,1] ]; v:=matrix[[1],[0],[1]];
(22) -> f(m,v,4)
   (22)  true

(23) -> m:=matrix[[1,0,-1],[-1,1,1],[1,0,0] ]; v:=matrix[[2],[1],[0]];
(24) -> f(m,v,7)
   (24)  false

(25) -> m:=matrix[[-4,3],[2,1] ]; v:=matrix[[1],[2]];
(26) -> f(m,v,2)
   (26)  true

(27) -> f(2,1,2)
   (27)  true

আমি এই ভাষাটি আগে দেখিনি, সুন্দর উত্তর! কি করে @Boolean?
হাইপারনিউট্রিনো

(a = b) @ বুলিয়ান মানে "অনুমোদিত = অপারেটর (টাইপ 1, টাইপ 2) এর মধ্যে বেছে নিন যার ফলাফলটি বুলিয়ান"; কয়েকটি কথায় "a = b" বুলিয়ান হতে হবে
রোজলুপি

0

পাইথন, 26 বাইট

lambda a,b,c:c*b==a.dot(b)

aএবং bনাম্বার অ্যারে হয়, cএটি একটি পূর্ণসংখ্যা।

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


2
আশেপাশে পেরেনগুলি কি c*bপ্রয়োজনীয়?
xnor

@ এক্সনোর ধন্যবাদ, স্থির।
আর

এটি কেবলমাত্র ছোট অ্যারেগুলির জন্য কাজ করে, যেহেতু NumPy বড় অ্যারে স্ট্রিং উপস্থাপনাগুলি সংক্ষিপ্ত করে।
ব্যবহারকারী 2357112

@ ইউজার 2357112 উদাহরণ? আপনি কি বোঝাতে চাচ্ছেন তা আমি নিশ্চিত নই.
আর

যদি c*b1000 এরও বেশি উপাদান থাকে তবে NumPy বেশিরভাগ উপাদানগুলির সাথে প্রতিস্থাপন করবে ...ডেমো।
ব্যবহারকারী 2357112

0

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

#(=(set(map(fn[a v](apply -(* v %3)(map * a %2)))% %2))#{0})

এটি পরীক্ষা করে যে সমস্ত ডেল্টা শূন্য, সুতরাং শূন্যের সেটে .ুকে পড়ে। কলিং উদাহরণ:

(def f #(=(set(map(fn[a v](apply -(* v %3)(map * a %2)))% %2))#{0}))
(f [[1 6 3][0 -2 0][3 6 1]] [1 0 1] 4)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.