using System; namespace Science.Mathematics.LinearAlgebra { /// /// LinearEquation /// public class LinearEquationComplex { private Complex[] s; private Matrix B; private Vector c; public LinearEquationComplex(MatrixComplex A, VectorComplex b) { s = new Complex[b.Size]; c = new Vector(2*b.Size); for (int i = 0; i < b.Size; i++) { c[i] = b[i].Real; c[i + b.Size] = b[i].Imaginary; } B = new Matrix(2*A.SizeOfRow, 2*A.SizeOfColumn); for (int i = 0; i < A.SizeOfRow; i++) for (int j = 0; j < A.SizeOfColumn; j++) { B[i, j] = A[i, j].Real; B[A.SizeOfRow + i, j] = A[i, j].Imaginary; B[i, A.SizeOfColumn + j] = -A[i, j].Imaginary; B[A.SizeOfRow + i, A.SizeOfColumn + j] = A[i, j].Real; } } public void Solve() { LinearEquation obj = new LinearEquation(B,c); obj.Solve(); for (int i = 0; i < s.Length; i++) { s[i] = new Complex(obj.Solution[i], obj.Solution[s.Length+i]); } } public Complex[] Solution { get{ return s; } } } }