f= Mp][p];
これ、コンパイルエラーです。
#include
や main
も含むコンパイル可能なコードを提示してください。
次のコードは参考になりますか?
C
1#include <stdio.h>
2
3#define n 3
4
5void inverse(double M[n][n], double N[n][n])
6{
7 for (int p = 0; p < n; p++) {
8 double f = M[p][p];
9 for (int i = 0; i < n; i++) {
10 M[p][i] /= f;
11 N[p][i] /= f;
12 }
13 for (int i = 0; i < n; i++) {
14 if (p != i) {
15 double f = M[i][p];
16 for (int k = 0; k < n; k++) {
17 M[i][k] -= M[p][k] * f;
18 N[i][k] -= N[p][k] * f;
19 }
20 }
21 }
22 }
23}
24
25void print(double a[n][n])
26{
27 for (int i = 0; i < n; i++) {
28 for (int j = 0; j < n; j++) printf(" %8.3f", a[i][j]);
29 putchar('\n');
30 }
31}
32
33int main(void)
34{
35 double M[3][3] = {
36 { 1, 1, -1 },
37 { -2, 0, 1 },
38 { 0, 2, 1 },
39 };
40 double N[3][3] = {
41 { 1, 0, 0 },
42 { 0, 1, 0 },
43 { 0, 0, 1 },
44 };
45 inverse(M, N);
46 puts("逆行列");
47 print(N);
48 puts("単位行列");
49 print(M);
50}
実行結果
text
1逆行列
2 -0.500 -0.750 0.250
3 0.500 0.250 0.250
4 -1.000 -0.500 0.500
5単位行列
6 1.000 0.000 0.000
7 0.000 1.000 0.000
8 0.000 0.000 1.000
double f = M[p][p];
の f が 0 だと、割り算できません。
本当はその対策も必要です。