关于c语言matrix函数的信息

C语言编程:编写一个函数求逆矩阵

#include stdio.h

网页设计是网站建设的前奏,好的网页设计更深度的剖析产品和设计风格定位,结合最新的网页设计流行趋势,与WVI应用标准,设计出具企业表现力,大器而深稳的网站界面设。创新互联公司公司2013年成立,是成都网站建设公司:提供企业网站设计,品牌网站建设,营销型企业网站建设方案,成都响应式网站建设,成都微信小程序,专业建站公司做网站。

#include stdlib.h

#include malloc.h

void MatrixOpp(double *A, int m, int n, double* invmat);

void MatrixInver(double *A, int m, int n, double* invmat);

double Surplus(double A[], int m, int n);

int matrix_inv(double* p, int num, double* invmat);

void MatrixOpp(double A[], int m, int n, double* invmat)

{

int i, j, x, y, k;

double *SP = NULL, *AB = NULL, *B = NULL, X;

SP = (double *) malloc(m * n * sizeof(double));

AB = (double *) malloc(m * n * sizeof(double));

B = (double *) malloc(m * n * sizeof(double));

X = Surplus(A, m, n);

X = 1 / X;

for (i = 0; i  m; i++)

for (j = 0; j  n; j++)

{

for (k = 0; k  m * n; k++)

B[k] = A[k];

{

for (x = 0; x  n; x++)

B[i * n + x] = 0;

for (y = 0; y  m; y++)

B[m * y + j] = 0;

B[i * n + j] = 1;

SP[i * n + j] = Surplus(B, m, n);

AB[i * n + j] = X * SP[i * n + j];

}

}

MatrixInver(AB, m, n, invmat);

free(SP);

free(AB);

free(B);

}

void MatrixInver(double A[], int m, int n, double* invmat)

{

int i, j;

double *B = invmat;

for (i = 0; i  n; i++)

for (j = 0; j  m; j++)

B[i * m + j] = A[j * n + i];

}

double Surplus(double A[], int m, int n)

{

int i, j, k, p, r;

double X, temp = 1, temp1 = 1, s = 0, s1 = 0;

if (n == 2)

{

for (i = 0; i  m; i++)

for (j = 0; j  n; j++)

if ((i + j) % 2)

temp1 *= A[i * n + j];

else

temp *= A[i * n + j];

X = temp - temp1;

}

else

{

for (k = 0; k  n; k++)

{

for (i = 0, j = k; i  m, j  n; i++, j++)

temp *= A[i * n + j];

if (m - i)

{

for (p = m - i, r = m - 1; p  0; p--, r--)

temp *= A[r * n + p - 1];

}

s += temp;

temp = 1;

}

for (k = n - 1; k = 0; k--)

{

for (i = 0, j = k; i  m, j = 0; i++, j--)

temp1 *= A[i * n + j];

if (m - i)

{

for (p = m - 1, r = i; r  m; p--, r++)

temp1 *= A[r * n + p];

}

s1 += temp1;

temp1 = 1;

}

X = s - s1;

}

return X;

}

int matrix_inv(double* p, int num, double* invmat)

{

if (p == NULL || invmat == NULL)

{

return 1;

}

if (num  10)

{

return 2;

}

MatrixOpp(p, num, num, invmat);

return 0;

}

int main()

{

int i, j;

int num;

double *arr=NULL;

double *result=NULL;

int flag;

printf("请输入矩阵维数:\n");

scanf("%d",num);

arr=(double *)malloc(sizeof(double)*num*num);

result=(double *)malloc(sizeof(double)*num*num);

printf("请输入%d*%d矩阵:\n", num, num);

for (i = 0; i  num; i++)

{

for (j = 0; j  num; j++)

{

scanf("%lf", arr[i * num + j]);

}

}

flag = matrix_inv(arr, num, result);

if(flag==0)

{

printf("逆矩阵为:\n");

for (i = 0; i  num * num; i++)

{

printf("%lf\t ", *(result + i));

if (i % num == (num - 1))

printf("\n");

}

}

else if(flag==1)

{

printf("p/q为空\n");

}

else

{

printf("超过最大维数\n");

}

system("PAUSE");

free(arr);

free(result);

return 0;

}

c语言printmatrix用法

c语言printmatrix用法

PrintMatrix 不是一个系统自带的函数,而是一个用户自定义函数,怎么用要看怎么定义的了,贴代码上来。

【针对补充问题的回答】

Public Sub PrintMatrix(PictureX As Object, ArrayX%(), PromptX$, BeginJ%, EndJ%)

PictureX.Cls

PictureX.Print Tab(10); PromptX vbCrLf "----------------------------"

