当前位置: 首页 > news >正文

图像处理之基础---矩阵求逆实现

最近做一个加密算法遇到需要计算矩阵的逆,闲着无聊,记录一下,以后免得再麻烦。 [cpp] view plaincopyprint? #include #include #include #define MAX 20 #define E 0.000000001 /** * 计算矩阵src的模 */ double calculate_A( double src[][MAX], int n ) { int i,j,k,x,y; double tmp[MAX][MAX], t; double result = 0.0; if( n == 1 ) { return src[0][0]; } for( i = 0; i < n; ++i ) { for( j = 0; j < n - 1; ++j ) { for( k = 0; k < n - 1; ++k ) { x = j + 1; y = k >= i ? k + 1 : k; tmp[j][k] = src[x][y]; } } t = calculate_A( tmp, n - 1 ); if( i % 2 == 0 ) { result += src[0][i] * t; } else { result -= src[0][i] * t; } } return result; } /** * 计算伴随矩阵 */ void calculate_A_adjoint( double src[MAX][MAX], double dst[MAX][MAX], int n ) { int i, j, k, t, x, y; double tmp[MAX][MAX]; if( n == 1 ) { dst[0][0] = 1; return; } for( i = 0; i < n; ++i ) { for( j = 0; j < n; ++j ) { for( k = 0; k < n - 1; ++k ) { for( t = 0; t < n - 1; ++t ) { x = k >= i ? k + 1 : k ; y = t >= j ? t + 1 : t; tmp[k][t] = src[x][y]; } } dst[j][i] = calculate_A( tmp, n - 1 ); if( ( i + j ) % 2 == 1 ) { dst[j][i] = -1*dst[j][i]; } } } } /** * 得到逆矩阵 */ int calculate_A_inverse( double src[MAX][MAX], double dst[MAX][MAX], int n ) { double A = calculate_A( src, n ); double tmp[MAX][MAX]; int i, j; if ( fabs( A - 0 ) <= E ) { printf("不可能有逆矩阵!\n"); return 0; } calculate_A_adjoint( src, tmp, n ); for( i = 0; i < n; ++i ) { for( j = 0; j < n; ++j ) { dst[i][j] = (double)( tmp[i][j] / A ); } } return 1; } /** * 输出矩形查看 */ void print_M( double M[][MAX], int n ) { int i, j; for ( i = 0; i < n; ++i ) { for ( j = 0; j < n; ++j ) { printf("%lf ", M[i][j]); } printf("\n"); } } /** * main */ int main() { /** * 测试矩阵 */ double test[MAX][MAX], dst[MAX][MAX]; int n = 3; int is_exist; /** * 构造最简单的: * 1, 0, 0, * 0, 2, 0, * 0, 0, 5 */ memset( test, 0, sizeof( test ) ); test[0][0] = 1.0; test[1][1] = 2.0; test[2][2] = 5.0; is_exist = calculate_A_inverse( test, dst, n ); if ( is_exist ) { print_M(dst, n); } else { printf("不存在!\n"); } return 0; } http://blog.csdn.net/shanshanpt/article/details/16820325

转载于:https://www.cnblogs.com/pengkunfan/p/3958183.html

相关文章:

  • html+css小知识点
  • MFC之窗体改动工具栏编程状态栏编程程序启动画面
  • UNIX环境编程学习笔记(9)——文件I/O之文件访问权限的屏蔽和更改
  • SoftLayer®凭借Flex Images™消融物理与虚拟服务器之间的界线
  • 康动仪数据传输不成功可以用如下办法解决
  • 如何使用MSDN
  • JavaScript document 对象
  • [Git].gitignore失效的原因
  • 不知道能不能写小说
  • Appserv配置虚拟主机设置教程
  • 深入理解linux内核: linux内核
  • spring中context:property-placeholder/元素
  • 第二十章、启动流程、模块管理与 Loader
  • 一个体检系统设想
  • 彩生活_百度百科
  • [Vue CLI 3] 配置解析之 css.extract
  • ES6核心特性
  • Git的一些常用操作
  • Java 最常见的 200+ 面试题:面试必备
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Selenium实战教程系列(二)---元素定位
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 问题之ssh中Host key verification failed的解决
  • 学习JavaScript数据结构与算法 — 树
  • 一份游戏开发学习路线
  • 进程与线程(三)——进程/线程间通信
  • #{}和${}的区别?
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (1)Android开发优化---------UI优化
  • (14)Hive调优——合并小文件
  • (4.10~4.16)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (windows2012共享文件夹和防火墙设置
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (算法)前K大的和
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • **python多态
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @基于大模型的旅游路线推荐方案
  • [Angular 基础] - 指令(directives)
  • [C++] 统计程序耗时
  • [Flutter]打包IPA
  • [LeetCode] Wildcard Matching
  • [Lucene] Lucene 全文检索引擎简介
  • [Noi2015]程序自动分析
  • [NOIP2007 普及组] 纪念品分组--贪心算法
  • [opencvsharp]C#基于Fast算法实现角点检测
  • [PHP] 算法-字符串的左循环的PHP实现
  • [Python] 输入与输出
  • [raspberry pi3] zram设置
  • [Remoting FAQ]Loading a Remoting Host On IIS得到BadImageFormatException
  • [STL]C++ STL中常见容器的时间复杂度