抵抗器の有限グリッドの実効抵抗をどのように決定しますか?


14

免責事項:私は電気工学のバックグラウンドが限られた地球物理学者です。この問題が非常に簡単なのか、非常に複雑なのか、まったく無意味なのかはわかりません。

私の目標:抵抗ネットワークを使用して、岩石サンプルのバルク抵抗率を決定します。

岩石サンプルは、高抵抗を持つ特定の抵抗器(固体岩を表す)と低抵抗値を持つ他の抵抗器(岩石内の流体経路を表す)を備えた抵抗器ネットワークを使用してモデル化されます。

以下に示すように、均一なグリッド上に抵抗器のネットワークがあるとします。示されている例では、各ラインセグメントには、3行3列のグリッドに1〜24というラベルが付いた関連する抵抗器があります。各ラインセグメントの抵抗は既知です。

グリッドの全長はLで、「面積」はA(この場合は2次元の例であるため、面積も単なる長さです)。サンプルのバルク抵抗率は次のようになります。

ρbulk=ReffAL

ここに画像の説明を入力してください

私の質問:ネットワークの実効抵抗、を決定するにはどうすればよいReffですか?

私はオンラインで調べましたが、見つけることができるのは無限ネットワーク、ソースおよびシンク電流などに関する議論だけです。電流や電圧には興味がありません。

この問題は現状のままで解決できますか?


2
シミュレーターにプラグインして、シミュレーターに解決させます。モデルをスパイス回路として構築できます。次に、抵抗を見つけるには、オームの法則(V = I * R)を使用します。スパイスが現在を教えてくれるので、Rを計算できます
。– mkeith

1
コマンドラインスパイスを使用してすべてを潜在的に自動化できますが、概念実証のために、LTSpiceなどの無料のスパイスで回路に入ることができます。電圧を印加し、電流を表示します。LTspiceは、電圧を電流で除算したような単純な機能(抵抗)も表示できます。
-mkeith

ダーシー、多くのアプローチがあります。意見を述べる前に、いくつか質問をしたいと思います。(1)非常に簡単に作成できるソフトウェアがあります。この種のアプローチをお探しですか?(2)従来のノード解析を使用してこれを解決できました。この種のアプローチをお探しですか?(3)問題は頂点エッジに分けられます。(地球物理学者のバックグラウンドを考えると、これらの2つの用語の意味を知っていると思います。)どのようにして、エッジにプラグインする値を先験的に計算しますか?
ジョンク

@jonk私は主に、これを行うために自分で短いコードを書くオプション(1)に興味があります。先験的な細孔形状と岩石鉱物または流体の既知の抵抗率に基づいて、エッジ抵抗を決定します。
ダーシー

ダーシー、「流体の経路」と書くとすぐに私の頭に浮かぶ、三角形の不規則なネットワークから引き出す技術もあります。そのトピックについて何か読んだことがありますか?最終的にあなたの目標が何であるかはわかりませんが、あなたもこれらを調べたいかもしれません。これらは、「電流」が集中する傾向がある場所を理解するのに役立つ勾配に使用すると素晴らしいでしょう。それが心配なら。
ジョンク

回答:


11

基本的な考え方はかなり単純です。システムの「ノード」または頂点を表すマトリックス()を配置します。これらの各ノードには、スカラー値の「電圧」が関連付けられており、アルゴリズムの進行に合わせて変更または更新できます。電圧を変更できない2つのノードもあります。ここで「バッテリー」の種類を適用するので、これらの2つのノードはこのバッテリーの両端を表します。V

別に、別の2つのマトリックス(およびR h)は、システムのエッジ(水平および垂直)を表します。これらはあなたの抵抗値です。これらをどのように記入するつもりなのかわかりません。しかし、それはあなたの問題です。この手法は、これらの行列も入力できることを前提としています。RvRh

使用するコンピューター言語に応じて、負のインデックスを使用できる場合とできない場合があります。関係ありません。それはあなたが直面していることを心に留めておくだけの問題です。

