ম্যাট্রিক্সের ইগেনভ্যালুগুলি


11

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

একটি ম্যাট্রিক্স এর eigenvalues Aস্কালে মান λযেমন যে, কিছু কলাম ভেক্টর জন্য v, A*v = λ*v। এগুলি এর বৈশিষ্ট্যযুক্ত বহুবর্ষের সমাধান A: det(A - λ*I) = 0(যেখানে Iএকই মাত্রার সাথে পরিচয় ম্যাট্রিক্স রয়েছে A)।

আউটপুটগুলি অবশ্যই 3 টি উল্লেখযোগ্য অঙ্কের হতে হবে। সমস্ত ইনপুট এবং আউটপুটগুলি আপনার নির্বাচিত ভাষার জন্য সংখ্যাগত মানগুলির উপস্থাপনযোগ্য সীমার মধ্যে থাকবে।

বিল্টিনগুলি গ্রহণযোগ্য, তবে বিল্টিনগুলি ব্যবহার না করে এমন সমাধানগুলি অন্তর্ভুক্ত করতে আপনাকে উত্সাহ দেওয়া হবে।

পরীক্ষার কেস

এই পরীক্ষার ক্ষেত্রে, Iকাল্পনিক ইউনিট প্রতিনিধিত্ব করে। জটিল নম্বরগুলি ফর্মটিতে লেখা হয় a + b*I। সমস্ত আউটপুটগুলিতে যথার্থতার 3 টি উল্লেখযোগ্য অঙ্ক রয়েছে।

[[42.0]] -> [42.0]
[[1.0, 0.0], [0.0, 1.0]] -> [1.00, 1.00]
[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]] -> [16.1, -1.12, -1.24e-15]
[[1.2, 3.4, 5.6, 7.8], [6.3, 0.9, -5.4, -2.3], [-12.0, -9.7, 7.3, 5.9], [-2.5, 7.9, 5.3, 4.4]] -> [7.20 + 5.54*I, 7.20 - 5.54*I, -4.35, 3.75]
[[-3.22 - 9.07*I, 0.193 + 9.11*I, 5.59 + 1.33*I, -3.0 - 6.51*I, -3.73 - 6.42*I], [8.49 - 3.46*I, -1.12 + 6.39*I, -8.25 - 0.455*I, 9.37 - 6.43*I, -6.82 + 8.34*I], [-5.26 + 8.07*I, -6.68 + 3.72*I, -3.21 - 5.63*I, 9.31 + 3.86*I, 4.11 - 8.82*I], [-1.24 + 9.04*I, 8.87 - 0.0352*I, 8.35 + 4.5*I, -9.62 - 2.21*I, 1.76 - 5.72*I], [7.0 - 4.79*I, 9.3 - 2.31*I, -2.41 - 7.3*I, -7.77 - 6.85*I, -9.32 + 2.71*I]] -> [5.18 + 16.7*I, -24.9 - 2.01*I, -5.59 - 13.8*I, 0.0438 - 10.6*I, -1.26 + 1.82*I]
[[-30.6 - 73.3*I, 1.03 - 15.6*I, -83.4 + 72.5*I, 24.1 + 69.6*I, 52.3 + 2.68*I, 23.8 + 98.0*I, 96.8 + 49.7*I, -26.2 - 5.87*I, -52.4 + 98.2*I, 78.1 + 6.69*I], [-59.7 - 66.9*I, -26.3 + 65.0*I, 5.71 + 4.75*I, 91.9 + 82.5*I, -94.6 + 51.8*I, 61.7 + 82.3*I, 54.8 - 27.8*I, 45.7 + 59.2*I, -28.3 + 78.1*I, -59.9 - 54.5*I], [-36.0 + 22.9*I, -51.7 + 10.8*I, -46.6 - 88.0*I, -52.8 - 32.0*I, -75.7 - 23.4*I, 96.2 - 71.2*I, -15.3 - 32.7*I, 26.9 + 6.31*I, -59.2 + 25.8*I, -0.836 - 98.3*I], [-65.2 - 90.6*I, 65.6 - 24.1*I, 72.5 + 33.9*I, 1.47 - 93.8*I, -0.143 + 39.0*I, -3.71 - 30.1*I, 60.1 - 42.4*I, 55.6 + 5.65*I, 48.2 - 53.0*I, -3.9 - 33.0*I], [7.04 + 0.0326*I, -12.8 - 50.4*I, 70.1 - 30.3*I, 42.7 - 76.3*I, -3.24 - 64.1*I, 97.3 + 66.8*I, -11.0 + 16.5*I, -40.6 - 90.7*I, 71.5 - 26.2*I, 83.1 - 49.4*I], [-59.5 + 8.08*I, 74.6 + 29.1*I, -65.8 + 26.3*I, -76.7 - 83.2*I, 26.2 + 99.0*I, -54.8 + 33.3*I, 2.79 - 16.6*I, -85.2 - 3.64*I, 98.4 - 12.4*I, -27.6 - 62.3*I], [82.6 - 95.3*I, 55.8 - 73.6*I, -49.9 + 42.1*I, 53.4 + 16.5*I, 80.2 - 43.6*I, -43.3 - 3.9*I, -2.26 - 58.3*I, -19.9 + 98.1*I, 47.2 + 62.4*I, -63.3 - 54.0*I], [-88.7 + 57.7*I, 55.6 + 70.9*I, 84.1 - 52.8*I, 71.3 - 29.8*I, -3.74 - 19.6*I, 29.7 + 1.18*I, -70.6 - 10.5*I, 37.6 + 99.9*I, 87.0 + 19.0*I, -26.1 - 82.0*I], [69.5 - 47.1*I, 11.3 - 59.0*I, -84.3 - 35.1*I, -3.61 - 35.7*I, 88.0 + 88.1*I, -47.5 + 0.956*I, 14.1 + 89.8*I, 51.3 + 0.14*I, -78.5 - 66.5*I, 2.12 - 53.2*I], [0.599 - 71.2*I, 21.7 + 10.8*I, 19.9 - 97.1*I, 20.5 + 37.4*I, 24.7 + 40.6*I, -82.7 - 29.1*I, 77.9 + 12.5*I, 94.1 - 87.4*I, 78.6 - 89.6*I, 82.6 - 69.6*I]] -> [262. - 180.*I, 179. + 117.*I, 10.3 + 214.*I, 102. - 145.*I, -36.5 + 97.7*I, -82.2 + 89.8*I, -241. - 104.*I, -119. - 26.0*I, -140. - 218.*I, -56.0 - 160.*I]



