资源简介
因为Matlab函数库过于庞大,因此开发了这个极简版的矩阵基本运算函数库,包括矩阵相乘、求逆、QR分解等等,供大家参考。
代码片段和文件信息
/****************************************矩阵基本运算库****************************************
功能:
1、矩阵相乘 (直接相乘、分治法)
2、求解矩阵行列式值(部分选主元LU分解法)
3、特征值(QR分解)
4、特征向量(原点平移反幂法,只针对于非对称实矩阵)
5、矩阵的逆(列主元单位阵变换法)
执行效率:一般,可使用Cache编码技术优化
作者:李泉衡
创建时间:2013.6.19
完成测试时间:2013.6.20
注释整理时间:2013.10.12
邮箱:lqh0220@gmail.com
说明:版权所有,仅供参考。
*********************************************************************************************/
#include “stdafx.h“
#include
#include
#include “MatrixMath.h“
void MatrixMulti(MATRIX_DATA_TYPE **pOutMATRIX_DATA_TYPE **Xlong X_rowlong X_colMATRIX_DATA_TYPE **Ylong Y_rowlong Y_col) //简单直接相乘
{
memset(pOut[0]0X_row*Y_col*sizeof(MATRIX_DATA_TYPE));
if(X_col!=Y_row)
return;
for(long i=0;i for(long k=0;k for(long j=0;j pOut[i][k] +=X[i][j]*Y[j][k];
}
void Matrix_Multi1(MATRIX_DATA_TYPE **AMATRIX_DATA_TYPE **BMATRIX_DATA_TYPE **Clong size) //分治法1 只能是方阵
{
long rowcoln=0;
long sub_size=size/2;
long c=sub_size*sub_size;
long c0=sub_size*sizeof(MATRIX_DATA_TYPE);
MATRIX_DATA_TYPE **p_sub=NULL;
MATRIX_DATA_TYPE ***pp_sub=NULL;
MATRIX_DATA_TYPE *p_tmp=NULL;
if(size!=1)
{
pp_sub=(MATRIX_DATA_TYPE ***)malloc(29*sizeof(MATRIX_DATA_TYPE));
p_sub=(MATRIX_DATA_TYPE **)malloc(29*sub_size*sizeof(MATRIX_DATA_TYPE));
p_tmp=(MATRIX_DATA_TYPE *)malloc(c*17*sizeof(MATRIX_DATA_TYPE));
for(int i=0;i<29;i++)
{
pp_sub[i]=p_sub+i*sub_size;
if(i>7&&i<25)
{
pp_sub[i][0]=p_tmp+(i-8)*c;
for(n=1;n {
pp_sub[i][n]=pp_sub[i][0]+n*sub_size;
}
}
}
for(row=0;row {
pp_sub[0][row]=A[row];//A11 //拆分A矩阵
pp_sub[1][row]=pp_sub[0][row]+sub_size;//A12
pp_sub[2][row]=A[sub_size+row];//A21
pp_sub[3][row]=pp_sub[2][row]+sub_size;//A22
pp_sub[4][row]=B[row];//B11 //拆分B矩阵
pp_sub[5][row]=pp_sub[4][row]+sub_size;//B12
pp_sub[6][row]=B[sub_size+row];//B21
pp_sub[7][row]=pp_sub[6][row]+sub_size;//B22
pp_sub[25][row]=C[row];//C11 //拆分C矩阵
pp_sub[26][row]=pp_sub[25][row]+sub_size;//C12
pp_sub[27][row]=C[sub_size+row];//C21
pp_sub[28][row]=pp_sub[27][row]+sub_size;//C22
for(col=0;col {
pp_sub[8][row][col]=pp_sub[5][row][col] - pp_sub[7][row][col]; //B12-B22
pp_sub[9][row][col]=pp_sub[0][row][col] + pp_sub[1][row][col]; //A11+A12
pp_sub[10][row][col]=pp_sub[2][row][col]+ pp_sub[3][row][col]; //A21+A22
pp_sub[11][row][col]=pp_sub[6][row][col]- pp_sub[4][row][col]; //B21-B11
pp_sub[12][row][col]=pp_sub[0][row][col]+ pp_sub[3][row][col]; //A11+A22
pp_sub[13][row][col]=pp_sub[4][row][col]+ pp_sub[7][row][col]; //B11+B22
pp_sub[14][row][col]=pp_sub[1][row][col]- pp_sub[3][row][col]; //A12-A22
pp_sub[15][row][col]=pp_sub[6][row][col]+ pp_sub[7][row][col]; //B21+B22
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1282 2013-10-12 16:42 MatrixMath.h
文件 19711 2013-10-12 16:39 MatrixMath.cpp
----------- --------- ---------- ----- ----
20993 2
- 上一篇:完整的项目案例
- 下一篇:武汉理工大学 单片机课程设计 16*16点阵显示
评论
共有 条评论