• 大小: 4.34 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-11-16
  • 语言: 其他
  • 标签:

资源简介

因为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


评论

共有 条评论

相关资源