Jak określić efektywną rezystancję skończonej siatki rezystorów?

14

Oświadczenie: Jestem geofizykiem z ograniczonym wykształceniem elektrotechnicznym. Nie jestem pewien, czy ten problem jest niewiarygodnie łatwy, niewiarygodnie złożony czy całkowicie bezsensowny.

Mój cel: określenie rezystywności masowej próbki skały za pomocą sieci rezystorów.

Próbkę skały należy modelować przy użyciu sieci rezystorów z niektórymi rezystorami o wysokiej rezystancji (reprezentujących skałę stałą) i innymi rezystorami o niskiej rezystancji (reprezentującymi ścieżki płynów w skale).

Załóżmy, że mam sieć rezystorów na jednolitej siatce, jak pokazano poniżej. W pokazanym przykładzie każdy segment linii ma powiązany rezystor oznaczony od 1 do 24 na siatce 3 na 3. Rezystancje każdego segmentu linii są znane.

Całkowita długość siatki wynosi a „obszar” to A (w tym przypadku jest to przykład 2-D, więc obszar jest również tylko długością). Rezystywność masowa próbki jest następnie podawana przez:LA

ρbulk=ReffAL

wprowadź opis zdjęcia tutaj

Moje pytanie: Jak mogę określić skuteczną odporność, sieci?Reff

Szukałem w Internecie, ale wszystko, co mogę znaleźć, to dyskusje na temat nieskończonych sieci, prądów źródłowych i opadających itp. Nie jestem zainteresowany prądem ani napięciem.

Czy ten problem można rozwiązać w obecnej postaci?

Darcy
źródło
2
Podłączę go do symulatora i pozwolę, aby symulator go rozwiązał. Możesz zbudować swój model jako obwód przypraw. Następnie, aby znaleźć opór, po prostu użyj prawa Ohma (V = I * R). Przyprawa powie ci bieżący, dzięki czemu możesz obliczyć R.
mkeith
1
Całość można potencjalnie zautomatyzować za pomocą przyprawy z wiersza poleceń, ale dla potwierdzenia koncepcji można wprowadzić swój obwód w dowolnej przyprawie, takiej jak LTSpice. Podaj napięcie i wyświetl prąd. LTspice może także wyświetlać proste funkcje, takie jak napięcie podzielone przez prąd (rezystancja).
mkeith
Darcy, istnieje wiele podejść. Chciałbym zadać kilka pytań, zanim przedstawię jakieś przemyślenia. (1) Istnieje bardzo łatwe oprogramowanie, które można napisać. Szukasz tego rodzaju podejścia? (2) Można to rozwiązać za pomocą tradycyjnej analizy węzłowej. Szukasz tego rodzaju podejścia? (3) Twój problem rozpada się na wierzchołki i krawędzie . (Biorąc pod uwagę twoje pochodzenie geofizyków, spodziewam się, że znasz znaczenie tych dwóch terminów.) Jak a priori wypracowujesz wartości, które podłączysz dla krawędzi?
jonk
@jonk Byłbym przede wszystkim zainteresowany opcją (1), aby sam napisać krótki fragment kodu, aby to zrobić. Opory krawędziowe określam na podstawie geometrii porów a priori i znanej rezystywności minerału lub płynu skalnego.
Darcy,
Darcy, istnieją również techniki, które czerpią z trójkątnych nieregularnych sieci, które natychmiast przychodzą mi do głowy, gdy piszesz „płynne ścieżki”. Czy czytałeś coś na ten temat? Nie wiem, jakie są Twoje ostateczne cele, ale możesz też je sprawdzić. Świetnie nadają się do gradientów, pomagając zrozumieć, gdzie koncentrują się „prądy”. Jeśli to problem.
jonk

Odpowiedzi:

11

V

RvRh

W zależności od używanego języka komputerowego możesz, ale nie musi, używać ujemnych wskaźników. Nie ma znaczenia To tylko kwestia zapamiętania tego, z czym masz do czynienia.

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

0V0V1V

(Istnieją inne techniki ze względu na wydajność. Ale prawdopodobnie nie warto się nimi przejmować.)

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)

Powyższe równanie jest niczym innym jak obliczeniem napięcia węzła centralnego mającego cztery połączone z nim rezystory, gdzie znane są napięcia na pozostałych końcach czterech oporników. Napięcie węzła centralnego jest następnie obliczane na podstawie powyższego równania. Ponieważ dzielnik jest taki sam dla każdego terminu, możesz po prostu obliczyć sumę liczników, a następnie podzielić raz przez mianownik.

i+ji+j

0V1V

Jesteś gotowy na następny cykl. Wykonuj te cykle tyle razy, ile uważasz, że jest to konieczne, aby ogólny stan się uspokoił (i tak się stanie).

1V

Patrzę na kod, który napisałem, z wieloma komentarzami, tylko 67 wierszy. Więc NIE jest trudno pisać.

1V


Dlaczego musisz podzielić system na i + j = parzysty i i + j = nieparzysty?

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)ponieważ żadne z danych wejściowych funkcji nie są węzłami zmienionymi podczas tego kroku. Następnie obracasz się i obliczasz alternatywy, unikając rozmazywania, ale teraz aktualizujesz alternatywy. Naprawdę musisz to zrobić w ten sposób.