長さN L セクションに分割し、「長さ」AN A セクションに分割すると仮定します。次に、スカラー電圧値のN L + 1 N A + 1 頂点を持つ行列を作成する必要があります。(以上である。)また有するもの、他の二つの行列が必要になりますN AN L + 1 垂直縁部及びN LN A + 1をLNLANA(NL+1)(NA+1)NA(NL+1)それらの頂点間の水平エッジ。NL(NA+1)

今。すべての頂点を0で初期化し。左側(できれば中央)の頂点の1つを選択し、 0として記録します。0V絶対に変更できない V値。これにはどんな方法でも使用できます。右側(できれば中央)の頂点の1つを選択し、その値を 1に変更します。0V、その値は決して変更できないことに注意してください。ここで機能するテクニックは、通常どおりに変更するだけで、その後、すべてのステップで値を置き換えることです。しかし、それを達成する限り、これをどのように達成するかは問題ではありません。1V

(効率上の理由から他の手法もあります。しかし、ここでそれらを気にする価値はおそらくないでしょう。)

アルゴリズムについては、チェッカーボードまたは赤黒アルゴリズムとも呼ばれます。ノード電圧マトリックスを移動して、2つのインデックスの合計が偶数である各ノードを処理し、次の単純な割り当てを実行します。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)

上記の式は、4つの抵抗が接続された中央ノードの電圧を計算することに他なりません。4つの抵抗の他端の電圧は既知です。次に、中央ノード電圧が上記の式から計算されます。除数は各項で同じであるため、分子の合計を計算し、分母で一度除算できます。

これにより、合計が偶数であるすべてのノードが更新されます。ここで、合計i + jが奇数であるすべてのノードに対して同じ手順を実行します。これらの手順が両方とも実行されると、1サイクルが完了します。i+ji+j

必要に応じて、特別な2つのノードをリセットします(および 10V前に説明したように V。または、これらの2つのノードを保護した場合、それらをリセットする必要はありません。1V

次のサイクルの準備ができました。これらのサイクルは、全体的な状態が落ち着くために必要であると感じる回数だけ実行します(そうするでしょう)。

プロセスを停止すると、左側の保護されたノードを囲むノードを見るか、右側の保護されたノードを囲むノードを見るかを選択することで、抵抗を簡単に解決できます。(マトリックスを十分な大きさ(すべての方向で1だけ)大きくして、どちらかの選択肢を実際に4つのノードで囲むことをお勧めします。)周囲のノードと特別なノード間の電圧の差をそれらの間のエッジの抵抗は、現在の特別なノードの出入りを示します。これは「バッテリー」ノードであるため、この電流は電流のすべてでなければなりません。電圧がは、定義上、1をこれらの4つの電流の合計で割ることにより、合計抵抗を示します。1V

合計67行だけのコメントをたくさん書いたコードを見つめています。書くのは難しくありません。

このアイデアの「短い要約」は、あなたが適用することですバッテリーを Vにして、電圧がシステム全体に広がるのを観察します。電圧が安定したら(そのための基準)、やらなければならないことは、1つのバッテリー端子または他のバッテリー端子に出入りする電流を調べることだけです。明らかな理由により、両方とも同じ電流値(数値範囲内)である必要があります。1V


システムをi + j =偶数とi + j =奇数に分離する必要があるのはなぜですか?

あなたが計算仮定。これは、参照囲むノードV 5 5。それはいいです。仮定でき、次の計算V 5 6 = F V 4 6V 6 6V 5 V5,5=f(V4,5,V6,5,V5,4,V5,6)V5,5。パラメータのリストにあなただけのために計算した値であることに注意してくださいV 5 5?これは多くのことを「汚す」でしょう。それは音ではありません。代わりに、奇数/偶数の各サイクルは、同じ瞬間に発生したかのように「見える」はずです。あなたの次の計算がなければならないので、V 5 7 =FV 4 7 V 6 7 V 5 6 V 5 8V5,6=f(V4,6,V6,6,V5,5,V5,7)V5,5V5,7=f(V4,7,V6,7,V5,6,V5,8)これは、関数への入力がこのステップで変更されたノードではないためです。次に、振り回して代替を計算し、汚れを回避しますが、代替を更新します。あなたは本当にこのようにしなければなりません。

また、式は偶数ステップと奇数ステップの両方で同一ですか?

はい、同じです。

Aが線形演算子で、bが境界条件を提供する、何らかの線形システムAx = bを使用して、すべてを1ステップで解決できますか?それを見ると、偏微分方程式を解くための有限差分法にやや似ているように見えます。

接続があります。「マトリックスフリー」実装と呼ばれると思います。


以下に例を示します。次の抵抗値のセットは、シミュレーションのために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Ω

上記のプログラムは、存在しないノードおよび/または抵抗値のテストの一部を簡素化するために、抵抗、垂直および水平、ならびに電圧マトリックスを設定する方法を示しています。この方法では、コードは少しきれいになりますが、配列要素がさらに必要になります。(単に追加の抵抗値を無限にしただけです。)アレイのセットアップ方法と回路図のレイアウト方法を比較するだけで、すべての正確な値を計算できると思います。詳細はこちら。

もちろん、抵抗値とノード値もハッキングしましたが、これを何らかの方法で値のテーブルを読み取るための汎用プログラムにすることはしませんでした。しかし、その一般性は簡単に追加できます。そして、このコードは、私が書いたすべてを完全に明確にする必要があります。

バツバツ

0V1V

(わかりました。もう1つ注意してください。これは、F#または大規模並列コンピューティングシステムを対象とする適切なコンパイラをターゲットとする方がはるかに優れています。 F#はこれを簡単にします。F#でコーディングされているので、利用可能なすべてのコアで特別なことをせずに実行できます。それは機能します。何らかの方法で大量のデータを収集し、マルチコアシステムの完全な利点。)


エンドノート:

KCLからの派生は非常に簡単です。4つの抵抗を次の配置に配置します。

回路図

この回路のシミュレーションCircuitLabを使用して作成された回路

KCLを適用します。

VR1+VR2+VR3+VR4=V1R1+V2R2+V3R3+V4R4V=V1R1+V2R2+V3R3+V4R4R1∣∣R2∣∣R3∣∣R4

代数で遊んでいる人は、コードで使用した結果を取得します。


すばらしい回答をありがとう。明確な質問がいくつかあります。1)システムを次のように分離する必要があるのはなぜですか+j =偶数 +j=奇数?2)何らかの線形システムを使用して、すべてを1ステップで解決できますかAx=b where A is a linear operator and b provides the boundary conditions? Looking at it, it seems somewhat analogous to finite difference methods for solving partial differential equations...
Darcy

