(整理)矩阵基础和矩阵运算(C/C++)
(2017-08-02 10:59:26)分类: c/cpp |
C++矩阵库:newmat
矩阵运算基础(线性代数):http://www2.edu-edu.com.cn/lesson_crs78/self/j_0022/soft/ch0605.html
逆矩阵:https://baike.baidu.com/item/逆矩阵/10481136?fr=aladdin
三角矩阵:https://baike.baidu.com/item/三角矩阵/10232350?fr=aladdin
乔里斯基(cholesky)分解是将一个正定的厄米特(hermite)矩阵分解为一个下三角矩阵和它的共轭转置矩阵。
厄米特矩阵(共轭矩阵),矩阵对称的两个数字互相共轭。实数的共轭是自己本身,复数的共轭-实部不变虚部相反。
一下代码为C语言版本,源代码转自:http://blog.csdn.net/jdh99/article/details/7402710 作者:jdh
C++版本的源代码:http://blog.csdn.net/jdh99/article/details/7360091 作者:jdh
还有一篇关于C实现矩阵运算的文章:http://blog.csdn.net/linaijunix/article/details/50358617
该篇文章中实现了转置、加减法、乘法、求逆和乔里斯基分解。
源代码:
matrix.h:
#ifndef _MATRIX_H
#define _MATRIX_H
//头文件
#include "stdio.h"
#include "stdlib.h"
//矩阵数据结构
//二维矩阵
struct _Matrix
{
int
m;
int
n;
float
*arr;
};
//矩阵方法
//设置m
void matrix_set_m(struct _Matrix *m,int mm);
//设置n
void matrix_set_n(struct _Matrix *m,int nn);
//初始化
void matrix_init(struct _Matrix *m);
//释放
void matrix_free(struct _Matrix *m);
//读取i,j坐标的数据
//失败返回-31415,成功返回值
float matrix_read(struct _Matrix *m,int i,int j);
//写入i,j坐标的数据
//失败返回-1,成功返回1
int matrix_write(struct _Matrix *m,int i,int j,float val);
//矩阵运算
//成功返回1,失败返回-1
int matrix_add(struct _Matrix *A,struct _Matrix *B,struct _Matrix *C);
//C = A - B
//成功返回1,失败返回-1
int matrix_subtract(struct _Matrix *A,struct _Matrix *B,struct _Matrix *C);
//C = A * B
//成功返回1,失败返回-1
int matrix_multiply(struct _Matrix *A,struct _Matrix *B,struct _Matrix *C);
//行列式的值,只能计算2 * 2,3 * 3
//失败返回-31415,成功返回值
float matrix_det(struct _Matrix *A);
//求转置矩阵,B = AT
//成功返回1,失败返回-1
int matrix_transpos(struct _Matrix *A,struct _Matrix *B);
//求逆矩阵,B = A^(-1)
//成功返回1,失败返回-1
int matrix_inverse(struct _Matrix *A,struct _Matrix *B);
#endif
matrix.c:
#include "matrix.h"
//矩阵方法
//设置m
void matrix_set_m(struct _Matrix *m,int mm)
{
m->m =
mm;
}
//设置n
void matrix_set_n(struct _Matrix *m,int nn)
{
m->n =
nn;
}
//初始化
void matrix_init(struct _Matrix *m)
{
m->arr =
(float *)malloc(m->m * m->n *
sizeof(float));
}
//释放
void matrix_free(struct _Matrix *m)
{
free(m->arr);
}
//读取i,j坐标的数据
//失败返回-31415,成功返回值
float matrix_read(struct _Matrix *m,int i,int j)
{
if (i >=
m->m || j >=
m->n)
{
return
-31415;
}
return
*(m->arr + i * m->n +
j);
}
//写入i,j坐标的数据
//失败返回-1,成功返回1
矩阵运算基础(线性代数):http://www2.edu-edu.com.cn/lesson_crs78/self/j_0022/soft/ch0605.html
逆矩阵:https://baike.baidu.com/item/逆矩阵/10481136?fr=aladdin
三角矩阵:https://baike.baidu.com/item/三角矩阵/10232350?fr=aladdin
乔里斯基(cholesky)分解是将一个正定的厄米特(hermite)矩阵分解为一个下三角矩阵和它的共轭转置矩阵。
厄米特矩阵(共轭矩阵),矩阵对称的两个数字互相共轭。实数的共轭是自己本身,复数的共轭-实部不变虚部相反。
一下代码为C语言版本,源代码转自:http://blog.csdn.net/jdh99/article/details/7402710 作者:jdh
C++版本的源代码:http://blog.csdn.net/jdh99/article/details/7360091 作者:jdh
还有一篇关于C实现矩阵运算的文章:http://blog.csdn.net/linaijunix/article/details/50358617
该篇文章中实现了转置、加减法、乘法、求逆和乔里斯基分解。
源代码:
matrix.h:
#ifndef _MATRIX_H
#define _MATRIX_H
//头文件
#include "stdio.h"
#include "stdlib.h"
//矩阵数据结构
//二维矩阵
struct _Matrix
{
};
//矩阵方法
//设置m
void matrix_set_m(struct _Matrix *m,int mm);
//设置n
void matrix_set_n(struct _Matrix *m,int nn);
//初始化
void matrix_init(struct _Matrix *m);
//释放
void matrix_free(struct _Matrix *m);
//读取i,j坐标的数据
//失败返回-31415,成功返回值
float matrix_read(struct _Matrix *m,int i,int j);
//写入i,j坐标的数据
//失败返回-1,成功返回1
int matrix_write(struct _Matrix *m,int i,int j,float val);
//矩阵运算
//成功返回1,失败返回-1
int matrix_add(struct _Matrix *A,struct _Matrix *B,struct _Matrix *C);
//C = A - B
//成功返回1,失败返回-1
int matrix_subtract(struct _Matrix *A,struct _Matrix *B,struct _Matrix *C);
//C = A * B
//成功返回1,失败返回-1
int matrix_multiply(struct _Matrix *A,struct _Matrix *B,struct _Matrix *C);
//行列式的值,只能计算2 * 2,3 * 3
//失败返回-31415,成功返回值
float matrix_det(struct _Matrix *A);
//求转置矩阵,B = AT
//成功返回1,失败返回-1
int matrix_transpos(struct _Matrix *A,struct _Matrix *B);
//求逆矩阵,B = A^(-1)
//成功返回1,失败返回-1
int matrix_inverse(struct _Matrix *A,struct _Matrix *B);
#endif
matrix.c:
#include "matrix.h"
//矩阵方法
//设置m
void matrix_set_m(struct _Matrix *m,int mm)
{
}
//设置n
void matrix_set_n(struct _Matrix *m,int nn)
{
}
//初始化
void matrix_init(struct _Matrix *m)
{
}
//释放
void matrix_free(struct _Matrix *m)
{
}
//读取i,j坐标的数据
//失败返回-31415,成功返回值
float matrix_read(struct _Matrix *m,int i,int j)
{
}
//写入i,j坐标的数据
//失败返回-1,成功返回1