Sonlu bir direnç ızgarasının etkili direncini nasıl belirliyorsunuz?


14

Feragatname: Ben sınırlı elektrik mühendisliği geçmişine sahip bir jeofizikçiyim. Bu sorunun inanılmaz derecede kolay, inanılmaz derecede karmaşık veya tamamen saçma olup olmadığından emin değilim.

Amacım: Direnç ağlarını kullanarak bir kaya örneğinin kütle direncini belirlemek.

Kaya örneği, yüksek dirençli (katı kayayı temsil eden) bazı dirençlere ve düşük dirençli (kayadaki sıvı yollarını temsil eden) diğer dirençlere sahip bir direnç ağı kullanılarak modellenmelidir.

Aşağıda gösterildiği gibi düzgün bir ızgara üzerinde bir direnç ağım olduğunu varsayalım. Gösterilen örnekte, her bir çizgi segmenti 3'e 3 ızgarada 1'den 24'e etiketlenmiş ilişkili bir dirence sahiptir. Her bir hat segmentinin dirençleri bilinmektedir.

Izgaranın toplam uzunluğu ve "alan" A'dır (bu durumda 2 boyutlu bir örnektir, bu yüzden alan da sadece bir uzunluktur). Daha sonra numunenin kütle özdirenci şu şekilde verilir:LA

ρbulk=ReffAL

resim açıklamasını buraya girin

Benim sorum: Nasıl etkili direnç, belirliyorsunuz ağının?Reff

Çevrimiçi baktım ama bulabildiğim tek şey sonsuz ağlar, kaynak ve lavabo akımları vb.

Bu sorun olduğu gibi çözülebilir mi?


2
Bir simülatöre takarım ve simülatörün çözmesine izin verirdim. Modelinizi bir baharat devresi olarak inşa edebilirsiniz. Sonra direnç bulmak için Ohm yasasını kullanın (V = I * R). Baharat size akımı söyleyecektir, böylece
R'yi

1
Her şey potansiyel olarak komut satırı baharat kullanılarak otomatikleştirilebilir, ancak kavram kanıtı için devrenize LTSpice gibi ücretsiz bir baharatla girebilirsiniz. Bir voltaj uygulayın ve akımı görüntüleyin. LTspice ayrıca bir gerilime (akıma) bölünen bir voltaj gibi basit işlevleri de gösterebilir.
mkeith

Darcy, bir dizi yaklaşım var. Herhangi bir düşünce sunmadan önce birkaç soru sormak istiyorum. (1) Yazabileceğiniz çok kolay bir yazılım var. Bu tür bir yaklaşım mı arıyorsunuz? (2) Bunu geleneksel Nodal Analizi kullanarak çözebilirsiniz. Bu tür bir yaklaşım mı arıyorsunuz? (3) Sorununuz köşelere ve kenarlara ayrılıyor . (Jeofizik geçmişiniz göz önüne alındığında, bu iki terimin anlamını bilmenizi beklerim.) Bir önsel olarak, kenarlar için eklediğiniz değerleri nasıl hesaplarsınız?
jonk

@jonk Öncelikle bunu yapmak için kendime kısa bir kod parçası yazmak için seçenek (1) ile ilgilenirim. Önceden bir gözenek geometrisine ve bir kaya mineralinin veya sıvının bilinen bir direncine dayanarak kenar dirençlerini belirlerim.
Darcy

Darcy, "akışkan yollar" yazdığınızda hemen aklıma gelen üçgen şeklinde düzensiz ağlardan çizim teknikleri de var. Bu konuda bir şey okudun mu? Nihayetinde hedeflerinizin ne olduğunu bilmiyorum, ama siz de bunlara bakmak isteyebilirsiniz. Bunlar, "akımların" nerede yoğunlaşacağını anlamanıza yardımcı olan gradyanlar için harika bir seçenektir. Bu bir endişe ise.
jonk

Yanıtlar:


11

V

RvRh

Kullandığınız bilgisayar diline bağlı olarak, negatif indeksler kullanabilir veya kullanamayabilirsiniz. Önemli değil. Bu sadece neyle karşı karşıya olduğunuzu akılda tutmaktır.

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

Şimdi. Tüm köşeleri ile başlat0V0V1V

(Verimlilik nedenleriyle ilgili başka teknikler de var. Ama muhtemelen onlarla uğraşmaya değmez.)

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)

Yukarıdaki denklem, dört rezistörün diğer uçlarındaki voltajların bilindiği, ona bağlanan dört rezistöre sahip merkezi bir düğümün voltajını hesaplamaktan başka bir şey değildir. Merkezi düğüm gerilimi daha sonra yukarıdaki denklemden hesaplanır. Bölen her terim için aynı olduğundan, payların toplamını hesaplayabilir ve sonra bir kez payda tarafından bölebilirsiniz.

i+ji+j

0V1V

Bir sonraki döngü için hazırsınız. Bu döngüleri, genel durumun yerleşmesi için gerekli olduğunu düşündüğünüz kadar tekrarlayın (ve olacaktır.)

1V

Bazı kodlara bakıyorum, toplamlar, çok sayıda yorumla, sadece 67 satır yazdım. Yani yazmak zor değil.

1V


Neden sistemi i + j = even ve i + j = odd olarak ayırmanız gerekiyor?

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)çünkü işleve girişlerin hiçbiri bu adım sırasında değiştirilen düğümler değildir . Sonra, bulaşmayı önler ve şimdi alternatifleri güncelleyerek, alternatifleri hesaplarsınız. Gerçekten bu şekilde yapmak zorundasın.

Ayrıca, formül hem çift hem de tek adımlar için aynı mıdır?

