花了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...