利用“三角化”计算行列式快速求解程序(验证过很多题目的,绝对准确)

#include<iostream>
#include<cmath>
using namespace
std;
void main()
{
 //输入行列式开始
 int
n,i,j,a[10][10],T[10],max[10],b[10],k,q,p;
 float
t[10][10],c,sum=-1;
 cout<<"阶数:";
 cin>>n;
 cout<<"行列式:"<<endl;
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=n;j++)
  {
   cin>>a[i][j];
  }
 }
 //输入行列式阶数
 for(j=1;j<=n;j++)//从第一列开始找起
 {
  T[j]=0;     
//将计数器初始化为0
  for(i=1;i<=n;i++)
  {
   if(a[i][j]==0)//在j列中每找到一个0就计数
   {
    T[j]++;//统计第j列中0的个数
   }
  }
 }
 //此循环结束后已经将每列的0的个数存储到数组T[j]中
 //开始比较每列0的个数并排列
 for(i=1;i<=n;i++)//经过n次循环将T[j]从大到小排列
 {
  max[i]=-100;
  for(j=1;j<=n;j++)
  {
   max[i]=(max[i]>T[j])?max[i]:T[j];
  }
  //找出第i个最大值
  for(j=1;j<=n;j++)//通过一个循环找到第i个最大值对应的列数j
j是对应的列数
  {
   if(max[i]==T[j])
   {
    T[j]=-200;//将T[j]设为较小的数
    cout<<"第"<<j<<"列:"<<max[i]<<"个0"<<endl;
    
    b[i]=j;
    break;
   }
  }
 }
 cout<<endl;
 //打印新的行列式
 cout<<endl;
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=n;j++)
  {
   t[i][j]=a[i][b[j]];
   cout<<t[i][j]<<"
";
  }
  cout<<endl;
 }
 cout<<endl;
 //换列结束,将新的行列式重新存储在一个新的数组中t[][]
 for(j=1;j<n;j++)//列
 {
  for(k=j+1;k<=n;k++)//j列需化为0的行
  {
   if(t[k][j]!=0)
   {
    for(i=j;i<=n;i++)//行
    {
     if(t[i][j]!=0&&i!=k)
     {
      p=0;
      c=t[k][j]/t[i][j];
      for(q=1;q<=n;q++)//列
      {
       t[k][q]=t[k][q]-c*t[i][q];
       p++;
      }
      if(p==n)
      {
       break;
      }
     }
    }
   }
  }
 }
 cout<<"原行列式经过上三角化简后的新行列式为如下:"<<endl;
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=n;j++)
  {
   cout<<t[i][j]<<" 
";
  }
  cout<<endl;
 }
 for(i=1;i<=n;i++)
 {
  sum=t[i][i]*sum;
 }
   
cout<<endl;
 cout<<"计算结果="<<sum<<endl;
}

利用“三角化”计算行列式快速求解程序(验证过很多题目的,绝对准确)

时间: 2024-10-14 05:34:43

利用“三角化”计算行列式快速求解程序(验证过很多题目的,绝对准确)的相关文章

快速求解GCD的三个Trick

[快速求解GCD的三个Trick] 1.(ma,mb)=m(a,b). 2.若(a,b)=1,则(ac,b) = (c,b). 3.(a^n,b^n)=(a,b)^n

【摄影测量学空间后方交会作业】求解程序

#include <stdio.h> #include<cmath>#include<iostream.h>#include<fstream.h> int main(){     double NJZ(double sum[100][100],double l[10]); double x[10],y[10],X[10],Y[10],Z[10],d,D,m,f,T,R,S,r=0,s=0,t=0; ifstream   infile; //定义输入文件类  

Linux 使用core file文件快速定位程序崩溃代码行

问题描述 如果在 Linux下编写程序,有时运行程序的时候程序崩溃,比如说只有"Segmentation fault (core dumped) ",程序比较小的话,还可以一行一行查看,但是如果程序很庞大,一行行查询,效率非常低下.Linux下可以程序可以生成core file文件,借助gdb很快能定位到崩溃的代码行. 解决方案 测试程序,除零操作,程序会崩溃 /* test.c */ #include <stdio.h> #include <stdlib.h>

降阶法计算行列式方法有个地方有Bug(原文也已更正,此为更正后部分)

今天用此函数做方程求解时发现有误,特此更正: /// <summary> /// 降阶法计算行列式 /// </summary> /// <param name="Determinants">N阶行列式</param> /// <param name="ZeroOptimization">是否0优化</param> /// <returns>计算结果</returns>

利用WordPress REST API 开发微信小程序从入门到放弃

自从我发布并开源WordPress版微信小程序以来,很多WordPress网站的站长问有关程序开发的问题,其实在文章:<用微信小程序连接WordPress网站>讲述过一些基本的要点,不过仍然有不少人对一些细节不明白,于是我就想着再写一篇比较全面而基础的教程,主要针对入门级别用户,高手就不用看了. WordPress版“守望轩”微信小程序开放源码地址:https://github.com/iamxjb/winxin-app-watch-life.net 至于标题,请原谅我,我标题党了. Word

【C++探索之旅】第一部分第三课:第一个C++程序

 内容简介 1.第一部分第三课:第一个C++程序 2.第一部分第四课预告:内存的使用 第一个C++程序 经过上两课之后,我们已经知道了什么是编程,编程的语言,编程的必要软件,C++是什么,我们也安装了适合自己的一个IDE(Integrated Development Environment,就是"集成开发环境"的意思). 如果你真的要开始在Linux下编写程序,除了使用IDE之外(IDE集成了文本编辑器,编译器,调试器,运行程序等),也可以选择另一种难一些的方式:自己用某一种文本编辑

D是10^k的约数快速求解整除性问题

[D是10^k的约数快速求解整除性问题] 定理: 证明: 例一: 例二: 例三:

【java】 linux下利用nohup后台运行jar文件包程序

Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 java -jar XXX.jar & &代表在后台运行. 特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行. 继续改进,如何让窗口关闭时,程序仍然运行? 方式三 nohup java -jar XXX.jar & nohup 意思是不挂断运行命令,当账户退出或终端关闭时,

用canvas 实现个图片三角化(LOW POLY)效果

之前无意中看到Ovilia?用threejs做了个LOW POLY,也就是图片平面三角化的效果,觉得很惊艳,然后就自己花了点时间尝试了一下. 我是没怎么用过threejs,所以就直接用canvas的2d绘图API来做,因为感觉似乎这效果也用不上threejs. 直接上demo先:http://whxaxes.github.io/canvas-test/src/Funny-demo/lowpoly/index.html? ?(也可以在移动端看,不过因为计算量比较大,移动设备计算起来会比PC要多花些