উত্তর:


12

হাস্কেল , 576 554 532 507 বাইট

বিল্ট-ইন নেই!

import Data.Complex
s=sum
l=length
m=magnitude
i=fromIntegral
(&)=zip
t=zipWith
(x!a)b=x*a+b
a#b=[[s$t(*)x y|y<-foldr(t(:))([]<$b)b]|x<-a]
f a|let c=[1..l a];g(u,d)k|m<-[t(+)a b|(a,b)<-a#u&[[s[d|x==y]|y<-c]|x<-c]]=(m,-s[s[b|(n,b)<-c&a,n==m]|(a,m)<-a#m&c]/i k)=snd<$>scanl g(0<$c<$c,1)c
p?x|let f=foldl1(x!);c=l p-1;n=i c;q p=init$t(*)p$i<$>[c,c-1..];o=f(q p)/f p;a|d<-sqrt$(n-1)*(n*(o^2-f(q$q p)/f p)-o^2)=n/last(o-d:[o+d|m(o-d)<m(o+d)])=last$p?(x-a):[x|m a<1e-9]
z[a,b]=[-b/a]
z p=p?0:z(init$scanl1(p?0!)p)

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

মোট_47৪ বাইটের জন্য @ janrjanJohansen অনেক ধন্যবাদ!

ব্যাখ্যা

প্রথমে এটি Faddeev – LeVerrier অ্যালগরিদমের সাথে বৈশিষ্ট্যযুক্ত বহুবচনটি গণনা করে যা ফাংশন f। তারপরে ফাংশনটি zপুনরাবৃত্তির মাধ্যমে সেই বহুভুজের সমস্ত শিকড়কে গণনা করে gযা একটি শিকড় সন্ধানের জন্য লুগেরির পদ্ধতি প্রয়োগ করে , একটি শিকড় পাওয়া গেলে এটি সরিয়ে ফেলা হয় এবং gবহুবর্ষীয় ডিগ্রি 1 না হওয়া পর্যন্ত আবার ডেকে আনে যা তুচ্ছভাবে সমাধান করা হয় z[a,b]=[-b/a]

Ungolfed

আমি ফাংশন পুনরায় inlined sum, length, magnitude, fromIntegral, zipWithএবং (&)সেইসাথে সামান্য সাহায্যকারী (!)। ফাংশন faddeevLeVerrierঅনুরূপ f, rootsথেকে zএবং gথেকে laguerreযথাক্রমে।

-- Transpose a matrix/list
transpose a = foldr (zipWith(:)) (replicate (length a) []) a

-- Straight forward implementation for matrix-matrix multiplication
(#) :: [[Complex Double]] -> [[Complex Double]] -> [[Complex Double]]
a # b = [[sum $ zipWith (*) x y | y <- transpose b]|x<-a]


-- Faddeev-LeVerrier algorithm
faddeevLeVerrier :: [[Complex Double]] -> [Complex Double]
faddeevLeVerrier a = snd <$> scanl go (zero,1) [1..n]
  where n = length a
        zero = replicate n (replicate n 0)
        trace m = sum [sum [b|(n,b)<-zip [1..n] a,n==m]|(m,a)<-zip [1..n] m]
        diag d = [[sum[d|x==y]|y<-[1..n]]|x<-[1..n]]
        add as bs = [[x+y | (x,y) <- zip a b] | (b,a) <- zip as bs]
        go (u,d) k = (m, -trace (a#m) / fromIntegral k)
          where m = add (diag d) (a#u)


-- Compute roots by succesively removing newly computed roots
roots :: [Complex Double] -> [Complex Double]
roots [a,b] = [-b/a]
roots   p   = root : roots (removeRoot p)
  where root = laguerre p 0
        removeRoot = init . scanl1 (\a b -> root*a + b)

-- Compute a root of a polynomial p with an initial guess x
laguerre :: [Complex Double] -> Complex Double -> Complex Double
laguerre p x = if magnitude a < 1e-9 then x else laguerre p new_x
  where evaluate = foldl1 (\a b -> x*a+b)
        order' = length p - 1
        order  = fromIntegral $ length p - 1
        derivative p = init $ zipWith (*) p $ map fromIntegral [order',order'-1..]
        g  = evaluate (derivative p) / evaluate p
        h  = (g ** 2 - evaluate (derivative (derivative p)) / evaluate p)
        d  = sqrt $ (order-1) * (order*h - g**2)
        ga = g - d
        gb = g + d
        s = if magnitude ga < magnitude gb then gb else ga
        a = order /s
        new_x = x - a

1
একমাত্র জমা হিসাবে যা বিল্টিনগুলি ব্যবহার করে না, এটি সর্বোচ্চ ভোটের উত্তর হওয়া উচিত।
15:44

+1 - সম্পর্কিত-সম্পর্কিত-নির্ধারকের চেয়ে কম সময়ে গণনা করার জন্য n!!
ব্যবহারকারী 202729

ধন্যবাদ বন্ধুরা! @ ব্যবহারকারী 202729: প্রথমদিকে আমি এটি পর্যবেক্ষণ করেছিলাম !এবং সত্যিই বিভ্রান্ত
হয়েছিলাম

6

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

@eig

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

এমএটিএল গল্ফিং ভাষার সমমানের চেয়ে মাত্র দুটি বাইট বেশি!

eigবিল্ট ইন একটি বেনামে ফাংশন হ্যান্ডেল সংজ্ঞায়িত করে। মজার বিষয় হচ্ছে, ম্যাটল্যাব নকশার দর্শন অনেকগুলি উচ্চ-প্রান্তের ভাষার বিরুদ্ধে গেছে, যা ব্যবহার করতে পছন্দ করে DescripteFunctionNamesTakingArguments(), যেখানে ম্যাটল্যাব এবং ফলস্বরূপ অক্টাভে সবচেয়ে কম সংক্ষিপ্ত ফাংশনটির নাম অর্জন করার ঝোঁক। উদাহরণস্বরূপ, একটি পেতে গুলি eigenvalues এর ubset (যেমন, ক্ষুদ্রতম nপরম মাত্রার), তবে আপনি ব্যবহার eigs

বোনাস হিসাবে, এখানে একটি ফাংশন রয়েছে (ম্যাটল্যাবে কাজ করে, এবং তত্ত্বের ভিত্তিতে অক্টাভাতে কাজ করতে পারত তবে এগুলি solveসত্যই টাস্কের উপর নির্ভর করে না) যা বিল্ট-ইনগুলি ব্যবহার করে না, পরিবর্তে প্রতীকীভাবে এগেনভ্যালু সমস্যা সমাধান করে det(A-λI)=0, এবং এটিকে রূপান্তর করে it সংখ্যার ফর্ম ব্যবহার করেvpa

@(A)vpa(solve(det(A-sym('l')*eye(size(A)))))

3

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

Yv

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

ব্যাখ্যা

আমি সংখ্যাগত রৈখিক বীজগণিতের নিয়মিত পরামর্শ অনুসরণ করেছি: নিজের ফাংশনটি লেখার পরিবর্তে একটি অন্তর্নির্মিতটি ব্যবহার করুন যা বিশেষত সংখ্যার অযোগ্যতাগুলি এড়াতে ডিজাইন করা হয়েছে।

ঘটনাচক্রে, এটি খাটো। ¯ \: _ (ツ): _ / ¯


এটি প্রশ্ন জাগিয়ে তোলে, এটি কতক্ষণ না থাকলে থাকত Yv?
সানচাইজস

@ সানচাইজস আমি নিশ্চিত নই আমি সম্ভবত ZQবৈশিষ্ট্যযুক্ত বহুপদী শিকড় ( ) এর সন্ধান করে এটি সম্পর্কে যেতে চাই । তবে স্পষ্টতই বহুবর্ষের সহগের গণনা করা অনেক কাজ হতে পারে
লুইস মেন্ডো

2

গণিত, 11 বাইট

Eigenvalues

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


হ্যাঁ, "এই প্রশ্নের 1 টি নতুন উত্তর" ক্লিক করার আগে আমি একটি অন্তর্নির্মিত উত্তর আশা করেছি। আসুন কিছু অ-অন্তর্নির্মিত উত্তরের জন্য অপেক্ষা করুন ... / মূলত গাণিতিক সমাধানটি প্রায়শই <শিরোনামের প্রথম শব্দ>
ব্যবহারকারী 202729

সংক্ষিপ্ততম অ-খাঁটি অন্তর্নির্মিতটি আমি পেয়েছি First@Eigensystem@#&(20 বাইট)
মিঃ এক্সকোডার

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


1

আর , 22 বাইট

function(m)eigen(m)$va

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

mম্যাট্রিক্স হিসাবে গ্রহণ করে । হতাশাজনকভাবে, আরে eigenফাংশনটি শ্রেণীর একটি অবজেক্ট দেয় eigen, যার দুটি ক্ষেত্র রয়েছে values:, ইগেনভ্যালু এবং vectors, আইজেনভেেক্টর।

যাইহোক, আরও বিরক্তিকরভাবে, alচ্ছিক যুক্তি দুটি ক্ষেত্রের সাথে only.valuesরিটার্ন দেয় , যার মধ্যে ইগেনভ্যালুগুলি থাকে এবং সেট থাকে , তবে যেহেতু এটি 22 টি বাইটও, তাই এটি ধোয়া।listvaluesvectorsNULLeigen(m,,T)


1

জুলিয়া , 12 বাইট

n->eig(n)[1]

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

দুর্ভাগ্যক্রমে, eigএগেনভ্যালু এবং ইগেনভেেক্টর উভয়কেই একটি টিপল হিসাবে ফিরিয়ে দেয়, সুতরাং আমরা এটির ল্যাম্বডাইফাই করতে এবং প্রথম আইটেমটি ধরতে আরও 9 টি বাইট নষ্ট করি।



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