TOPページへ

複素数の逆行列の計算

エクセルの逆行列は、複素数には、対応していないようです。そこで、逆行列の関数と、行列の積の関数を作っておく必要があります。
逆行列は、数値計算で、検索して、学んでください。
複素数でも、基本的に、普通の吐き出し方法で、逆行列は、出来るようでうす。しかし、四則演算を、
複素数の演算に変える必要があるようです。逆行列関数のサンプルを以下に載せます。
複素数の四則演算は、先ずエクセルで複素数を扱えるようにするの関数を利用します。

Public Function IMINVERS(a As Range) As Variant

Dim n As Integer, n1 As Integer, n2 As Integer
Dim r1 As Integer, r2 As Integer, c As Integer
Dim max As Variant
Dim i As Integer
Dim m() As Variant
Dim inm() As Variant
Dim rr As Integer, cc As Integer
Dim no As Integer, ex As Variant

n1 = a.Rows.Count
n2 = a.Columns.Count
n = n1

ReDim inm(1 To n1, 1 To n2)

For rr = 1 To n1
 For cc = 1 To n2
 If rr <> cc Then
 inm(rr, cc) = 0
 Else
 inm(rr, cc) = 1
 End If
 
 Next
 Next
 
ReDim m(1 To n1, 1 To n2)

m = a

If n1 <> n2 Then

IMINVERS = False
Exit Function

End If

For r1 = 1 To n
  max = m(r1, r1)
  no = r1
  If r1 < n Then
  For i = r1 + 1 To n
  If IMABSa(m(i, r1)) > IMABSa(max) Then
  max = m(i, r1)
  no = i
  End If
  Next
  
  If (r1 <> no) Then
  For i = 1 To n
  ex = m(r1, i)
  m(r1, i) = m(no, i)
  m(no, i) = ex
  Debug.Print m(r1, i), m(no, i)
  
  ex = inm(r1, i)
  inm(r1, i) = inm(no, i)
  inm(no, i) = ex
  Next
  End If
  
  End If
   
   
    max = m(r1, r1)
    
  
  For i = 1 To n
  m(r1, i) = IMDIVa(m(r1, i), max)
  inm(r1, i) = IMDIVa(inm(r1, i), max)
  
  Next
    
  For r2 = 1 To n
  If r1 <> r2 Then
  
  max = m(r2, r1)
    
  For i = 1 To n
  m(r2, i) = IMSUBa(m(r2, i), IMPRODUCTa(m(r1, i), max))
  inm(r2, i) = IMSUBa(inm(r2, i), IMPRODUCTa(inm(r1, i), max))
  Next
  End If
  Next
  Next
  
  IMINVERS = inm
  
  
    
End Function

次に、複素数の行列の積をの関数を載せます。
Public Function IMMULT(a As Range, b As Range) As Variant
Dim r1 As Integer, r2 As Integer, c1 As Integer, c2 As Integer, nn As Integer
Dim r As Integer, c As Integer
Dim cr As Integer, cc As Integer
Dim n As Integer
Dim mm() As Variant

r1 = a.Rows.Count
r2 = b.Rows.Count

c1 = a.Columns.Count
c2 = b.Columns.Count


If (c1 = r2) Then

nn = c1

Else

Exit Function

End If

cr = r1
cc = c2

ReDim mm(1 To cr, 1 To cc)

For r = 1 To cr
 For c = 1 To cc
 
mm(r, c) = 0
 
 For n = 1 To nn
  
  mm(r, c) = IMSUMa(mm(r, c), IMPRODUCTa(a.Cells(r, n), b.Cells(n, c)))
 
 Next
 Next
 Next
 
 IMMULT = mm
 
 
End Function
逆行列の関数の使い方と、行列の積の使い方を、ちょっと書いておきます。
逆行列を表示するセルを反転させて起きます。
左上のセルにユーザー定義で作った
IMINVERS関数を選択します。
逆行列を求めるもともとの行列を選択します。
ここで、OKボタンを押してはいけません。
戻り値が、配列変数なので、
CTRL+SHFTキーを押しながら、
ENTERきーを押します

計算が上手くいくと、逆行列が、シートに
表示されます。

行列の積の関数の使い方は、逆行列と同様に、まず、計算結果を表示するセルを反転させておきます。
かけあわせる、セルを選択した後、
逆行列と同様に、
CTRL+SHFTキーを押しながら、
ENTERきーを押します
これで、行列の積が求まります。

以上で、複素数で、交流回路計算の準備が出来ました。
そこで、以上の、関数を利用して、交流回路計算の例を書きたいと思います。