Як Ви визначаєте ефективний опір кінцевої сітки резисторів?


14

Відмова: Я геофізик з обмеженим досвідом електротехніки. Я не впевнений, чи ця проблема неймовірно проста, неймовірно складна чи зовсім безглузда.

Моя мета: визначити об'ємний опір зразка гірської породи за допомогою резисторних мереж.

Зразок гірської породи повинен моделюватися за допомогою резисторної мережі з певними резисторами, що мають високий опір (представляють суцільну породу) та іншими резисторами, що мають низький опір (представляють шляхи рідини в породі).

Припустимо, у мене є мережа резисторів на єдиній сітці, як показано нижче. У наведеному прикладі кожен сегмент лінії має пов'язаний резистор, позначений від 1 до 24 на сітці 3 на 3. Опори кожного сегмента лінії відомі.

Загальна довжина сітки - а "площа" - A (в даному випадку це 2-D приклад, тому площа теж просто довжина). Потім основний питомий опір зразка задається:LA

ρbulk=ReffAL

введіть тут опис зображення

Моє запитання: Як визначити ефективний опір, мережі?Reff

Я подивився в Інтернеті, але все, що я можу знайти, - це обговорення нескінченних мереж, джерела та потокового струму тощо. Мене не цікавлять струм чи напруга.

Чи можна цю проблему вирішити як є?


2
Я б підключив його до тренажера і дозволю тренажеру вирішити це. Ви можете побудувати свою модель як пряну схему. Тоді, щоб знайти опір, просто використовуйте закон Ома (V = I * R). Спеція підкаже ток, щоб ви могли обчислити Р.
mkeith

1
Все це потенційно може бути автоматизовано за допомогою спецій командного рядка, але для підтвердження концепції ви можете ввести свою схему у вільній спеції, такі як LTSpice. Застосовують напругу та відображають струм. LTspice також може відображати прості функції, такі як напруга, поділене на струм (опір).
mkeith

Дарсі, існує ряд підходів. Я хотів би задати кілька питань, перш ніж запропонувати будь-які думки. (1) Існує дуже легкий біт програмного забезпечення, який ви могли написати. Ви шукаєте такий підхід? (2) Ви можете вирішити це за допомогою традиційного вузлового аналізу. Ви шукаєте такий підхід? (3) Ваша проблема розпадається на вершини та краї . (З огляду на ваше геофізичне походження, я би сподівався, що ви знаєте значення цих двох термінів.) Як ви, апріорі, опрацьовуєте значення, які ви б додавали для ребер?
джонк

@jonk Мене в першу чергу цікавить варіант (1) написати короткий фрагмент коду, щоб це зробити. Я визначаю опір ребер на основі апріорної геометрії пор і відомого опору гірського мінералу або рідини.
Дарсі

Дарсі, є також прийоми, які витягують із трикутних нерегулярних мереж, які відразу ж мені спадають на думку, коли ти пишеш "текучі шляхи". Ви щось читали на цю тему? Я не знаю, які ваші цілі в кінцевому підсумку, але ви, можливо, захочете також їх переглянути. Це було б чудово використовувати для градієнтів, що допоможе вам зрозуміти, де «струми», як правило, зосереджуються. Якщо це турбота.
джонк

Відповіді:


11

V

RvRh

Залежно від мови комп'ютера, яку ви використовуєте, ви можете або не можете використовувати негативні індекси. Не має значення. Це лише питання пам’ятати, з чим ти стикаєшся.

LNLANA(NL+1)(NA+1)NA(NL+1)NL(NA+1)

0V0V1V

(Існують інші методи з міркувань ефективності. Але, мабуть, тут не варто заважати.)

i+j

Vi,j=Rhi,j1Rhi,j(Vi1,jRvi,j+Vi+1,jRvi1,j)Rhi,j1Rhi,j(Rvi,j+Rvi1,j)+Rvi1,jRvi,j(Rhi,j+Rhi,j1)+Rvi1,jRvi,j(Vi,j1Rhi,j+Vi,j+1Rhi,j1)Rhi,j1Rhi,j(Rvi,j+Rvi1,j)+Rvi1,jRvi,j(Rhi,j+Rhi,j1)

Вищенаведене рівняння - це не що інше, як обчислення напруги центрального вузла, що має до нього чотири резистори, де напруги на інших кінцях чотирьох резисторів відомі. Потім напруга центрального вузла обчислюється з наведеного рівняння. Оскільки дільник однаковий для кожного члена, ви можете просто обчислити суму чисельників, а потім розділити один раз на знаменник.

i+ji+j

0V1V

Ви готові до наступного циклу. Виконайте ці цикли стільки разів, скільки, як вам здається, потрібно, щоб загальний стан встиг (і це буде.)

1V

Я дивлюсь на якийсь код, який я написав, що всього, з великою кількістю коментарів, всього 67 рядків. Тож НЕ важко писати.