For i = 1 To 5

For j = BeginJ To EndJ

PictureX.Print Tab(j * 5 - 2); ArrayX(i, j);

Next j

PictureX.Print

Next i

End Sub

用c语言编写一个函数实现矩阵的叉乘

#includestdio.h

void matrix(int a[][100],int a1,int a2,int b[][100],int b1,int b2,int c[][100])

{

int i,j,k;

if(a2!=b1)

{

printf("矩阵的维数错了!\n");

return;

}

for(i=0;ia1;i++)

{

for(j=0;jb2;j++)

{

c[i][j]=0;

for(k=0;ka2;k++)

c[i][j]+=a[i][k]*b[k][j];

}

}

}

int main()

{

int a1,a2,b1,b2,a[100][100],b[100][100],c[100][100],i,j;

printf("输入矩阵一的行数和列数(不超过100):\n");

scanf("%d%d",a1,a2);

for(i=0;ia1;i++)

{

for(j=0;ja2;j++)

scanf("%d",a[i][j]);

}

printf("输入矩阵一的行数和列数(不超过100):\n");

scanf("%d%d",b1,b2);

for(i=0;ib1;i++)

{

for(j=0;jb2;j++)

scanf("%d",b[i][j]);

}

matrix(a,a1,a2,b,b1,b2,c);

printf("结果:\n");

for(i=0;ia1;i++)

{

for(j=0;jb2;j++)

printf("%d ",c[i][j]);

printf("\n");

}

return 0;

}

用C语言编写程序(两个矩阵相加)

用C语言编写程序(两个矩阵相加)代码如下:

/**

MatrixAddition.c

实现两个矩阵相加

*/

#includestdio.h

const int COLS=3;

void printMatirx(int *pArray,int rows,int cols);

void printMatirx2(int (*pArray)[COLS],int rows);

int main()

{

int A[3][4]={{15,10,9,12},

{18,14,8,7},

{16,13,6,11}};

printf("矩阵A=\n");

printMatirx(A,3,4);

int B[3][4]={{4,3,5,2},

{0,9,6,1},

{5,7,2,6}};

printf("矩阵B=\n");

printMatirx(B,3,4);

int C[3][4];

int i,j;

//矩阵相加:两个矩阵必须行数和列数一样才能相加,

//和矩阵的每个元素分别是两个矩阵对应的元素的和

printf("矩阵A+矩阵B=\n");

for(i=0;i3;i++)//控制行

{

for(j=0;j4;j++)

{

C[i][j]=A[i][j]+B[i][j];

//printf("%3d",C[i][j]);//输出结果

}

//        printf("\n");

}

int (*p)[COLS]=C;

printMatirx2(p,3);

/*结果应为:

19 13 14 14

18 23 14  8

21 20  8 17

*/

printf("矩阵C-矩阵A=\n");

for(i=0;i3;i++)//控制行

{

for(j=0;j4;j++)

{

printf("%3d",C[i][j]-A[i][j]);//输出结果

}

printf("\n");

}

/*结果应为:

4  3  5  2

0  9  6  1

5  7  2  6

*/

//矩阵数乘:

int D[3][4];

printf("矩阵D:\n");

for(i=0;i3;i++)//控制行

{

for(j=0;j4;j++)

{

D[i][j]=1;

printf("%d\t", D[i][j]);//输出结果

}

printf("\n");

}

int mul;

printf("矩阵D数乘以:");

scanf("%d",mul);

printf("矩阵D数乘以%d=\n",mul);

for(i=0;i3;i++)//控制行

{

for(j=0;j4;j++)

{

D[i][j]=D[i][j]*mul;

printf("%d\t", D[i][j]);//输出结果

}

printf("\n");

}

return 0;

}

扩展资料:

C语言矩阵加减法函数:

void matrix_a(double **a_matrix, const double **b_matrix, const double **c_matrix,int krow, int kline, int ktrl)

////////////////////////////////////////////////////////////////////////////

//  a_matrix=b_matrix+c_matrix

//   krow   :行数

//   kline  :列数

//   ktrl   :大于0: 加法  不大于0:减法

////////////////////////////////////////////////////////////////////////////

{

int k, k2;

for (k = 0; k krow; k++) 

{

for(k2 = 0; k2 kline; k2++)

 

{

a_matrix[k][k2] = b_matrix[k][k2]

         

+ ((ktrl 0) ? c_matrix[k][k2] : -c_matrix[k][k2]);

}

}

}

参考资料:

百度百科-C语言


分享标题:关于c语言matrix函数的信息
本文来源:http://pwwzsj.com/article/ddgigip.html