学数学也要学点偷懒的技术(二)

单车踏过落叶

单车踏过落叶

2016-02-19 15:56

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的学数学也要学点偷懒的技术(二),过去的都会过去,迎接崭新的开始,释放更美好的自己。
    老师刚教逆矩阵,我就觉得求逆矩阵很难算,假如求四阶以上的逆矩阵,至少也要四五分钟才能解决。于是我想到用C来解决了。顺便为自己上次写的文章升升级也好。说写就写,可我很快发现找求逆矩阵的算法并不轻易。想了很久,没办法,就去图书馆查资料。找是找到了“高斯全选主元法”在一本久版的《c常用算法程序集》上,可是看了半个小时,还是看不明白,想必大师之作不让我这小人物看懂。最后我下决心要自己找一个好的算法。   工夫不负有心人,我终于找到求逆矩阵的算法,而且有两种。这两种的算法都要调用到第一次写的《学数学也要学点偷懒的技术》里的函数。下面我只用了其中的一种算法。   数学依据是:逆矩阵=原矩阵的N阶行列式值的倒数*原矩阵的伴随阵。   条件:原矩阵的N阶行列式的值不能为零     请大家多多指教。   QQ:258220980
  #include stdio.h
  #include math.h
  #include conio.h
  #include stdlib.h#define N  10
  #define M 10
  #define S 10void njie_valu();
  void njief_value();
  float Dvalue(float a[N][N],int n);
  void juzhench();
  void nijuzhen();void nijuzhen()
  {
      int i,j,n,m1,m2,n1,n2 ;
      int k ;
      float x[(N-1)*(N-1)];
      float y,s ;
      float a1[N][N],b[N][N],a[N][N],A[N][N],p[N][N],c[N][N];
      clrscr();
      printf("请输入是几阶矩阵:  ");
      scanf("%d",&n);
      printf("请以正确的顺序输入矩阵:");
      for(i=0;in;i++)
      {
          for(j=0;jn;j++)
          {
              scanf("%f",&a[i][j]);
          }
      }
      for(i=0;in;i++)
      {
          for(j=0;jn;j++)
          {
              printf("%f  ",a[i][j]);
          }
          printf("");
      }
      getch();
   if(Dvalue(a,n)==0)
   {
    printf("D=0,没有逆矩阵!");
    exit(1);
   }
   s=1.0/Dvalue(a,n);
      for(m1=0;m1n;m1++)
      {
          for(n1=0;n1n;n1++)
          a1[m1][n1]=a[m1][n1];
      }
      for(i=0;in;i++)
      {
          for(j=0;jn;j++)
          {
              /*位于i行j列的元素变为0*/
              for(m1=0;m1n;m1++)
              {
                  for(n1=0;n1n;n1++)
                  if((m1==i)(n1==j))
                  a1[m1][n1]=0 ;
              }
              k=0 ; 
               for(m1=0;m1n;m1++)
              {
                  for(n1=0;n1n;n1++)
                  {
                      if(a1[m1][n1]!=0)
                      {
                          x[k]=a1[m1][n1];
                          k++;
                      }
                  }
              }
              k=0 ;
              for(m2=0;m2n-1;m2++)
              {
                  for(n2=0;n2n-1;n2++)
                  {
                      b[m2][n2]=x[k];
                      k++;
                  }
              }
              /*对数组a1从新赋值*/
              for(m1=0;m1n;m1++)
              {
                  for(n1=0;n1n;n1++)
                  a1[m1][n1]=a[m1][n1];
              }
              y=pow(-1,i+j);
              A[i][j]=y*Dvalue(b,n-1);
          }
      }
      printf("A:");
      for(i=0;in;i++)
      {
          for(j=0;jn;j++)
          printf("%f    ",A[j][i]);
          printf("");
      }
      getch();
      printf("1/A=%f  ",s);
   getch();
      for(i=0;in;i++)
      {
          for(j=0;jn;j++)
          c[i][j]=0 ;
      }
   for(i=0;in;i++)
      {
          for(j=0;jn;j++)
          c[i][j]=c[i][j]+A[i][j]*s ;
      }
      printf("要求的逆矩阵是:");
      for(i=0;in;i++)
      {
          for(j=0;jn;j++)
       &n
  
展开更多 50%)
分享

猜你喜欢

学数学也要学点偷懒的技术(二)

编程语言 网络编程
学数学也要学点偷懒的技术(二)

偷懒学鼠绘

PS PS教程
偷懒学鼠绘

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

儿童学数学

电脑网络
儿童学数学

如何教儿童学数学

电脑网络
如何教儿童学数学

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

宝宝学数学的三大误区

电脑网络
宝宝学数学的三大误区

宝宝学数学的方法和细节

分娩
宝宝学数学的方法和细节

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

C++ sizeof 使用规则及陷阱分析

C++ sizeof 使用规则及陷阱分析

一个非常简单的题

一个非常简单的题
下拉加载更多内容 ↓