জ্যাকবির পদ্ধতি দ্বারা একটি ম্যাট্রিক্স সমীকরণ সমাধান করুন (সংশোধিত)


11

গাণিতিক পটভূমি

আসল সংখ্যার একটি এন বাই ম্যাট্রিক্স, এন আসল সংখ্যার বা ভেক্টর এবং এক্সএ ভেক্টর এন অজানা আসল সংখ্যার একটি এন হওয়া যাক। একটি ম্যাট্রিক্স সমীকরণটি Ax = b হয়।

জ্যাকবীর পদ্ধতিটি নিম্নরূপ: A = D + R পচন করুন, যেখানে D হ'ল ম্যাট্রিক্স, এবং আর অবশিষ্ট প্রবেশিকাগুলি R R

আপনি যদি প্রাথমিক অনুমান সমাধান x0 করেন তবে একটি উন্নত সমাধান হল x1 = বিপরীত (ডি) * (বি - আরএক্স) যেখানে সমস্ত গুণগুলি ম্যাট্রিক্স-ভেক্টর গুণ এবং বিপরীত (ডি) ম্যাট্রিক্স বিপরীত।


সমস্যার নির্দিষ্টকরণ

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

ডেটা কীভাবে ইনপুট করা হয় তা আপনার পছন্দ ; এটি কোনও কমান্ড লাইনে আপনার নিজস্ব বাক্য গঠন হতে পারে, আপনি যা পছন্দ করুন কোনও ফাইল থেকে ইনপুট নিতে পারেন।

কীভাবে ডেটা আউটপুট করা হয় তা আপনার পছন্দ ; এটি কোনও ফাইলের কাছে লিখিত হতে পারে, কমান্ড লাইনে প্রদর্শিত হয়, ASCII শিল্প হিসাবে লিখিত, যে কোনও কিছু, যতক্ষণ না এটি কোনও মানুষের পাঠযোগ্য।

অধিকতর বিস্তারিত

আপনাকে প্রকৃত সমাধান দেওয়া হয়নি: আপনি কীভাবে সঠিক সমাধান গণনা করবেন তা সম্পূর্ণরূপে আপনার to আপনি উদাহরণস্বরূপ ক্রেমার বিধি দ্বারা এটি সমাধান করতে পারেন, বা সরাসরি একটি বিপরীত গণনা করুন। বিষয়গুলি হ'ল পুনরাবৃত্তির সাথে তুলনা করতে সক্ষম হওয়ার জন্য আপনার কাছে একটি সত্য সমাধান রয়েছে।

যথার্থতা একটি বিষয়; তুলনা করার জন্য কিছু লোকের 'সঠিক সমাধান' আলাদা হতে পারে। এই কোড গল্ফের উদ্দেশ্যে 10 দশমিক জায়গায় সঠিক সমাধানটি সঠিক হতে হবে।

একেবারে পরিষ্কার হয়ে উঠতে, যদি আপনার বর্তমান পুনরাবৃত্তি সমাধানের একটি উপাদানও ই এর মাধ্যমে সঠিক সমাধানে এর সংশ্লিষ্ট উপাদানকে অতিক্রম করে, তবে আপনাকে পুনরাবৃত্তি করা দরকার।

আপনি কোন হার্ডওয়্যার ব্যবহার করছেন এবং আপনি প্রোগ্রামটি চালাতে কত সময় ইচ্ছুক তার উপর নির্ভর করে এন এর উপরের সীমাটি পরিবর্তিত হয়। এই কোড গল্ফের উদ্দেশ্যে, সর্বাধিক এন = 50 ধরে নিন।

পূর্বশর্ত

যখন আপনার প্রোগ্রামটি কল করা হয়, আপনি নির্দ্বিধায় মুক্ত হন যে নিম্নলিখিতটি সর্বদা হোল্ড করে:

  • এন> 1 এবং এন <51, অর্থাত্ আপনাকে কখনও স্কেলার সমীকরণ দেওয়া হবে না, সর্বদা একটি ম্যাট্রিক্স সমীকরণ।
  • সমস্ত ইনপুট প্রকৃত সংখ্যার ক্ষেত্রের ওপরে এবং কখনও জটিল হবে না।
  • ম্যাট্রিক্স এ সর্বদা এ জাতীয় যে পদ্ধতিটি সঠিক সমাধানে রূপান্তর করে, যেমন আপনি নীচে বা ই এর সমান ত্রুটি (উপরে বর্ণিত হিসাবে) হ্রাস করতে সর্বদা প্রচুর পুনরাবৃত্তি খুঁজে পেতে পারেন।
  • কখনই শূন্য ম্যাট্রিক্স বা আইডেন্টিটি ম্যাট্রিক্স নয়, তবে এর একটি সমাধান রয়েছে।

