C語言計算逆矩陣

2022-07-30 10:21:12 字數 3183 閱讀 4876

花了4天寫的,不過三天在重學線代。

1 #include2 #include//

操作記憶體

3 #include//

pow()函式,計算-1的n次方,可以不用這個函式,偷懶使用現成的45

/*6顯示矩陣

7matrix: 矩陣

8order: 階數9*/

10void showmatrix(float** matrix, int

order)

1116 printf("

|\n"

);17}18

}1920/*

21交換兩行

22一開始想使用初等行變換計算,此函式可以刪除,用不到

23x1:調換第一行

24x2:調換第二行

25order:矩陣階數

26matrix:矩陣

27*/

28void replacerow(int x1, int x2, int order, float **matrix)

2938}39

40/*

41轉置矩陣

42matrix: 矩陣

43order: 階數

44*/

45void transposematrix(float** matrix, int

order)

4654}55

}5657/*

58獲取除了某行某列的矩陣

59oldmatrix: 原本矩陣

60newmatrix: 新矩陣

61row: 要刪除行

62col: 要刪除列

63order: 階數

64*/

65void

get(float** oldmatrix, float** newmatrix, int row, int col, int

order)

6675

if (j >= col && w == 0)

7677 newmatrix[i][j] = oldmatrix[i+a][j+b];78}

79 a = 0;b = 0

;80 z = 0;w = 0;81

}82}83

84/*

85計算行列式

86matrix: 矩陣

87order: 階數

88*/

89float calc(float** matrix, int

order)

9098

else

105 order += 1

;106

107//

迴圈展開第一行

108for (j = 0; j < order; j++)

114115

//釋放記憶體

116for (i = 0; i < order-1; ++i)free(*(matrixlow +i));

117}

118119

return

num;

120}

121122

123/*

124主函式

125*/

126int

main()

127143

144//

獲取輸入

145for (i = 0; i < order; i++)

150}

151152

//計算並顯示det

153 det =calc(matrix, order);

154 printf("

\ndet值為:%f

",det);

155//

0不能做除數

156if (det == 0

) 157 printf("

\n矩陣接近奇異值,結果可能不準確!");

158 printf("

\n\n");

159160

//顯示輸入矩陣

161 printf("

\n輸入的矩陣是:\n\n");

162showmatrix(matrix, order);

163164

//申請二維陣列儲存結果

165float** rmatrix = (float**)malloc(sizeof(float*) *order);

166for (i = 0; i < order; i++)

169170

171//

開始計算

172if (order == 2

) 180

else

195 order += 1

;

196197

//獲取除了i,j行的值組成行列式

198get

(matrix, matrixlow, i, j, order);

199//

計算行列式值除以det

200 rmatrix[i][j] = pow(-1, i + j) * calc(matrixlow, order - 1) /det;

201202

//釋放記憶體

203for (int t = 0; t < order-1; ++t)free(*(matrixlow +t));

204}

205}

206207

}208

209//

顯示逆矩陣

210 printf("

\n\n逆矩陣為:\n\n");

211showmatrix(rmatrix, order);

212213

214///

/ 釋放二維陣列

215for (i = 0; i < order; ++i)free(*(matrix +i));

216for (i = 0; i < order; ++i)free(*(rmatrix +i));

217218

return0;

219 }

求逆矩陣 C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!include define n 10 intgeta int arcs n n int n 按第一行展開計算 a int ans 0 int temp n n int i,j,k for i 0 ifor j 0 j 1 j int t geta...

C 計算矩陣的逆矩陣方法例項分析

1.思路 1 對矩陣進行合法性檢查 矩陣必須為方陣 2 計算矩陣行列式的值 determinant函式 3 只有滿秩矩陣才有逆矩陣,因此如果行列式的值為0 在 中以絕對值小於1e 6做判斷 則終止函式,報出異常 4 求出伴隨矩陣 adjointmatrix函式 5 逆矩陣各元素即其伴隨矩陣各元素除以...

逆矩陣(伴隨矩陣法)C

演算法過程 計算 判斷 a 是否為0 利用原矩陣生成a 伴隨 矩陣,具體 a 二維陣列中第 i j 個元素,除去該行該列,其他元素進入臨時陣列,計算臨時陣列行列式值,即為a i j 最後矩陣a a 即為該矩陣的逆矩陣 原始碼 include include include using namespa...