LAPACK 求矩阵的逆

2023-10-31

original source: http://stackoverflow.com/questions/3519959/computing-the-inverse-of-a-matrix-using-lapack-in-c


Function:

inv(A)


C++ Code (Edited):

#include <cstdio>
#include <cblas.h>

// pre install :
// sudo apt-get install build-essential
// sudo apt-get install liblapack*
// sudo apt-get install libblas*
// compile command : 
// g++ test.cpp -llapacke -llapack
// ./a.out
// May need to adjust stack memory upper limit:
// ulimit -s 1024000 # 1GB

extern "C" {
    // LU decomoposition of a general matrix
    void dgetrf_(int* M, int *N, double* A, int* lda, int* IPIV, int* INFO);
    // void sgetrf_(int* M, int *N, float* A, int* lda, int* IPIV, int* INFO);

    // generate inverse of a matrix given its LU decomposition
    void dgetri_(int* N, double* A, int* lda, int* IPIV, double* WORK, int* lwork, int* INFO);
    // void sgetri_(int* N, float* A, int* lda, int* IPIV, float* WORK, int* lwork, int* INFO);
}

void inverse(double* A, int N)
{
    int *IPIV = new int[N];
    int LWORK = N*N;
    double *WORK = new double[LWORK];
    int INFO;

    dgetrf_(&N, &N, A, &N, IPIV, &INFO);
    dgetri_(&N, A, &N, IPIV, WORK, &LWORK, &INFO);

    delete [] IPIV;
    delete [] WORK;
}

int main(){
    
    int N = 1000;
    double M[N*N];
    
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            M[i*N+j] = 0;
            if (i == j)
                M[i*N+j] = 1;
        }
    }
    inverse(M, N);

    printf("%f %f\n", M[0], M[N+1]); // should be 1 1 
    printf("%f %f\n", M[1], M[N]); // 0 0

    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LAPACK 求矩阵的逆 的相关文章

随机推荐

  • Windows XP下vs2010中配置OpenCV2.4.3

    1 从http sourceforge net projects opencvlibrary files opencv win 2 4 3 下载OpenCV2 4 3 2 将OpenCV 2 4 3 exe放到D Soft OpenCV2
  • C语言典型例题1——水仙花数

    水仙花数 水仙花数的含义 水仙花数 是一个三位数其各位数字的立方和等于该数本身 例如 153 111 555 333 算法分析 把给出的某个三位数的个位 十位 百位分别拆分 并求其立方和 设为sum 若sum与给出的三位数相等 则为 水仙花
  • 宝塔快速搭建网站

    服务器搭建网站完整教程 宝塔面板 wordpress 纵横数据 纵横数据云计算 www 155cloud com 40 人赞同了该文章 服务器最大的用途 就是可以搭建网站 许多人都认为搭建网站是一件很难的事情 因为包含许多的比较专业东西 比
  • 前端技术vue和react区别html

    作者 人民邮电出版社 链接 https www zhihu com question 309891718 answer 1066629375 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 虽然Vue和Rea
  • NLP(四)词形还原(Lemmatization)

    词形还原 Lemmatization 是文本预处理中的重要部分 与词干提取 stemming 很相似 一 什么是词形还原 词形还原 作用为英语分词后根据其词性将单词还原为字典中原型词汇 简单说来 词形还原就是去掉单词的词缀 提取单词的主干部
  • HDFS读数据流

    HDFS读数据流 HDFS采用 一个文件一旦创建 写入 关闭之后就不能修改 的读取模式 保证了数据的一致性 并能够实现数据访问高吞吐量 客户端读取数据过程 客户端通过调用分布式文件系统对象中的Open 函数来读取它所需要的数据 DFS通过R
  • python使用numpy保存字典格式的数据

    这里写一个保存用的工具函数 def save dict by numpy filename dict vale if not os path exists os path dirname filename os mkdir os path
  • java防止内存泄露_如何防止java中的内存泄漏

    展开全部 尽管java虚 拟机和垃圾回收机制治理着大部分62616964757a686964616fe4b893e5b19e31333335313838的内存事务 但是在java软件中还是可能存在内存泄漏的情况 的确 在大型工程中 内存泄漏
  • 注册smtp服务器,SMTP授权码介绍及获取教程

    一 SMTP介绍 SMTP是什么 SMTP 是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议 SMTP 是建立在 TCP上的一种邮件服务 主要用于传输系统之间的邮件信息并提供来信有关的通知 您的邮箱开启了smtp服务之后 就可以
  • Redis 五种数据结构原理分析

    1 简介 开源 C语言编写的一个kv存储系统 是一个速度非常快的非关系远程内存数据库 支持包括String List Set Zset hash五种数据结构 除此之外 通过复制 持久化和客户端分片等特性 用户可以很方便地将redis扩展成一
  • 利用Scanner类读取file文件

    利用Scanner类读取file文件 第一步创建有个txt文件 名字命名为wordTest hello word jwq zwq zhn 第二步写一个main方法 public static void main String args Fi
  • Redhat 7 LVM xfs文件系统修复

    一 情况描述 服务器重启操作系统后自动进入急救模式 单用户模式 进入后ip a查看lo网卡 df h查看分区发现只存在lv root 报错图如下 XFS sdb1 Internal error XFS WANT CORRUPTED RETU
  • 【亲测有效】GnuTLS recv error (-110): The TLS connection was non-properly terminated.

    亲测有效 GnuTLS recv error 110 The TLS connection was non properly terminated 问题描述 解决方法一 取消代理 方法二 如果取消代理无用 方法三 这种方法对我有效 问题描述
  • matlab求矩阵特征值的最大值,[转载]MATLAB用eig()函数求【特征值】【特征向量】【归一化...

    在MATLAB中 计算矩阵A的特征值和特征向量的函数是eig A 常用的调用格式有 5种 1 E eig A 求矩阵A的全部特征值 构成向量E 想求最大特征值用 max eig A 就好了 2 V D eig A 求矩阵A的全部特征值 构成
  • failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED

    failed to create cublas handle CUBLAS STATUS ALLOC FAILED 问题出现原因及解决办法 在使用tensorflow的gpu运行程序时 因为gpu已被其他python脚本占用或自己程序重复调
  • python爬虫实操

    本次我们将爬取Ajax动态加载数据并进行简单数据分析 其主要方式是找到数据的json包 将其保存到本地目录 进行数据分析 文章目录 一 业务分析 二 步骤 1 找到数据 2 抓取数据 3 分析数据 总结 一 业务分析 目标网站 NBA中国官
  • java基础一

    java基础复习总结一 01 01 计算机基础知识 计算机概述 了解 A 什么是计算机 计算机在生活中的应用举例 计算机 Computer 全称 电子计算机 俗称电脑 是一种能够按照程序运行 自动 高速处理海量数据的现代化智能电子设备 由硬
  • CentOS7增加或修改SSH端口号

    第一步 修改SSH配置文件 注意是sshd config而不是ssh config 多了个d vim etc ssh sshd config 找到 Port 22 把两行的 号即注释去掉 修改成 Port 22 Port 50500 SSH
  • 用gSOAP开发Web Service程序

    http www cppblog com noswimfish archive 2010 09 07 126074 aspx gSOAP是一个绑定SOAP XML到C C 语言的工具 使用它可以简单快速地开发出SOAP XML的服务器端和客
  • LAPACK 求矩阵的逆

    original source http stackoverflow com questions 3519959 computing the inverse of a matrix using lapack in c Function in