求一个四乘四矩阵的逆矩阵

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <malloc.h>
 4 
 5 int GJ(int, double **);
 6 double **TwoArrayAlloc(int, int);
 7 void TwoArrayFree(double **);
 8 
 9 void main()
10 {
11     int i, j, n;
12     double **a;
13     n = 4;
14     a = TwoArrayAlloc(n, n);
15 
16     a[0][0] = 5;    a[0][1] = 7;    a[0][2] = 6;    a[0][3] = 5;
17     a[1][0] = 7;    a[1][1] = 10;    a[1][2] = 8;    a[1][3] = 7;
18     a[2][0] = 6;    a[2][1] = 8;    a[2][2] = 10;    a[2][3] = 9;
19     a[3][0] = 5;    a[3][1] = 7;    a[3][2] = 9;    a[3][3] = 10;
20     if (!GJ(n, a))
21     {
22         printf("矩阵求逆失败\n");
23         exit(1);
24     }
25     printf("该矩阵的逆为:\n");
26     for (i = 0; i<n; i++)
27     {
28         for (j = 0; j<n; j++)
29             printf("%.2f\t", a[i][j]);
30         printf("\n");
31     }
32 }
33 
34 int GJ(int n, double **a)
35 {
36     int i, j, k;
37     double p, q, *h;
38     h = (double *)calloc(n, sizeof(double));
39     if (h == NULL)
40     {
41         printf("内存分配失败\n");
42         exit(1);
43     }
44     for (k = n; k >= 1; k--)
45     {
46         p = a[0][0];
47         if (p <= 0)
48         {
49             free(h);
50             return (0);
51         }
52         for (i = 2; i <= n; i++)
53         {
54             q = a[i - 1][0];
55             if (i>k)
56                 h[i - 1] = q / p;
57             else
58                 h[i - 1] = -q / p;
59             for (j = 2; j <= i; j++)
60                 a[i - 2][j - 2] = a[i - 1][j - 1] + q*h[j - 1];
61         }
62         a[n - 1][n - 1] = 1 / p;
63         for (i = 2; i <= n; i++)
64             a[n - 1][i - 2] = h[i - 1];
65     }
66     free(h);
67     return(1);
68 }
69 
70 double **TwoArrayAlloc(int r, int c)
71 {
72     double *x, **y;
73     int n;
74     x = (double *)calloc(r*c, sizeof(double));
75     y = (double **)calloc(r, sizeof(double*));
76     for (n = 0; n <= r - 1; ++n)
77         y[n] = &x[c*n];
78     return (y);
79 }
80 
81 void TwoArrayFree(double **x)
82 {
83     free(x[0]);
84     free(x);
85 }

 

posted @ 2019-10-08 00:01  insist钢  阅读(1922)  评论(1编辑  收藏  举报