Ponadto, czy formuła jest identyczna dla kroków parzystych i nieparzystych?

Tak, to jest to samo.

Czy wszystko można rozwiązać w jednym kroku za pomocą pewnego rodzaju systemu liniowego Ax = b, gdzie A jest operatorem liniowym, a b zapewnia warunki brzegowe? Patrząc na to, wydaje się nieco analogiczne do metod różnic skończonych do rozwiązywania równań różniczkowych cząstkowych.

Istnieje połączenie. Myślę, że nazywa się to implementacją „bez matrycy”.


Oto przykład. Następujący zestaw wartości rezystorów został umieszczony w LTSpice do symulacji:

wprowadź opis zdjęcia tutaj

1V30.225mA30.224552mA

Uruchomiłem następujący program 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Ω

Powyższy program pokazuje sposób ustawiania rezystorów, pionowego i poziomego, a także macierzy napięcia, dzięki czemu upraszcza niektóre testy nieistniejących węzłów i / lub wartości rezystorów. W ten sposób kod jest nieco bardziej przejrzysty, choć wymaga jeszcze kilku elementów tablicy. (Po prostu sprawiłem, że dodatkowe wartości rezystorów mają nieskończoną wartość.) Po prostu porównaj, jak skonfigurowałem tablice, ze schematem, a także, i myślę, że będziesz w stanie wypracować dokładne szczegóły tutaj.

Oczywiście włamałem się również do rezystorów i wartości węzłów, nie czyniąc z tego programu ogólnego przeznaczenia do odczytywania tabeli wartości. Ale tę ogólność można dość łatwo dodać. I ten kod powinien uczynić wszystko, co napisałem, absolutnie jednoznaczne.

xx

0V1V

(Dobra. Jeszcze jedna uwaga końcowa. Byłoby to znacznie lepiej ukierunkowane na F # lub dowolny porządny kompilator ukierunkowany na masowo równoległy system obliczeniowy. Każde obliczenie w „czerwonym” lub „czarnym” można wykonać równolegle, całkowicie niezależnie od siebie. F # sprawia, że ​​jest to trywialne. Więc zakodowane w F #, możesz uruchomić to na wszystkich dostępnych rdzeniach bez żadnych specjalnych czynności. To po prostu działa. Tylko uwaga na wypadek, gdybyś zbierał dużo danych w jakiś sposób i chciałbyś wziąć pełna korzyść systemu wielordzeniowego.)


UWAGA KOŃCOWA:

Wyprowadzenie jest dość proste z KCL. Umieść cztery rezystory w następującym układzie:

schematyczny

symulacja tego obwodu - Schemat utworzony przy użyciu CircuitLab

Zastosuj KCL:

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

Niektórzy bawiąc się algebrą uzyskują wynik, którego użyłem w kodzie.

jonk
źródło
i+ji+jAx=bAb
Ponadto, czy formuła jest identyczna dla kroków parzystych i nieparzystych?
Darcy,
2
@Darcy Napiszę trochę więcej, aby pomóc w rozwiązaniu tych problemów.
jonk
Jeszcze raz dziękuję za szczegóły. Jedno ostatnie pytanie (i może to być zupełnie osobne pytanie, ale zadam to pytanie tutaj): jeśli wszystkie rezystory w sieci mają taki sam opór (powiedzmy 1 Ohm), to czy wynika z tego, że opór skuteczny powinien również być 1 Ohm? Moja intuicja mówi, że tak powinno być, ale nie jestem pewien.
Darcy
1
@Darcy Twoja intuicja jest błędna, a wynik MATLAB jest poprawny.
jonk
1

Z pewnością można zastosować podejście oparte na sieci rezystorów 2D w celu modelowania problemu 2D, ale może to być nieco skomplikowane przy przejściu do 3 wymiarów. Możesz rozważyć zastosowanie bardziej tradycyjnego (obecnie) podejścia z przewodami objętościowymi zdefiniowanymi w twoich domenach z przypisanym do nich odpowiednim przewodnictwem. Darmowy kod FEMM ( http://www.femm.info/wiki/HomePage ) jest bardzo wydajny i może być używany do 2D, symetrii osiowej i 3D. Stamtąd możesz rozważyć przejście na znacznie bardziej wydajne kody, takie jak SCIrun ( https://www.sci.utah.edu/), który jest kodem akademickim dla problemów przewodnictwa objętościowego o znacznej złożoności. Używam go rutynowo do oczek ponad miliona czworościanów. Mimo że został opracowany przede wszystkim do modelowania biologicznego, powinien świetnie sprawdzać się w tym, co robisz. Przykłady problemów naprzód w zestawie narzędzi do przodu / do tyłu powinny Cię zabrać. Mogą być również przydatne odwrotne problemy przydatne w tomografii impedancyjnej. Ogólnie używam wersji 4, ponieważ wersja 5 jest wciąż w toku. Oprogramowanie ma również interfejs do tetgen, który jest doskonałym kodem budującym siatki.

Wreszcie, jeśli nie jesteś przeciwny wydawaniu pieniędzy, zawsze jest COMSOL, który jest bardzo łatwy w użyciu (i dość drogi).

wilk
źródło