প্রাথমিক ধারণাটি মোটামুটি সহজ। আপনি এমন একটি ম্যাট্রিক্স ( ) সাজিয়েছেন যা আপনার সিস্টেমে "নোডগুলি" বা উল্লম্ব উপস্থাপন করে। এই প্রতিটি নোডের সাথে সম্পর্কিত একটি স্কেলার-মূল্যবান "ভোল্টেজ" রয়েছে যা অ্যালগরিদম এগিয়ে যাওয়ার সাথে সাথে পরিবর্তন বা আপডেট করা যেতে পারে। দুটি নোডও থাকবে যার ভোল্টেজ পরিবর্তন করা যায় না। আমরা এখানে প্রকারের একটি "ব্যাটারি" প্রয়োগ করতে যাচ্ছি, সুতরাং সেই দুটি নোড এই ব্যাটারির দুই প্রান্তকে উপস্থাপন করে।V
পৃথকভাবে, আরও দুটি ম্যাট্রিক ( এবং ) সিস্টেমের প্রান্তগুলি অনুভূমিক এবং উল্লম্বভাবে উপস্থাপন করে। আমার ধারণা, এগুলি আপনার প্রতিরোধের মান। আপনি কীভাবে এগুলি পূরণ করতে চান তা আমি নিশ্চিত নই। তবে এটাই আপনার সমস্যা। এই কৌশলটি ধরে নিয়েছে যে আপনি এই ম্যাট্রিকগুলিও জনপ্রিয় করতে পারবেন।আর এইচRvRh
আপনি যে কম্পিউটারের ভাষা ব্যবহার করেন তার উপর নির্ভর করে আপনি নেতিবাচক সূচকগুলি ব্যবহার করতে সক্ষম হতে পারেন। কিছু যায় আসে না। আপনার মুখোমুখি কি হচ্ছে তা মাথায় রাখার বিষয়।
আসুন অনুমান দৈর্ঘ্য বিভক্ত করা হয় বিভাগ এবং যে "দৈর্ঘ্য" বিভক্ত করা হয় বিভাগে। তারপরে আপনাকে স্কেলারের ভোল্টেজের মানগুলির জন্য একটি ম্যাট্রিক্স তৈরি করতে হবে । (বা বৃহত্তর You) এছাড়াও আপনার এই দুটি দুটি ম্যাট্রিকের জন্য উল্লম্ব প্রান্ত এবং মধ্যে অনুভূমিক প্রান্তগুলি প্রয়োজন।এন এল এ এন এ ( এন এল + 1 ) ⋅ ( এন এ + 1 ) এন এ ⋅ ( এন এল + 1 ) এন এল ⋅ ( এন এ + 1 )LNLANA(NL+1)⋅(NA+1)NA⋅(NL+1)NL⋅(NA+1)
এখন। সঙ্গে ছেদচিহ্ন সব আরম্ভ । বাম দিকের একটি বেছে নিন (মাঝখানে, ) এবং এটিকে মান হিসাবে নোট করুন যা কখনও পরিবর্তন করার অনুমতি নেই। এর জন্য আপনি যে পদ্ধতিটি চান তা ব্যবহার করুন। ডানদিকে অবস্থিত একটি শীর্ষকে বেছে নিন (মাঝখানে, পছন্দসই) এবং এর মানটি তে পরিবর্তন করুন , আবার নোটটি নেওয়ার যে এর মানটি কখনও পরিবর্তিত হওয়ার অনুমতি নেই। একটি কৌশল যা এখানে কাজ করে তা হ'ল এটি সাধারণভাবে পরিবর্তিত হয় তবে তারপরে প্রতিটি পদক্ষেপের মান প্রতিস্থাপন করে। তবে আপনি কীভাবে এটি অর্জন করবেন তা বিবেচ্য নয়। 00V 10V1V
(দক্ষতার কারণে অন্যান্য কৌশল রয়েছে But তবে তাদের সাথে এখানে বিরক্ত করার পক্ষে সম্ভবত এটি উপযুক্ত নয়))
এখন অ্যালগরিদমের জন্য, যাকে কখনও কখনও চেকবোর্ড বা লাল-কালো অ্যালগরিদম বলা হয়। আপনার নোড ভোল্টেজ ম্যাট্রিক্সের মধ্য দিয়ে সরানো, প্রতিটি নোডকে প্রক্রিয়া করুন যেখানে দুটি সূচকের যোগফল সমান হয়, নিম্নলিখিত সাধারণ কার্য সম্পাদন করে:i+j
Vi,j=Rhi,j−1⋅Rhi,j⋅(Vi−1,j⋅Rvi,j+Vi+1,j⋅Rvi−1,j)Rhi,j−1⋅Rhi,j⋅(Rvi,j+Rvi−1,j)+Rvi−1,j⋅Rvi,j(Rhi,j+Rhi,j−1)+Rvi−1,j⋅Rvi,j⋅(Vi,j−1⋅Rhi,j+Vi,j+1⋅Rhi,j−1)Rhi,j−1⋅Rhi,j⋅(Rvi,j+Rvi−1,j)+Rvi−1,j⋅Rvi,j(Rhi,j+Rhi,j−1)
উপরের সমীকরণটি কেন্দ্রীয় নোডের ভোল্টেজের গণনা করা ছাড়া আর কিছুই নয় যার সাথে চারটি প্রতিরোধকের সংযোগ রয়েছে, যেখানে চারটি প্রতিরোধকের অন্যান্য প্রান্তের ভোল্টেজগুলি জানা যায়। কেন্দ্রীয় নোড ভোল্টেজটি উপরের সমীকরণ থেকে গণনা করা হয়। যেহেতু বিভাজক প্রতিটি টার্মের জন্য একই, সুতরাং আপনি কেবলমাত্র সংখ্যার যোগফল গণনা করতে পারেন এবং তারপরে একবার বিভাজক দ্বারা বিভাজন করতে পারেন।
এটি সমস্ত নোড আপডেট করবে যেখানে সমষ্টি সমান । এখন আপনি যে সমস্ত নোডের যোগফল সাথে বিজোড় তাদের সমস্ত ক্ষেত্রে একই প্রক্রিয়া সম্পাদন করুন । এই দুটি পদক্ষেপ একবার সম্পাদন করা হয়ে গেলে আপনি একটি চক্র সম্পন্ন করেছেন।i+ji+j
যদি প্রয়োজন হয় তবে বিশেষ দুটি নোড পুনরায় সেট করুন ( এবং যেমন পূর্বে আলোচনা করা হয়েছে)) বা, আপনি যদি এই দুটি নোড সুরক্ষিত করেন তবে সেগুলি পুনরায় সেট করার দরকার নেই।0V1V
আপনি পরবর্তী চক্রের জন্য প্রস্তুত। সামগ্রিক রাষ্ট্রের স্থিতিস্থাপিত হওয়ার জন্য যতবার আপনার প্রয়োজন মনে হয় ততবার এই চক্রগুলি সম্পাদন করুন (এবং এটি হবে))
আপনি যখন প্রক্রিয়াটি থামান, আপনি সহজেই আপনার বাম পাশের সুরক্ষিত নোডের চারপাশের নোডগুলি বেছে নেওয়া বা অন্যদিকে আপনার ডানদিকের সুরক্ষিত নোডের চারপাশের নোডগুলি অনুসন্ধান করে সহজেই প্রতিরোধের কাজ করতে পারেন। (আপনার ম্যাট্রিক্সকে যথেষ্ট পরিমাণে আরও বড় করে তোলা ভাল ধারণা হতে পারে [প্রতিটি দিক দিয়ে 1 দ্বারা] যাতে আপনার কাছে যে কোনও পছন্দের চারপাশে চারটি নোড থাকে)) পার্শ্ববর্তী নোড এবং বিশেষ নোডের মধ্যে ভোল্টেজের পার্থক্য, বিভক্ত তাদের মধ্যবর্তী প্রান্তগুলিতে প্রতিরোধের সাহায্যে আপনার বিশেষ নোডটি বর্তমান / প্রস্থান করে tells যেহেতু এটি একটি "ব্যাটারি" নোড, তাই এই বর্তমানটি অবশ্যই বর্তমানের সমস্ত হওয়া উচিত। যেহেতু ভোল্টেজটি definition, সংজ্ঞা অনুসারে, এই চারটি স্রোতের যোগফলের সাথে 1 ভাগ করে আপনাকে মোট প্রতিরোধের কথা বলে।1V
আমি এমন কিছু কোড দেখছি যা আমি লিখেছিলাম মোট প্রচুর মন্তব্য সহ মাত্র 67 টি লাইন। সুতরাং এটি লেখা কঠিন নয়।
এই ধারণার "সংক্ষিপ্ত সংক্ষিপ্তসার" হ'ল আপনি একটি ব্যাটারি প্রয়োগ করেন এবং তারপরে পুরো সিস্টেম জুড়ে ভোল্টেজ ছড়িয়ে পড়ার পরে দেখুন। একবার ভোল্টেজ স্থিতিশীল হয়ে যায় (তার জন্য আপনার মানদণ্ড), আপনাকে যা করতে হবে তা হ'ল বর্তমান ব্যাটারি টার্মিনাল বা অন্যটি বর্তমান বা তার বাইরে চলে যাওয়া উচিত। এগুলি উভয়ই সুস্পষ্ট কারণে একই জাতীয় মান হওয়া উচিত (কিছু সংখ্যার সীমার মধ্যে)।1V
আপনার কেন সিস্টেমটি আই + জ = সমান এবং আই + জ = অদ্ভুতের মধ্যে আলাদা করতে হবে?
মনে করুন আপনি গণনা করেছেন । এই রেফারেন্স নোড যে ঘিরে । সেটা ঠিক আছে. মনে করুন আপনি পরবর্তী গণনা । নোট করুন যে প্যারামিটারগুলির তালিকায় আপনি কেবল জন্য গণনা করেছেন ? এটি জিনিসগুলিকে "ধাক্কা" দেবে। এটা শব্দ না। পরিবর্তে, বিজোড় / এমনকি প্রতিটি চক্র একই মুহুর্তে এটি "উপস্থিত হতে" উচিত। সুতরাং আপনার পরবর্তী কারণ এর নয় ফাংশনটির ইনপুটগুলি নোড যা সেই সময়ে পরিবর্তন হয়েছিলV5,5=f(V4,5,V6,5,V5,4,V5,6)V5,5V5,6=f(V4,6,V6,6,V5,5,V5,7)V5,5V5,7=f(V4,7,V6,7,V5,6,V5,8)এই পদক্ষেপ। তারপরে আপনি ঘুরে বেড়াচ্ছেন এবং ধাক্কা এড়ানো বিকল্পগুলি গণনা করুন, তবে এখন বিকল্প আপডেট করুন। আপনার সত্যই এটি এইভাবে করতে হবে।
এছাড়াও, সূত্রটি কি উভয় এবং বিজোড় পদক্ষেপের মাধ্যমে অভিন্ন?
হ্যাঁ, এটি একই রকম।
Ax = b যেখানে রৈখিক অপারেটর এবং খ সীমানা শর্ত সরবরাহ করে সেখানে কোনও ধরণের লিনিয়ার সিস্টেম ব্যবহার করে কী সব এক ধাপে সমাধান করা যেতে পারে? এটি দেখে, এটি আংশিক ডিফারেনশিয়াল সমীকরণগুলি সমাধানের সীমাবদ্ধ পার্থক্য পদ্ধতির সাথে কিছুটা সাদৃশ্যপূর্ণ বলে মনে হচ্ছে ..
একটি সংযোগ আছে। আমি মনে করি একে 'ম্যাট্রিক্সমুক্ত' বাস্তবায়ন বলা হয়।
এখানে একটি উদাহরণ। নিম্নলিখিত প্রতিরোধকের মানগুলির সেটটি সিমুলেশনের জন্য এলটিএসপাইসে স্থাপন করা হয়েছিল:
আমি এটি সংক্ষিপ্ত এবং সহজ রেখেছি। যেহেতু আপনি দেখতে পারেন, থেকে আনুমানিক কম্পিউটেড বর্তমান পাওয়ার সাপ্লাই হিসাবে দেওয়া হয় । (স্পাইস দ্বারা গণনা করা আসল মান ))1V30.225mA30.224552mA
আমি নিম্নলিখিত VB.NET প্রোগ্রাম চালিয়েছি:
Module GEOGRID
Const NL As Integer = 2
Const NA As Integer = 2
Const INF As Double = 1.0E+32
Sub Main()
Static Rh As Double(,) = New Double(NL + 2, NA + 1) {
{INF, INF, INF, INF},
{INF, 5, 21, INF},
{INF, 76, 10, INF},
{INF, 32, 22, INF},
{INF, INF, INF, INF}}
Static Rv As Double(,) = New Double(NA + 1, NL + 2) {
{INF, INF, INF, INF, INF},
{INF, 61, 50, 16, INF},
{INF, 56, 45, 18, INF},
{INF, INF, INF, INF, INF}}
Dim V As Double(,) = New Double(NL + 2, NA + 2) {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0}}
Dim PDE As Func(Of Integer, Integer, Double) = Function(ByVal i As Integer, ByVal j As Integer) (
Rh(i, j - 1) * Rh(i, j) * (V(i - 1, j) * Rv(i, j) + V(i + 1, j) * Rv(i - 1, j)) +
Rv(i - 1, j) * Rv(i, j) * (V(i, j - 1) * Rh(i, j) + V(i, j + 1) * Rh(i, j - 1))
) / (
Rh(i, j - 1) * Rh(i, j) * (Rv(i, j) + Rv(i - 1, j)) +
Rv(i - 1, j) * Rv(i, j) * (Rh(i, j) + Rh(i, j - 1))
)
Dim IV As Func(Of Integer, Integer, Double) = Function(ByVal i As Integer, ByVal j As Integer) 0 +
(V(i, j) - V(i - 1, j)) / Rv(i - 1, j) + (V(i, j) - V(i + 1, j)) / Rv(i, j) +
(V(i, j) - V(i, j - 1)) / Rh(i, j - 1) + (V(i, j) - V(i, j + 1)) / Rh(i, j)
Dim idx As Integer = NA \ 2 + 1
Dim jdx1 As Integer = NL + 1
Dim jdx2 As Integer = 1
For x As Integer = 1 To 1000
For k As Integer = 0 To (NA + 1) * (NL + 1) - 1 Step 2
Dim i As Integer = k \ (NL + 1)
Dim j As Integer = k - i * (NL + 1) + 1
i += 1
If Not (i = idx AndAlso (j = jdx1 OrElse j = jdx2)) Then V(i, j) = PDE(i, j)
Next
For k As Integer = 1 To (NA + 1) * (NL + 1) - 1 Step 2
Dim i As Integer = k \ (NL + 1)
Dim j As Integer = k - i * (NL + 1) + 1
i += 1
If Not (i = idx AndAlso (j = jdx1 OrElse j = jdx2)) Then V(i, j) = PDE(i, j)
Next
Next
Console.WriteLine("R = " & (1.0 / IV(idx, jdx1)).ToString)
Console.WriteLine("R = " & (-1.0 / IV(idx, jdx2)).ToString)
End Sub
End Module
নিম্নলিখিত ফলাফল মুদ্রিত সঙ্গে: । যা সঠিক উত্তর।R=33.0856844038614Ω
উপরের প্রোগ্রামটি রেজিস্টর স্থাপন করার একটি উপায় দেখায়, উল্লম্ব এবং অনুভূমিক পাশাপাশি ভোল্টেজ ম্যাট্রিক্স যাতে এটি অস্তিত্বহীন নোড এবং / অথবা রেজিস্টার মানগুলির জন্য কিছু পরীক্ষা সহজতর করে। কোডটি একটু ক্লিনার, এইভাবে আরও কিছু অ্যারে উপাদানগুলির প্রয়োজন হয় না। (আমি কেবল অতিরিক্ত প্রতিরোধকের মানগুলিকে মূল্যহীন করে দিয়েছি)) স্কিম্যাটিকটি যেভাবে নির্ধারণ করা হয়েছিল তার সাথে আমি কীভাবে অ্যারেগুলি সেট করেছি তা তুলনা করেছিলাম এবং আমি মনে করি আপনি সঠিকভাবে কাজ করতে সক্ষম হবেন বিশদ এখানে।
আমি অবশ্যই প্রতিরোধক এবং নোড মানগুলিতে হ্যাক করেছি অবশ্যই কোনও মানসম্পন্ন টেবিলটি পড়ার জন্য এটি কোনও সাধারণ উদ্দেশ্যে প্রোগ্রাম না করে। তবে সেই সাধারণতা যোগ করা বেশ সহজ। এবং এই কোডটি আমার লেখা সমস্ত কিছুই একেবারেই দ্ব্যর্থহীন করা উচিত।
নোট করুন যে আমি লুপ 1000 প্রকারটিও চালিয়েছি, লুপের মধ্যে লাল এবং কালোকে ঘুরিয়ে রেখেছি । আমি শুধু একটি নম্বর বাছাই করেছি। এটি আরও সাধারণ উদ্দেশ্যে করার জন্য, আপনি কতগুলি পুনরাবৃত্তি সম্পাদন করতে হবে তা নির্ধারণের ভিন্ন উপায় পছন্দ করতে পারেন।xx
এবং একটি চূড়ান্ত নোট। কেবলমাত্র প্রমাণ করার জন্য যে আপনি প্রতিরোধকের গণনা করতে স্থির ভোল্টেজ নোডের বর্তমান ব্যবহার করতে পারেন, উভয় মান মুদ্রণের জন্য আমি দুটি লাইন ব্যবহার করেছি: একটি দিক থেকে গণিত এবং থেকে একটি গণনা করা হয়েছে পাশ। যেভাবেই হোক, আপনার একই সংখ্যাটি দেখতে হবে।0V1V
(ঠিক আছে। আরও একটি চূড়ান্ত দ্রষ্টব্য। এটি एफ # বা কোনও বৃহত সমান্তরাল কম্পিউটিং সিস্টেমকে লক্ষ্য করে যে কোনও শালীন সংকলককে লক্ষ্য করা যায় "" লাল "বা" কালো "উভয় ক্ষেত্রে প্রতিটি গণনা সমান্তরালভাবে সম্পাদন করা যেতে পারে; একে অপরের সম্পূর্ণ স্বাধীনভাবে। F # এটিকে তুচ্ছ করে তোলে তাই এফ # তে কোডেড হয়ে, আপনি বিশেষ কোনও কাজ না করে আপনার উপলভ্য সমস্ত কোরে এটি চালাতে পারেন It এটি ঠিক কাজ করে। যদি আপনি কিছু ফ্যাশনে প্রচুর ডেটা সংগ্রহ করছেন এবং সম্ভবত এটি গ্রহণ করতে চান তবে একটি নোট মাল্টি-কোর সিস্টেমের সম্পূর্ণ সুবিধা)
সমাপ্তি দ্রষ্টব্য:
কেসিএল থেকে উদ্ভূতকরণটি বেশ সহজ। নিম্নলিখিত ব্যবস্থাটিতে চারটি প্রতিরোধক রাখুন:
এই সার্কিটটি অনুকরণ করুন - সার্কিটল্যাব ব্যবহার করে স্কিম্যাটিক তৈরি করা হয়েছে
কেসিএল প্রয়োগ করুন:
VR1+VR2+VR3+VR4V=V1R1+V2R2+V3R3+V4R4∴=(V1R1+V2R2+V3R3+V4R4)(R1∣∣R2∣∣R3∣∣R4)
বীজগণিতের সাথে কিছু খেলে আমি কোডটিতে ব্যবহৃত ফলাফল পেয়ে যাই।