zoukankan      html  css  js  c++  java
  • C++中计算矩阵的行列式

    使用eigen库:

    求行列式:

    #include <iostream>
    #include <Eigen/Dense>
    using namespace std;
    using namespace Eigen;
    int main()
    {
        Matrix2d c;
         c << 1, 2,
         3, 4;
        //转置、伴随
        std::cout<<c<<std::endl<<std::endl;
        std::cout<<"转置
    "<<c.transpose()<<std::endl<<std::endl;
        std::cout<<"伴随
    "<<c.adjoint()<<std::endl<<std::endl;
        //逆矩阵、行列式
        std::cout << "行列式: " << c.determinant() << std::endl;
        std::cout << "逆矩阵
    " << c.inverse() << std::endl;
    }

     【其他】

     用C语言解决:求任意阶(n阶)矩阵的行列式https://baike.1688.com/doc/view-d3171824.html

    /* 用C语言解决:求任意阶(n阶)矩阵的行列式值 */ 
    #include <stdio.h> 
    #include <math.h> 
    
    void getarray(int n); 
    void showarray(int n); 
    double getresult(int n); 
    double array[10][10];/*设矩阵不超过10阶,可更改*/ 
    
    int main() 
    { 
    int n; 
    double result; 
    printf("
    Please input the Array size n:"); 
    scanf("%d",&n); 
    getarray(n); 
    showarray(n); 
    result=getresult(n); 
    printf("
    Result=%f
    ",result); 
    system("pause"); 
    return 0; 
    } 
    
    void getarray(int n) 
    { 
    int row,col; 
    for(row=0;row<n;row++) 
    { 
    printf("
    Please input line %d:",row+1); 
    for(col=0;col<n;col++) 
    scanf("%lf",&array[row][col]); 
    } 
    } 
    
    void showarray(int n) 
    { 
    int row,col; 
    printf("
    A="); 
    for(row=0;row<n;row++) 
    { 
    for(col=0;col<n;col++) 
    printf("    %f",array[row][col]); 
    printf("
    "); 
    } 
    } 
    
    double getresult(int n) 
    { 
    double temp,result=1.0; 
    int switchtime=0,flag=0; 
    int row,nextrow,col,stemp; 
    for(row=0;row<n-1;row++) 
    { 
    nextrow=row+1; 
    if(array[row][row]==0)/* 开始处理第一列,如果行列式第一行第一个数为零,要交换行 */ 
    { while(array[nextrow][row]==0) 
    { 
    nextrow++; /* 如果行列式第二行第一个数为零,行增加继续寻找非零数值的行 */ 
    if(nextrow==n)/* 如果遍历完行列式行列式第一列元素都为零,退出while循环 */ 
    { flag=1; 
    break; 
    } 
    } 
    if(flag==1) /* 退出while循环后回到for(row=0;row<n-1;row++)行加1?*/ 
    continue; /* 从array[row][row]==0知列也相应加1,开始处理第二列 */ 
    switchtime++; /* 每交换一次行,行列式符号变化1次,统计变化次数 */ 
    for(col=0;col<n;col++) /* 交换非零行到行列式顶部 */ 
    { 
    stemp=array[row][col]; 
    array[row][col]=array[nextrow][col]; 
    array[nextrow][col]=stemp; 
    } 
    } 
    for(nextrow=row+1;nextrow<n;nextrow++)
    { /* 类似高斯消去法,消第一行下各行第一列数值到零*/ 
    temp=array[nextrow][row]/array[row][row]; 
    for(col=0;col<n;col++) 
    array[nextrow][col]+=-temp*array[row][col];/* 化行列式为上三角行列式形式 */ 
    } 
    } 
    showarray(n); 
    for(row=0;row<n;row++) 
    result*=array[row][row]; 
    if(switchtime%2) 
    return -result; 
    else 
    return result; 
    } 
    View Code
  • 相关阅读:
    从零开始学android -- dialog
    Java学习笔记之equals和Objects.equals
    windows svchost.exe 引起的出现的莫名其妙的窗口失去焦点
    android.util.AndroidRuntimeException Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? com.uethinking.microvideo.manag
    从零开始搭建android框架系列(转)
    js-ES6学习笔记-编程风格(1)
    js-ES6学习笔记-module(4)
    js-ES6学习笔记-module(3)
    js-ES6学习笔记-module(2)
    js-ES6学习笔记-module(1)
  • 原文地址:https://www.cnblogs.com/wxl845235800/p/9027005.html
Copyright © 2011-2022 走看看