Also, is the formula identical for both even and odd steps through?
Darcy

2
@Darcy I'll write a little more to help cover these issues.
jonk

詳細をありがとう。最後の1つの質問(そして、これは完全に別の質問になる可能性がありますが、ここで質問します):ネットワーク内のすべての抵抗器が同じ抵抗(1オームなど)を持っている場合、実効抵抗も1オーム?私の直感はそうすべきだと言っていますが、私にはわかりません。
ダーシー

1
@Darcy直感が間違っており、MATLABの結果が正しい。
ジョンク

1

確かに2D抵抗ネットワークのアプローチを使用して2D問題をモデル化することはできますが、3次元に移行する場合は多少注意が必要です。ドメインに定義されたボリュームコンダクタと、それぞれに適切な導電率が割り当てられた、より伝統的な(最近の)アプローチの使用を検討することをお勧めします。FEMMフリーウェアコード(http://www.femm.info/wiki/HomePage)は非常に優れており、2D、軸対称、3Dに使用できます。そこから、SCIrun(https://www.sci.utah.edu/のようなはるかに機能的なコードへの移行を検討できます。)これは、かなり複雑なボリュームコンダクター問題のアカデミックコードです。100万を超える四面体のメッシュに日常的に使用しています。それは主に生物学的モデリングのために開発されましたが、あなたがしていることのためにうまく機能するはずです。フォワード/インバースツールキットのフォワードの問題の例は、あなたを前進させるはずです。逆問題はインピーダンストモグラフィーにも有用であると思うかもしれません。バージョン5はまだ開発中のため、通常はバージョン4を使用します。このソフトウェアには、優れたメッシュ構築コードであるtetgenへのインターフェイスもあります。

最後に、お金を使うことに反対していなければ、常にCOMSOLがあります。これは非常に使いやすい(そして非常に高価です)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.