পরীক্ষার কেস

A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04

আসল সমাধানটি (0.586, 1.138)। প্রথম পুনরাবৃত্তিটি x1 = (5/9, 1) দেয়, কমপক্ষে একটি উপাদান দ্বারা প্রকৃত সমাধান থেকে 0.04 এর বেশি পৃথক করে। আমরা দেখতে পাই অন্য একটি পুনরাবৃত্তি গ্রহণ করা, x2 = (0.555, 1.148) যা (0.586, 1.138) থেকে 0.04 এর চেয়ে কম পৃথক। সুতরাং আউটপুট হয়

2

A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0

এক্ষেত্রে আসল সমাধানটি (২.২, -০.৮) এবং প্রাথমিক অনুমান x0 এর ইতিমধ্যে ই = ১.০ এর চেয়ে কম ত্রুটি রয়েছে, সুতরাং আমরা আউটপুট ০। এটি যখনই আপনাকে পুনরাবৃত্তি করার প্রয়োজন হয় না, আপনি কেবল আউটপুট করেন

0

জমা মূল্যায়ন

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


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

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

3
"সংক্ষিপ্ততম সঠিক সম্পূর্ণ প্রোগ্রাম " এর মতো মনে হচ্ছে আপনি কেবল প্রোগ্রামগুলিকে মঞ্জুরি দিয়েছেন এবং কার্যকারিতা নয়। আমি "/ ফাংশন" যুক্ত করব।
অ্যাডম

2
+1 ফর্ম্যাটিং একটি প্রশ্নে মনোনিবেশ করার জন্য আমার মস্তিষ্কের ক্ষমতা তৈরি করে বা ভেঙে দেয়
স্টিফেন

1
@ ব্যবহারকারী1997744 হ্যাঁ, অর্থপূর্ণ। আমি বিশ্বাস করি যে ডিফল্টটি হ'ল অন্যান্য ফাংশন বা পাইথন আমদানির মতো অন্য যে কোনও কোডের অনুমতি রয়েছে তবে তা বাইকোন্টে অন্তর্ভুক্ত রয়েছে।
স্টিফেন

উত্তর:


4

এপিএল (ডায়ালগ) , 78 68 65 49 বাইট

ঠিক সেই ধরণের সমস্যার জন্য এপিএল তৈরি করা হয়েছিল।

-৩ এরিক দ্য আউটগোল্ফারকে ধন্যবাদ । -11 ধন্যবাদ ngn

বেনামে ইনফিক্স ফাংশন। এটিকে বাম আর্গুমেন্ট এবং x টি ডান আর্গুমেন্ট হিসাবে গ্রহণ করে। প্রিন্টগুলির ফলাফল 1টালি চিহ্ন হিসাবে উল্লম্ব unary হিসাবে STDOUT, 0বিরামচিহ্ন হিসাবে অনুসরণ করে । এর অর্থ হ'ল এমনকি কোনও 0-ফলাফলও দেখা যায়, 1এর আগে কোনওরকম হয় না 0

{⎕←∨/e<|⍵-b⌹⊃A b e←⍺:⍺∇D+.×b-⍵+.×⍨A-⌹D←⌹A×=/¨⍳⍴A}

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

পাঠের ক্রমে ব্যাখ্যা

কীভাবে কোডটি সমস্যার সুনির্দিষ্টতার সাথে খুব একইভাবে পঠনযোগ্য তা লক্ষ্য করুন:

{} প্রদত্ত A, b, এবং e এবং এবং প্রদত্ত x এর উপরে,  বিবৃতিতে কোনও সত্য আছে কিনা তা
⎕← প্রিন্ট করুন
∨/যে  x বিয়োগ  বি ম্যাট্রিক্সের  এ, বি এর প্রথমটি দ্বারা বিভক্তের পরম মানের
e< চেয়ে ছোট e (অর্থাত্ এ)  যা বাম আর্গুমেন্ট  এবং যদি তাই  হয় তবে  ডি ম্যাট্রিক্স-বার  বি বিয়োগ  x এর পুনরাবৃত্তি হবে , ম্যাট্রিক্সটি  বিয়োগ  করে ডি এর বিপরীতমুখী হবে (বাকী এন্ট্রি)  যেখানে ডি  এ আছে যেখানে  আকৃতির  সমান  স্থানাঙ্ক রয়েছে এ এর (ত্রিভুজ)
|⍵-
b⌹
⊃A b e
←⍺
:
  ⍺∇
  D+.×
  b-
  ⍵+.×⍨
  A-
  ⌹D
  
  
  =/¨
  
  ⍴A

ধাপে ধাপে ব্যাখ্যা

ডান থেকে বামে মৃত্যুদন্ড কার্যকর করার আসল ক্রম:

{} বেনামে ফাংশন যেখানে A হবে এবং ⍵ হ'ল x:
A b c←⍺ বাম আর্গুমেন্টটিকে A, b তে বিভক্ত করুন এবং e
 এর সাথে প্রথম (A)
b⌹ ম্যাট্রিক্স বিভাগ বেছে নিন ( x এর প্রকৃত মান দেয়) এক্স এর
⍵- বর্তমান মানগুলির মধ্যে পার্থক্য এবং  গ্রহণযোগ্য
| পরম মানগুলি
e<গ্রহণযোগ্য এর চেয়ে কম ত্রুটি?
∨/ কারও পক্ষে সত্য? (শয়নকামরা বা কমানো)
⎕← প্রিন্ট করা হবে বুলিয়ান stdout- এ
: এবং তাই যদি:
  ⍴A একটি আকৃতি
   যে আকৃতি যেখানে প্রতিটি সেল নিজস্ব স্থানাঙ্ক হয় ম্যাট্রিক্স
  =/¨ প্রতিটি কক্ষে জন্য, উল্লম্ব এবং অনুভূমিক স্থানাঙ্ক সমান? (তির্যক)  D এর (  ম্যাট্রিক্স বিপরীতমুখী স্টোর
   ) ডি এর ( ডি আইগোনালের জন্য ) এর সাথে ক এর কোষগুলি গুণান
  
  D←
   বিপরীতমুখী (সাধারণ ফিরে)
  A- একটি
  ⍵+.×⍨ ম্যাট্রিক্স গুণিত থেকে বিন্দু (ডট পণ্য হিসাবে একই জিনিস, সুতরাং .) যে এক্স
  b- বি বিয়োগ যে
  D+.× ডি বি খ ম্যাট্রিক্স পণ্য থেকে এবং যে
  ⍺∇ এই ফাংশন প্রদত্ত একটি সঙ্গে be প্রয়োগ এবং এটি এক্স এর নতুন মান হিসাবে


নির্ভুলতার জন্য আউটপুটটি পুনরাবৃত্তির সংখ্যা হওয়া উচিত e
Zgarb

-1: এটি কোনও সমাধান নয়। আপনার x0 দরকার কারণ পুরো পয়েন্টটি নির্দিষ্ট নির্দিষ্ট বিন্দু থেকে পছন্দসই নির্ভুলতা পেতে কত পদক্ষেপ নেয় তা জানতে হবে।
ব্যবহারকারী 1997744

@ ব্যবহারকারী1997744 আহা, আমি সমস্যাটি ভুল বুঝেছি। দুঃখিত।
Adám

@ ব্যবহারকারী1997744 আরও ভাল?
Adám

1
@ user1997744 না গাণিতিক অপারেশন, শুধু পড়া করার ক্ষমতা ইউনারী , যেখানে প্রকৃতপক্ষে 0 কিছুই নয়
Adám

1

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

f=lambda A,b,x,e:e<l.norm(x-dot(l.inv(A),b))and 1+f(A,b,dot(l.inv(d(d(A))),b-dot(A-d(d(A)),x)),e)
from numpy import*
l=linalg
d=diag

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

পুনরাবৃত্তির সমাধান ব্যবহার করে।