Evet, aynı.

Hepsi bir tür lineer sistem kullanılarak tek bir adımda çözülebilir mi Ax = b burada A doğrusal bir operatördür ve b sınır koşullarını sağlar? Buna bakıldığında, kısmi diferansiyel denklemlerin çözümü için sonlu fark yöntemlerine biraz benziyor.

Bir bağlantı var. Bence buna 'matrissiz' uygulama deniyor.


İşte bir örnek. Simülasyon için LTSpice'e aşağıdaki direnç değerleri seti yerleştirildi:

resim açıklamasını buraya girin

1V30.225mA30.224552mA

Aşağıdaki VB.NET programını çalıştırdım:

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Ω

Yukarıdaki program, dikey ve yatay dirençlerin yanı sıra voltaj matrisinin kurulumunun bir yolunu gösterir, böylece mevcut olmayan düğümler ve / veya direnç değerleri için bazı testleri basitleştirir. Kod, bu şekilde biraz daha temiz, ancak daha fazla dizi öğesi gerektiriyor. (Basitçe ekstra direnç değerlerini sonsuz olarak yaptım.) Sadece dizileri nasıl yerleştirdiğimi şematikte ortaya konma şekliyle karşılaştırın ve bence tam olarak çalışabileceksiniz Ayrıntılar burada.

Ben de, herhangi bir şekilde bir değerler tablosunu okumak için genel amaçlı bir program yapmadan, dirençler ve düğüm değerlerinde hackledim. Ancak bu genelliği eklemek oldukça kolaydır. Ve bu kod yazdığım her şeyi kesinlikle açık hale getirmeli.

xx

Ve son bir not. Direnci hesaplamak için sabit voltaj düğümünün akımını kullanabileceğinizi kanıtlamak için, her iki değeri de yazdırmak için iki satır kullandım: biri hesaplandı0V1V

(Tamam. Son bir not daha. Bu F # ya da büyük ölçüde paralel bir hesaplama sistemini hedefleyen iyi bir derleyiciyi daha iyi hedefleyecektir. "Kırmızı" ya da "siyah" daki her hesaplama, birbirinden tamamen bağımsız olarak paralel olarak gerçekleştirilebilir. F # bunu önemsiz kılar F # ile kodlanmış, bunu yapmak için özel bir şey olmadan tüm mevcut çekirdeklerinizde çalıştırabilirsiniz. Sadece işe yarıyor.Bir miktar LOT veri toplamanız ve almak isteyebileceğiniz bir not çok çekirdekli bir sistemin tam avantajı.)


SON NOT:

KCL'den türetme oldukça basittir. Dört direnci aşağıdaki düzenlemeye yerleştirin:

şematik

bu devreyi simüle et - CircuitLab kullanılarak oluşturulan şematik

KCL uygula:

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

Bazı cebir ile oynamak kodda kullanılan sonucu alır.


Harika cevap için teşekkürler. Birkaç açıklayıcı sorum var. 1) Sistemi neden = çift ve = tek olarak ayırmalısınız ? 2) Hepsi bir adımda çözülebilir mi? Bir çeşit doğrusal sistem Burada doğrusal bir operatördür ve sınır koşullarını sağlar mı? Ona baktığımızda, kısmi diferansiyel denklemleri çözmek için sonlu fark yöntemlerine biraz benziyor ...i + j A x = b A bi+ji+jAx=bAb
Darcy

Ayrıca, formül hem çift hem de tek adımlar için aynı mıdır?
Darcy

2
@Darcy Bu konuları ele almaya yardımcı olmak için biraz daha yazacağım.
jonk

Ayrıntılar için tekrar teşekkürler. Son bir soru (ve belki de tamamen ayrı bir soru olarak gidebilir ama burada soracağım): ağdaki tüm dirençler aynı dirence sahipse (1 Ohm diyelim), o zaman etkili direncin de olması gerektiğini takip eder mi? 1 Ohm? Sezgim öyle olması gerektiğini söylüyor, ama emin değilim.
Darcy

1
@Darcy Sezginiz yanlış ve MATLAB sonucu doğru.
jonk

1

Bir 2D problemini modellemek için bir 2D direnç ağı yaklaşımını kesinlikle kullanabilirsiniz, ancak 3 boyuta geçerken biraz zorlaşabilir. Etki alanlarınızda tanımlanan ses iletkenleriyle, her birine uygun bir iletkenlik atanmış olarak daha geleneksel (bu günlerde) bir yaklaşım kullanmayı düşünebilirsiniz. FEMM ücretsiz kodu ( http://www.femm.info/wiki/HomePage ) çok yeteneklidir ve 2D, eksenel simetri ve 3D için kullanılabilir. Buradan SCIrun gibi çok daha yetenekli kodlara geçmeyi düşünebilirsiniz ( https://www.sci.utah.edu/) önemli ölçüde karmaşık olan ses iletkeni sorunları için akademik bir koddur. Bir milyondan fazla tetrahedronun ağları için rutin olarak kullanıyorum. Öncelikle biyolojik modelleme için geliştirilmiş olmasına rağmen, yaptığınız şey için harika çalışmalıdır. İleri / ters araç setindeki ileri sorun örnekleri size yol göstermelidir. Ters problemleri empedans tomografisi için de değerli bulabilirsiniz. Sürüm 4 hala devam eden bir çalışma olduğu için genellikle sürüm 4'ü kullanıyorum. Yazılım ayrıca büyük bir örgü yapı kodu olan tetgen için bir arayüze sahiptir.

Son olarak, para harcamaya karşı değilseniz, her zaman kullanımı çok kolay olan (ve oldukça pahalı) COMSOL vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.