以上的數學式的證明並不難,舉二個實例加以説明。
【實例一】
using System;
using Matrix_0;
namespace ConsoleApp3
{
internal class Program
{
static void Main(string[] args)
{
double[,] Ap = { {4, -2, -2}, {-2, -4, 4}, {-4, 2, 8} };
ReMatrix A = new ReMatrix(Ap);
EIG eig = new EIG(A);
ReMatrix Q = eig.MatrixQ;
Console.Write("\nQ : \n{0}\n", new PR(Q));
ReMatrix D = eig.MatrixD;
Console.Write("\nD: \n{0}\n", new PR(D));
}
}
}
/* 執行結果
Q :
0.37030 0.20177 0.82439
-0.29682 0.97534 0.09119
-0.88021 -0.08948 0.55863
D:
10.35719 0.00000 0.00000
0.00000 -4.78071 0.00000
0.00000 0.00000 2.42352
*/
【實例二】
using System;
using Matrix_0;
namespace ConsoleApp3
{
internal class Program
{
static void Main(string[] args)
{
double[,] Ap = { {4, -2, 12}, {-2, -4, 4}, {-4, 2, 8} };
ReMatrix A = new ReMatrix(Ap);
EIG eig = new EIG(A);
CxMatrix Q = eig.CxMatrixQ;
Console.Write("\nQ : \n{0}\n", new PR(Q));
CxMatrix D = eig.CxMatrixD;
Console.Write("\nD: \n{0}\n", new PR(D));
// A = Q * D * Qi ; 複數相乘的結果雖然是複數,但其虛數值為零,
// 故轉換(cast)為實數矩陣,矩陣B與原來輸入的矩陣A相同。
ReMatrix B = (ReMatrix)(Q * D * ~Q);
Console.Write("\nB:\n{0}\n", new PR(B));
}
}
}
/* 執行結果
Q :
0.84227 + 0.00000i, 0.84227 + 0.00000i, 0.29317 + 0.00000i
0.01280 + 0.17598i, 0.01280 - 0.17598i, 0.95435 + 0.00000i
0.17250 + 0.47926i, 0.17250 - 0.47926i, -0.05726 + 0.00000i
D:
6.42719 + 6.41024i, 0.00000 + 0.00000i, 0.00000 + 0.00000i
0.00000 + 0.00000i, 6.42719 - 6.41024i, 0.00000 + 0.00000i
0.00000 + 0.00000i, 0.00000 + 0.00000i, -4.85437 + 0.00000i
B:
4.00000 -2.00000 12.00000
-2.00000 -4.00000 4.00000
-4.00000 2.00000 8.00000
請按任意鍵繼續 . . .
*/
using System;
using Matrix_0;
namespace ConsoleApp4
{
internal class Program
{
static void Main(string[] args)
{
double[,] A0 = { {1, 2, 3}, {2, 5, 6}, {3, 4, 3}};
Console.Write("\nA0 矩陣,即R mXn [R3x3] :\n{0}", new PR(A0));
double[,] A1 = { {1}, {2}, {3} };
Console.Write("\nA1 行向量,也是矩陣,即[R3X1] :\n{0}", new PR(A1));
double[,] A2 = { {1, 2, 3} };
Console.Write("\nA2 列向量,也是矩陣,即[R1X3] :\n{0}", new PR(A2));
double[,] A3 = { {3} };
Console.Write("\nA3 雖然僅有一個元素,但也是矩陣,即[R1X1] :\n{0}", new PR(A3));
double[] A4 = { 1, 2, 3 };
Console.Write("\nA4 列向量,印出結果與A2完全相同,但型態不同[R1]:\n{0}", new PR(A4));
// *** 如何輸入複數矩陣,並設定複數矩陣變數B[C2X3] ***
double[,] Bre = {{4, 5, -3}, {-3, 4, 1}};
double[,] Bim = {{-9, 8, -4}, {2, -5, 9}};
CxMatrix B = new CxMatrix(Bre, Bim);
Console.Write("\n複數矩陣變數 B [C2X3] :\n{0}\n", new PR(B));
}
}
}
/* 輸出結果 :
A0 矩陣,即R mXn [R3x3] :
1.00000 2.00000 3.00000
2.00000 5.00000 6.00000
3.00000 4.00000 3.00000
A1 行向量,也是矩陣,即[R3X1] :
1.00000
2.00000
3.00000
A2 列向量,也是矩陣,即[R1X3] :
1.00000 2.00000 3.00000
A3 雖然僅有一個元素,但也是矩陣,即[R1X1] :
3.00000
A4 列向量,印出結果與A2完全相同,但型態不同[R1]:
1.00000 2.00000 3.00000
複數矩陣變數 B [C2X3] :
4.00000 - 9.00000i, 5.00000 + 8.00000i, -3.00000 - 4.00000i
-3.00000 + 2.00000i, 4.00000 - 5.00000i, 1.00000 + 9.00000i
請按任意鍵繼續 . . .
*/
using System;
using Matrix_0;
namespace ConsoleApp5
{
internal class Program
{
static void Main(string[] args)
{
double[,] Are = { {-3, 5, 8}, {2, -5, 9}, {6, 9, 2} };
double[,] Aim = { {-6, 7, 9}, {4, -5, -2}, {-3, 5, -4} };
// 建構任意C3X3的複數矩陣 A :
CxMatrix A = new CxMatrix(Are, Aim);
Console.Write("\n複數矩陣A :\n{0}", new PR(A));
// 建構複數矩陣A的逆矩陣 Ai :
CxMatrix Ai = ~A;
Console.Write("\n複數矩陣Ai :\n{0}", new PR(Ai));
// 複數矩陣 B = A * Ai , 亦即 B = A * ~A ;
CxMatrix B = A * Ai;
Console.Write("\n複數矩陣B :\n{0}", new PR(B));
// 因爲複數矩陣B的虛數部分為零,故可以轉換(cast)為實數矩陣 C ,
// 即 Identity Matrix 。 *** Check! OK ***
ReMatrix C = (ReMatrix)B;
Console.Write("\n實數矩陣C :\n{0}\n", new PR(C));
}
}
}
/* 輸出結果 :
複數矩陣A :
-3.00000 - 6.00000i, 5.00000 + 7.00000i, 8.00000 + 9.00000i
2.00000 + 4.00000i, -5.00000 - 5.00000i, 9.00000 - 2.00000i
6.00000 - 3.00000i, 9.00000 + 5.00000i, 2.00000 - 4.00000i
複數矩陣Ai :
-0.02874 + 0.06505i, 0.06936 + 0.02633i, 0.08584 - 0.00831i
-0.01739 - 0.02187i, -0.03348 + 0.05402i, 0.05789 + 0.00493i
0.04098 - 0.01439i, 0.06137 - 0.01162i, 0.00664 + 0.00007i
複數矩陣B :
1.00000 + 0.00000i, 0.00000 + 0.00000i, 0.00000 + 0.00000i
0.00000 + 0.00000i, 1.00000 + 0.00000i, 0.00000 + 0.00000i
0.00000 + 0.00000i, 0.00000 + 0.00000i, 1.00000 + 0.00000i
實數矩陣C :
1.00000 0.00000 0.00000
0.00000 1.00000 0.00000
0.00000 0.00000 1.00000
請按任意鍵繼續 . . .
*/
origin/main
origin/main
origin/main
origin/main