@ অ্যাডাম আমি নিশ্চিত যে আমি বেশ বুঝতে পেরেছি না। আমি fকোড ব্লকের মধ্যে নাম না থাকার ব্যাখ্যা দিয়েছিলাম , যা আমি এখন ঠিক করেছি; তবে এটি সম্পূর্ণরূপে আলাদা সমস্যা হলে এটি এখনও সমস্যা হতে পারে।
notjagan

@ অ্যাডম উত্তরটি আমার কাছে বর্তমানে যা আছে তা সংবিধানিত বলে মনে হচ্ছে; এটি হেল্পার কোড সহ একটি ফাংশন যা এর সংজ্ঞা অনুসারে ইউনিট হিসাবে কাজ করতে সক্ষম।
notjagan

আহ, ঠিক আছে. তাহলে কখনো কিছু মনে করো না. আমি পাইথন জানি না, তাই আমি কৌতূহলী ছিলাম। সাবাশ!
আদম

থামানো মানদণ্ড "এর অর্থ নিরঙ্কু মাত্রার ভেক্টরগুলির প্রতিটি উপাদান সবচেয়ে বেশি ই দ্বারা পৃথক হয়"? মূলত সর্বাধিক-আদর্শ, এল 2-আদর্শ নয়।
নিকোনিহার

@ নিকোনিয়ার ফিক্সড
notjagan

1

আর , 138 বাইট

function(A,x,b,e){R=A-(D=diag(diag(A)))
g=solve(A,b)
if(norm(t(x-g),"M")<e)T=0
while(norm((y=solve(D)%*%(b-R%*%x))-g,"M")>e){T=T+1;x=y}
T}

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

একটি বাগ ঠিক করার জন্য নিকোনিহারকে ধন্যবাদ

এটিও লক্ষণীয় যে এখানে একটি আর প্যাকেজ Rlinsolveরয়েছে , এতে একটি lsolve.jacobiফাংশন রয়েছে , x(সমাধান) এবং iter(প্রয়োজনীয় পুনরাবৃত্তির সংখ্যা ) দিয়ে একটি তালিকা ফিরিয়ে দিচ্ছে , তবে আমি নিশ্চিত নই যে এটি সঠিক গণনা করে।


থামানো মানদণ্ড "এর অর্থ নিরঙ্কু মাত্রার ভেক্টরগুলির প্রতিটি উপাদান সবচেয়ে বেশি ই দ্বারা পৃথক হয়"? মূলত সর্বাধিক-আদর্শ, এল 2-আদর্শ নয়।
নিকোনিহার

@ নিকোনিয়ার আপনি ঠিক আছেন! ভাগ্যক্রমে, normফাংশনটি আমার জন্য পাশাপাশি কোনও অতিরিক্ত বাইট সরবরাহ করে না।
জিউসেপ

1

ক্লোজার, 212 198 196 বাইট

#(let[E(range)I(iterate(fn[X](map(fn[r b d](/(- b(apply +(map * r X)))d))(map assoc % E(repeat 0))%2(map nth % E)))%3)](count(for[x I :while(not-every?(fn[e](<(- %4)e %4))(map -(nth I 1e9)x))]x)))

কোনও ম্যাট্রিক্স লাইব্রেরি ছাড়া প্রয়োগ করা হয়েছে, সঠিক উত্তর পেতে প্রক্রিয়াটি 1e9 বার পুনরাবৃত্তি করে। এটি খুব অসুস্থ শর্তযুক্ত ইনপুটগুলিতে কাজ করবে না তবে অনুশীলনে সূক্ষ্মভাবে কাজ করা উচিত।

কম golfed, আমি অভিব্যক্তি সঙ্গে বেশ খুশি হয়েছিলাম Rএবং D:) প্রথম ইনপুট %(একটি) যাতে একটি ভেক্টর, না একটি তালিকা করা হয়েছে assocব্যবহার করা যাবে।

(def f #(let[R(map assoc %(range)(repeat 0))
             D(map nth %(range))
             I(iterate(fn[X](map(fn[r x b d](/(- b(apply +(map * r x)))d))R(repeat X)%2 D))%3)]
          (->> I
               (take-while (fn[x](not-every?(fn[e](<(- %4)e %4))(map -(nth I 1e9)x))))
               count)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.