投稿者:斉藤
投稿日:2010年 8月10日(火)22時14分32秒
|
|
|
はじめまして。
ブリッジ回路の合成抵抗計算についてのプログラムを探していたところ、
こちらの過去ログ(下記リンク)にたどり着きました。
古い話題で恐縮なのですが、是非とも教えていただきたいことがあります。
節点方程式における下記部分についてです。
> LET A(Probe2,Probe2)=A(Probe2,Probe2)-Gt !電流源を加味する
> LET b(Probe1)=It
> LET b(Probe2)=-It
2,3行目にあります、強制的に電流を流すために
配列bに符号の異なる値を設定する部分は分かるのですが、
1行目にあります、対地でゼロ電位にするために
配列Aから任意の値を引くという処理が、
電気回路的にどのような意味を持つのか理解できていません。
(ゼロ電位になる理由)
任意の値でよい点が、なおさら不思議なのです。
お忙しいところ恐れ入りますが、ご回答いただけると幸いです。
よろしくお願い致します。
|
|
|
投稿者:山中和義
投稿日:2010年 8月11日(水)14時35分21秒
|
|
|
> No.1333[元記事へ]
斉藤さんへのお返事です。
> > LET A(Probe2,Probe2)=A(Probe2,Probe2)-Gt !電流源を加味する
> > LET b(Probe1)=It
> > LET b(Probe2)=-It
電流It、内部抵抗Rtの電流源を接続したと考えます。
|
|
|
投稿者:斉藤
投稿日:2010年 8月11日(水)21時48分20秒
|
|
|
> No.1334[元記事へ]
山中和義さんへのお返事です。
> 電流It、内部抵抗Rtの電流源を接続したと考えます。
ご回答ありがとうございました。
理解が悪くて恐縮ですが、
電流源は入出力端子に±Itを設定するだけではダメなのですね。
内部抵抗Rtを持った電流源を設けることで電圧を設定するイメージなのでしょうか。
もう少しプログラムを動かし、挙動から推測してみます。
ありがとうございました。
|
|
|
投稿者:島村1243
投稿日:2010年 8月12日(木)07時46分18秒
|
|
|
> No.1333[元記事へ]
斉藤さんへのお返事です。
> 1行目にあります、対地でゼロ電位にするために
> 配列Aから任意の値を引くという処理が、
> 電気回路的にどのような意味を持つのか理解できていません。
> (ゼロ電位になる理由)
> 任意の値でよい点が、なおさら不思議なのです。
私は下記のように解釈しました。
(1)電気回路的な解釈としては、ある節点kが対地ゼロ電位(大地と短絡状態を意味する)であれば、その節点にどんな電流を注入しても、電流は他の回路を通らず大地を通して直接還流するだけで、他の回路の電圧電流分布に影響を与えない。
(2)だから、ある節点kに任意の電流を流しても回路行列が成立するということは、行列演算的にk点がゼロ電位に設定されたということ。
|
|
|
投稿者:島村1243
投稿日:2010年 8月12日(木)10時01分52秒
|
|
|
> No.1336[元記事へ]
島村1243さんへのお返事です。
(2)の記載を訂正しました。
> (2)だから、ある節点kに任意の電流を流しても回路行列が成立するということは、行列演算的にk点がゼロ電位に設定されたということ。
訂正後:
(2)だから、ある節点kの電流が任意に変更されたときに、変更前の他の節点電圧電流分布行列が変わらないという条件で行列演算を行わせると、結果としてk点がゼロ電位に設定されるということ。
|
|
|
投稿者:島村1243
投稿日:2010年 8月13日(金)15時38分0秒
|
|
|
> No.1333[元記事へ]
斉藤さんへのお返事です。
> 古い話題で恐縮なのですが、是非とも教えていただきたいことがあります。
> 節点方程式における下記部分についてです。
>
> > LET A(Probe2,Probe2)=A(Probe2,Probe2)-Gt !電流源を加味する
> > LET b(Probe1)=It
> > LET b(Probe2)=-It
> 1行目にあります、対地でゼロ電位にするために
> 配列Aから任意の値を引くという処理が、
> 電気回路的にどのような意味を持つのか理解できていません。
> (ゼロ電位になる理由)
> 任意の値でよい点が、なおさら不思議なのです。
理由が判明しました。
プログラム中の「ダミー電流源Gt」は記述誤りで、正しくは「ダミーアドミタンスGt」です。
その理由を、節点3個の例で以下に示す。
節点番号1,2,3
節点間接続アドミタンス
1-2間:Y12[S]=Y21
1-3間:Y13[S]=Y31
2-3間:Y23[S]=Y32
大地から1[A]を注入する節点番号:1
1[A]を大地に注入する(大地から-1[A]を注入する)節点番号:3
各接点の対地電圧V1,V2,V3
として節点方程式を作ると
節点1について:Y12(V1-V2)+Y13(V1-V3)=1[A]
節点2について:Y21(V2-V1)+Y23(V2-V3)=0[A]
節点3について:Y31(V3-V1)+Y32(V3-V2)=-1[A]
これをマトリクスで表すと
|(Y12+Y13),-Y12 ,-Y13 | |V1| | 1|
|-Y21 ,(Y21+Y23),-Y23 |×|V2|=| 0|
|-Y31 ,-Y32 ,(Y31+Y32)| |V3| |-1|
上記の正方YマトリクスをA,電圧列マトリクスをx,注入電流マトリクスをbとプログラム上では
書いており
A*x=b
これをxについて解くと
x=Rev(A)*b
これを実際に行うと、「エラー:REV(A)は特異行列」となって答えが出ない。
何故かの理由は
(1)数学的にはAの行列式ΔA=0になるから(確認すると良く分かる)、逆行列が作れない。
(2)電気回路的には絵を書いて良く見ると分かるが、全ての節点の対地電圧は何も指定され
ていない(フロート状態)から、電圧を求めろと言われても出ないのは当たり前。
これを解決するために節点3と対地との間にGt[S]というダミーアドミタンスを追加接続している。
こうするとAの中の(Y31+Y32)が(Y31+Y32+Gt)になるので、Rev(A)が特異行列にならずxが出る。
上記で正しい答えが出る電気回路的理由は、節点3に電流源-1[A]と並列にGt[S]が付加されることにより節点3の対地電圧が固定される。
そして節点1に注入される電流は、節点3の-1[A]の電流源で全て吸い取られるからGtに流れる電流はゼロ。
したがって節点3の対地電圧はGtが任意(ゼロ以外)であってもゼロ[A]×1/Gt=0[V]になる。
これでGtが任意値であっても答えが正常に得られる不思議さの理由が分かる。
上記はあくまで島村1243の推測で、山中さんは別の純数学的な知識を駆使して元のプログラムを作られたのだと思います。
|
|
|
投稿者:山中和義
投稿日:2010年 8月14日(土)09時02分23秒
|
|
|
> No.1339[元記事へ]
島村1243さんへのお返事です。
> 別の純数学的な知識を駆使して元のプログラムを作られたのだと思います。
オームの法則 E=I*R で任意のIで 0=I*R を満たすためには、R=0 となる。
LET A(Probe2,Probe2)=A(Probe2,Probe2)-Gt の部分は、LET A(Probe2,Probe2)=0 とする。
という見解で、その後プログラムを修正しています。
|
|
|
投稿者:島村1243
投稿日:2010年 8月14日(土)20時11分30秒
|
|
|
> No.1340[元記事へ]
山中和義さんへのお返事です。
山中さん、お久しぶりです。いつぞやは大変お世話になりました。さて
> オームの法則 E=I*R で任意のIで 0=I*R を満たすためには、R=0 となる。
> LET A(Probe2,Probe2)=A(Probe2,Probe2)-Gt の部分は、LET A(Probe2,Probe2)=0 とする。
>
> という見解で、その後プログラムを修正しています。
とのことですが、その節点(Probe2をkと書きます)と大地間にR=0[Ω]を接続してk点の対地電圧を0[V]にする場合、A行列はアドミタンスなので1/0[S]=∞となり、修正式は
LET A(k,k)=∞
とするのが電気的に正しいと思います。しかし、修正式では
LET A(k,k)=0
としても同一解が出てしまい、反って電気的な理屈が合わなくなると思いました。
私は修正前の式で追加接続した-Gtを、負のアドミタンスを追加接続するというのは考えにくいので、+Gtに変えただけの
LET A(Probe2,Probe2)=A(Probe2,Probe2)+Gt
を今までどおり使用する方が、前スレッドで述べた様に電気的な説明(行列数学的な説明は私の能力では出来ない)が上手く合います。
|
|
|
投稿者:斉藤
投稿日:2010年 8月15日(日)21時24分33秒
|
|
|
> No.1342[元記事へ]
お盆中につき返信遅くなり申し訳ありません。
島村1243さん、山中和義さん、丁寧なご説明ありがとうございました。
おかげさまで電気的な解釈や任意の値で良い理由について理解が進みました。
話が逸れてしまうかもしれませんが、少し感じたことを書かせてください。
現在、私が取り組んでいるプログラムでは、
ブリッジ回路中のn個節点の各節点間の合成抵抗(nC2通り)を全て求めているため、
計算量が非常に膨大となり、どうにか短縮できないものか悩んでいます。
A*x=b ⇒ x=Rev(A)*b における逆行列の計算に負荷がかかるのですが、
Aの逆行列自体はn通りしかなく、あとはbが変わるだけの式になるため、
ループの工夫により、nC2回全て逆行列を計算する必要はないようです。
欲が出てきて、Aの逆行列を一度で済ますことはできないものかと考えながら
御二人のご説明を読んでいて感じたのですが、
Aにダミーアドミタンスを設定するのは、Vk=0[V]にすることが目的(表現手法のひとつ)であるなら、
Aをそのままに、xとbの行列を設定して計算できないものなのでしょうか。
また、調査中であるためハッキリしたことは言えませんが、
連立一次方程式の解法として、逆行列を求めるより高速なLU分解等のルーチンを試しているうちに、
Aはそのままにbの電流源だけの設定でも正しい計算をするケースがありました。
島村1243さんがおっしゃる通り、逆行列は成立しないけれども、
別の行列解法ではなんらか(ここが曖昧ですが)の理由により電流源の設定のみでよい、
もしくはVk=0[V]が考慮されたのではないかと考えています。
>(1)数学的にはAの行列式ΔA=0になるから(確認すると良く分かる)、逆行列が作れない。
|
|
|
投稿者:山中和義
投稿日:2010年 8月16日(月)10時42分17秒
|
|
|
> No.1346[元記事へ]
斉藤さんへのお返事です。
> A*x=b ⇒ x=Rev(A)*b における逆行列の計算に負荷がかかるのですが、
節点数が1000個とかですか?
> Aの逆行列自体はn通りしかなく、あとはbが変わるだけの式になるため、
> ループの工夫により、nC2回全て逆行列を計算する必要はないようです。
電源の接続位置により、COMB(N,2)通りの回路ができます。
したがって、行列AがCOMB(N,2)通りということです。その逆行列も。
接続順の工夫により、(N-1)通りに限定できます。
> Aにダミーアドミタンスを設定するのは、Vk=0[V]にすることが目的(表現手法のひとつ)であるなら、
「Vk=0にすることが目的」というより、
It→
┌─┬─P1
電流源(-) Rt
└─┼─P2
≡
を接続することだと考えています。
数値計算の結果は、相対的に求まるということです。
具体的には、電流の向きや電圧は「どこかを基準して」ということになります。
したがって、Vk=0である必要はありません。
> Aをそのままに、xとbの行列を設定して計算できないものなのでしょうか。
行列Aは、その作り方から、特異行列(逆行列がない)となるのでは?!
> 連立一次方程式の解法として、逆行列を求めるより高速なLU分解等のルーチンを試しているうちに、
> Aはそのままにbの電流源だけの設定でも正しい計算をするケースがありました。
偶然だと思います。
LU分解法にしても、特異行列は扱えないと思います。
|
|
|
投稿者:斉藤
投稿日:2010年 8月16日(月)22時37分6秒
|
|
|
> No.1348[元記事へ]
山中和義さんへのお返事です。
ご回答ありがとうございます。
節点数は1000~3000個程度です。
電磁界解析ソフトのようなものを作っており、
細かくメッシュを区切って節点間の抵抗値を求めています。
対地電圧について浮いている状態になっていて、
基準点を設定する必要があることは理解しています。
素人考えですが、行列xのどこかの成分に強制的に電圧値を入力し、
Ax=bを逆行列以外の方法(特異行列が問題にならない方法)で解くことはできれば、
共通のAが利用できるのかと思いました。
私も勉強中のため完全に推測になりますが、
LU分解のルーチンの中では、ピボット選択という手順を踏んでいます。
これは、対角要素が0(もしくは0に近い値)にならないように行を並べ替えるという作業ですが、
このような変形によって特異行列でなくなった(計算できる形になった)のではないかと
少し疑っています。
|
|
|
投稿者:山中和義
投稿日:2010年 8月17日(火)06時58分47秒
|
|
|
> No.1351[元記事へ]
斉藤さんへのお返事です。
> 節点数は1000~3000個程度です。
MAT文を使っても負担が大きい処理になります。
~分解などの連立方程式の解法プログラムでは、なおさらでは?
> Ax=bを逆行列以外の方法(特異行列が問題にならない方法)で解くことはできれば、
調査中ですが、特異値分解、擬似逆行列が気になります。
> A*x=b ⇒ x=Rev(A)*b における逆行列の計算に負荷がかかるのですが、
実際、逆行列の計算が負荷なのでしょうか?
節点数がN=1000として、
節点の組合せの計算「x=INV(A)*b」は、COMB(1000,2)通りで、仮に組合せの1つが1秒とすると、COMB(1000,2)*1=499500 秒。
また、逆行列の計算「INV(A)」は、(N-1)通りで、仮に500秒なら、(N-1)*500=499500 秒。
これを改修して、逆行列の計算は1通り、1秒なら、1*1=1 秒。
比 (499500+1)/(499500+499500)=0.50… ですから、2倍になります。
元々、節点の組合せを計算させること自体が負荷なのではないでしょうか?
|
|
|
投稿者:島村1243
投稿日:2010年 8月17日(火)17時53分22秒
|
|
|
> No.1351[元記事へ]
斉藤さんへのお返事です。
> 節点数は1000~3000個程度です。
> 電磁界解析ソフトのようなものを作っており、
> 細かくメッシュを区切って節点間の抵抗値を求めています。
以前に、有限要素法のプログラムを組んでいた方の投稿が、この掲示板の下記URLに有ります。
件名:C++ data を full basic で graphick
投稿者:与坂 昇平 投稿日:2009年 9月 4日(金)10時00分41秒
同じような負荷状況なので、対策(計算はC言語で、画像作成は十進BASICで)として参考になるかも知れません。
|
|
|
戻る