vc计算矩阵的转置,矩阵的点乘,矩阵的逆矩阵,参考网上的例子
矩阵点乘的例子:
矩阵逆矩阵计算例子:
#include "stdafx.h"
#include <math.h>
//#include<complex.h>
#include <iostream>
#include <complex>
#include <cstdlib> // 包含rand()和srand()
#include <ctime> // 包含time()
using namespace std;
///计算 两个矩阵的点乘
void dotMatrix(float *a, float *b, float c[][50],int rowsa, int colsa,int colsb, int n) {
///rowsa 前面矩阵的行数,colsa前面矩阵的列数,colsb后面矩阵的列数,n最大维数
for (int i = 0; i < rowsa; i++)
{
for (int j = 0; j < colsb; j++)
{
int sum = 0;
for (int k = 0; k < colsa; k++)
{
sum += a[i*n+k] * b[k*n+j];
}
c[i][j] = sum;
}
}
}
// 函数定义:计算矩阵的转置
void transposeMatrix(float *source, float *dest, int rows, int cols,int n) {
///rows 原始矩阵的行数,cols原始矩阵的列数
// 对于每一个元素,将其放到dest数组的相应位置(行变列,列变行) ,n最大维数
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
float *p = (float *)&source[i*n + j];
float *dp = (float *)&dest[j*n + i];
**&dp = *p; // 注意这里的行列索引交换
}
}
}
计算矩阵的逆矩阵
float** Matrix_inver(float** src, int row, int col,int nn)//原始矩阵的行与列,nn最大的维数
{
//step 1
//判断指针是否为空
if (src == NULL)exit(-1);
int i, j, k, n,principal;
float** res, ** res2, tmp;//res为增广矩阵,res为输出的逆矩阵
float Max;
//判断矩阵维数
//row = (double)_msize(src) / (double)sizeof(double*);
//col = (double)_msize(*src) / (double)sizeof(double);
if (row != col)exit(-1);
//step 2
res