编一程序,计算3*3阶矩阵的逆矩阵。哪位高手给解答下?

JavaScript015

编一程序,计算3*3阶矩阵的逆矩阵。哪位高手给解答下?,第1张

楼上的是矩阵的转置,不是求逆矩阵!

c语言的方阵求逆的一个完整的程序如下,在tc2.0下运行良好:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#define MAX 255

void MatrixMul(a,b,m,n,k,c) /*实矩阵相乘*/

int m,n,k/*m:矩阵A的行数, n:矩阵B的行数, k:矩阵B的列数*/

double a[],b[],c[]/*a为A矩阵, b为B矩阵, c为结果,即c = AB */

{

int i,j,l,u

/*逐行逐列计算乘积*/

for (i=0i<=m-1i++)

for (j=0j<=k-1j++)

{

u=i*k+jc[u]=0.0

for (l=0l<=n-1l++)

c[u]=c[u]+a[i*n+l]*b[l*k+j]

}

return

}

int brinv(a,n) /*求矩阵的逆矩阵*/

int n/*矩阵的阶数*/

double a[]/*矩阵A*/

{

int *is,*js,i,j,k,l,u,v

double d,p

is=malloc(n*sizeof(int))

js=malloc(n*sizeof(int))

for (k=0k<=n-1k++)

{

d=0.0

for (i=ki<=n-1i++)

/*全选主元,即选取绝对值最大的元素*/

for (j=kj<=n-1j++)

{

l=i*n+jp=fabs(a[l])

if (p>d) { d=pis[k]=ijs[k]=j}

}

/*全部为0,此时为奇异矩阵*/

if (d+1.0==1.0)

{

free(is)free(js)printf(" >>This is a singular matrix, can't be inversed!\n")

return(0)

}

/*行交换*/

if (is[k]!=k)

for (j=0j<=n-1j++)

{

u=k*n+jv=is[k]*n+j

p=a[u]a[u]=a[v]a[v]=p

}

/*列交换*/

if (js[k]!=k)

for (i=0i<=n-1i++)

{

u=i*n+kv=i*n+js[k]

p=a[u]a[u]=a[v]a[v]=p

}

l=k*n+k

a[l]=1.0/a[l]/*求主元的倒数*/

/* a[kj]a[kk] ->a[kj] */

for (j=0j<=n-1j++)

if (j!=k)

{

u=k*n+ja[u]=a[u]*a[l]

}

/* a[ij] - a[ik]a[kj] ->a[ij] */

for (i=0i<=n-1i++)

if (i!=k)

for (j=0j<=n-1j++)

if (j!=k)

{

u=i*n+j

a[u]=a[u]-a[i*n+k]*a[k*n+j]

}

/* -a[ik]a[kk] ->a[ik] */

for (i=0i<=n-1i++)

if (i!=k)

{

u=i*n+ka[u]=-a[u]*a[l]

}

}

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

{

/*恢复列*/

if (js[k]!=k)

for (j=0j<=n-1j++)

{

u=k*n+jv=js[k]*n+j

p=a[u]a[u]=a[v]a[v]=p

}

/*恢复行*/

if (is[k]!=k)

for (i=0i<=n-1i++)

{

u=i*n+kv=i*n+is[k]

p=a[u]a[u]=a[v]a[v]=p

}

}

free(is)free(js)

return(1)

}

print_matrix(a,n)/*打印的方阵a的元素*/

int n/*矩阵的阶数*/

double a[]/*矩阵a*/

{

int i,j

for (i=0i<ni++)

{

for (j=0j<nj++)

printf("%13.7f\t",a[i*n+j])

printf("\n")

}

}

main()

{

int i,j,n=0

double A[MAX],B[MAX],C[MAX]

static double a[4][4]={ {0.2368,0.2471,0.2568,1.2671},

{1.1161,0.1254,0.1397,0.1490},

{0.1582,1.1675,0.1768,0.1871},

{0.1968,0.2071,1.2168,0.2271}}

static double b[4][4],c[4][4]

clrscr()

puts("**********************************************************")

puts("* This program is to inverse a square matrix A(nxn). *")

puts("**********************************************************")

while(n<=0)

{

printf(" >>Please input the order n of the matrix (n>0): ")

scanf("%d",&n)

}

printf(" >>Please input the elements of the matrix one by one:\n >>")

for(i=0i<n*ni++)

{

scanf("%lf",&A[i])

B[i]=A[i]

}

for(i=0i<4i++)

for(j=0j<4j++)

b[i][j]=a[i][j]

i=brinv(A,n)

if (i!=0)

{

printf(" Matrix A:\n")

print_matrix(B,n)

printf("\n")

printf(" A's Inverse Matrix A-:\n")

print_matrix(A,n)

printf("\n")

printf(" Product of A and A- :\n")

MatrixMul(B,A,n,n,n,C)

print_matrix(C,n)

}

printf("\n Press any key to quit...")

getch()

}

/**

* @author 熙熙

* @2011-4-20

*/

public class JuZhenZhuanZhi {

/**

* @param args

*/

public static void main(String[] args) {

int a[][]={

{11,12,13}

,{21,22,23}

,{31,32,33}

}

System.out.println("转置前的矩阵:")

print(a)

zhuanZhi(a)

System.out.println("转置后的矩阵:")

print(a)

}

public static void zhuanZhi(int a[][]){

for(int i=0i<a.lengthi++){

for(int j=i+1j<a[i].lengthj++){

int tem = a[i][j]

a[i][j] = a[j][i]

a[j][i] = tem

}

}

}

public static void print(int a[][]){

for(int i=0i<a.lengthi++){

int j=0

for(j<a[i].length-1j++){

System.out.print(a[i][j]+",")

}

System.out.println(a[i][j])

}

}

}

#include "stdio.h"

int main()

{

   int a[3][3]={1,2,3,4,5,6,7,8,9}

   int i,j,sum1=1,sum2=1

   printf("Matrix is:\n")

   for(i=0i<3i++)

   {

        for(j=0j<3j++)

           printf("%d ",a[i][j])

        printf("\n")

   }

   for(i=0i<3i++)

      for(j=0j<3j++)

      {

        if(i==j)

             sum1*=a[i][j]

         if(i+j==2)

             sum2*=a[i][j]

      }

    printf("主对角线元素乘积:%d\n副对角线元素乘积:%d\n",sum1,sum2)

}

主对角线:1*5*9==45正确

副对角线:3*5*7==105