1V


Чому ви повинні розділити систему на i + j = парне і i + j = непарне?

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, де A - лінійний оператор, а b забезпечує граничні умови? Дивлячись на це, здається дещо аналогічним методам кінцевих різниць для вирішення часткових диференціальних рівнянь ..

Є зв’язок. Я думаю, це називається реалізацією без матриць.


Ось приклад. Наступний набір значень резисторів було розміщено в LTSpice для моделювання:

введіть тут опис зображення

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Ω

Вищенаведена програма показує спосіб встановлення резисторів, вертикальних і горизонтальних, а також матрицю напруги, щоб вона спростила деякі тести на неіснуючі вузли та / або значення резисторів. Код таким чином трохи чистіший, хоча для цього потрібні ще деякі елементи масиву. (Я просто зробив додаткові значення резистора нескінченними.) Просто порівняйте, як я налаштував масиви з тим, як була викладена схема, і я думаю, ви зможете все точно розробити подробиці тут.

Я, звичайно, також зламав резистори та значення вузлів, не роблячи це жодним чином загальною програмою для читання таблиці значень. Але цю загальність додати досить просто. І цей код повинен зробити все, що я написав, абсолютно однозначним.

xx

0V1V

(Гаразд. Ще одне заключне зауваження. Це було б набагато краще орієнтуватися на F # або будь-який пристойний компілятор, орієнтований на масово паралельну обчислювальну систему. Кожен обчислення в "червоному" або "чорному" кольорі можна проводити паралельно; повністю незалежно один від одного. F # робить це дрібницею. Отже, зашифрований у F #, ви можете запустити це на всіх наявних у вас ядрах, не роблячи нічого особливого. Це просто працює. Просто зауважте, якщо ви збираєте багато даних якимись способами і, можливо, захочете взяти повна перевага багатоядерної системи.)


ПРИМІТКА ЗАКОНЧА

Виведення є досить простим від KCL. Розмістіть чотири резистори в наступному розташуванні:

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab

Застосувати KCL:

VR1+VR2+VR3+VR4=V1R1+V2R2+V3R3+V4R4V=(V1R1+V2R2+V3R3+V4R4)(R1∣∣R2∣∣R3∣∣R4)

Деякі гравці з алгеброю отримують результат, який я використав у коді.


Дякую за чудову відповідь. У мене є кілька уточнюючих питань. 1) Чому так потрібно розділити систему на = парне і = непарне? 2) Чи можна все це вирішити за один крок, використовуючи якусь лінійну систему де є лінійним оператором і забезпечує граничні умови? Дивлячись на це, здається дещо аналогічним методам кінцевих різниць для розв’язання часткових диференціальних рівнянь ...i + j A x = b A bi+ji+jAx=bAb
Дарсі

Також, чи однакова формула як для парних, так і для непарних кроків?
Дарсі

2
@Darcy Я напишу ще трохи, щоб допомогти висвітлити ці проблеми.
джонк

Ще раз дякую за деталі. Одне остаточне запитання (і, можливо, це могло б стати цілком окремим питанням, але я його запитаю тут): якщо всі резистори в мережі мають однаковий опір (скажімо, 1 Ом), то звідси випливає, що ефективний опір також повинен бути 1 Ом? Моя інтуїція говорить, що так і слід, але я не впевнений.
Дарсі

1
@Darcy Ваша інтуїція неправильна, і результат MATLAB правильний.
джонк

1

Ви, звичайно, можете скористатися підходом 2D-резисторної мережі для моделювання 2D-проблеми, але це може стати дещо складним при переході на 3 виміри. Ви можете розглянути можливість використання більш традиційного (на сьогоднішній день) підходу з об'ємними провідниками, визначеними у ваших областях, з відповідною провідністю, призначеною для кожного. Безкоштовний код FEMM ( http://www.femm.info/wiki/HomePage ) дуже здатний і може використовуватися для 2D, осьової симетрії та 3D. Звідти ви можете розглянути можливість переходу до набагато більш здатних кодів, таких як SCIrun ( https://www.sci.utah.edu/) який є академічним кодом для задач об'ємного провідника істотної складності. Я використовую її звичайно для сіток більше мільйона тетраедрів. Незважаючи на те, що він був розроблений в основному для біологічного моделювання, він повинен чудово працювати для того, що ви робите. Приклади проблем з перемогою в прямому / зворотному наборі інструментів повинні вас продовжувати. Можливо, ви знайдете і зворотні проблеми, цінні для імпедансної томографії. Я, як правило, використовую версію 4, оскільки версія 5 все ще триває. Програмне забезпечення також має інтерфейс до тетгена, який є чудовим сітчастим будівельним кодом.

Нарешті, якщо ви не проти витрачати гроші, завжди є COMSOL, який дуже простий у використанні (і досить дорогий).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.