1. 程式人生 > >【應用C】C語言實現行列式與矩陣的運算系統(+原始碼)

【應用C】C語言實現行列式與矩陣的運算系統(+原始碼)

文章目錄


很久之前的課程小組作業,實際用處不大,因為有Matlab的存在,雖然現在已經不提倡從輪子造起,但是從輪子開始瞭解是必須的,記錄

01 - 行列式和矩陣

1.1 - 行列式定義

  行列式是一個數值,表現為有n2個數,排成n行n列的數表
D = 1

2 3 4
5 6
7 8 9 D= \left\| \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right\|

  n個取自不同行不同列的n個元素乘積的代數和稱為行列式
( 1 ) t a 1 p 1 a 2 p 2 a n p n \sum {(-1)^t}{a_{1p_1}}{a_{2p_2}}{\cdots}{a_{np_n}}

1.2 - 矩陣定義

  矩陣是一個數表,表現為有 m × n {m}\times{n} 個數 a i j {a_{ij}} i = 1 2 m j = 1 2 n i=1,2,{\cdots},m;j=1,2,{\cdots},n )排成 m m n n 列,矩陣是一個整體,總是加一個括弧表示
A = { 1 2 3 4 5 6 7 8 9 } A= \left\{ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right\}

02 - 基本運算

  不像Matlab這麼強大,C語言只實現基本功能就可以,因為再複雜的運算都由基本功能組成

2.1 - 行列式基本運算

  1、行列式的值
  2、轉置行列式
  3、行列式中第i行(列)乘以k
  4、互換行列式的兩行 (列)
  5、行列式化為上三角
  6、第(i,j)元的代數餘子式
  7、第j行(列)乘以k後,加到第i行(列)上
  8、檢查行列式D是否能拆分成D1+D2(行/列)

2.2 - 矩陣基本運算

  1、逆矩陣
  2、轉置矩陣
  3、矩陣的秩
  4、兩個矩陣相乘
  5、兩個矩陣相加
  6、交換矩陣的兩行
  7、矩陣的某行乘以k
  8、常數k與矩陣相乘
  9、矩陣化為行階梯型
  10、矩陣化為行最簡型
  11、矩陣對應的行列式的值
  12、矩陣的第i行乘以k,加到第j行

03 - 資料結構

  抽象出行列式和矩陣的相似點,構建以下結構體

typedef struct DetOrMar
{
	//通用
	NuDe con[Defaul_size][Defaul_size];	
	char type;			//m-矩陣,d-行列式
	int row;			//行數 
	int col;			//列數 
	
	//行列式相關
	int value;			//行列式的值
	int Aij_value;		//代數餘子式的值
}DorM;

  NuDe其實是一個分子分母分開存放的結構體(不知道為什麼當初用這個英文,這是躶體的意思,看到結構體後就知道,原來是分子/分母英文縮寫的組合nude,奇葩),分子分母分開存放的原因是防止精度丟失,能使用整數運算就不要使用浮點數

typedef struct Elem	 
{
	int deno;			//分母 
	int nume;			//分子 
}NuDe;

04 - 結果測試

4.1 - 選單

Alt

資料匯入
  

Alt

型別選擇
  

Alt

行列式運算
  

Alt

矩陣運算
  

4.2 - 行列式

D = 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 D= \left\| \begin{matrix} 1 & 2 & 3 & 4\\ 2 & 3 & 4 & 1 \\ 3 & 4 & 1 & 2 \\ 4 & 1 & 2 & 3 \end{matrix} \right\|
Alt

Alt

4.3 - 矩陣

A = { 4 1 2 2 2 1 3 1 1 } A= \left\{ \begin{matrix} 4 & 1 & -2 \\ 2 & 2 & 1 \\ 3 & 1 & -1 \end{matrix} \right\}

Alt

Alt

Alt

05 - 原始碼下載

  小組課程作業,連結:百度網盤  提取碼:xt1m

06 - 總結

  • 實現了行列式和矩陣的基本運算
  • 輸入比較麻煩,可以改一下檔案讀入的掃描方式
  • 細節有問題,存在記憶體洩露的問題