• 大小: 0.01M
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: C/C++
  • 标签: 其他  

资源简介

eig.cpp

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 

//--------------------------这里是一些定义的结构体和数据类型---------
//纯C里面定义的布尔类型
typedef enum { False = 0 True = 1 }Bool;

//定义矩阵元素的类型为matrixType
typedef double matrixType;

//此结构体用来表示矩阵,其中row为行,column为列,height为高,array用来存放矩阵元素(用一维来模拟二维/三维)
typedef struct
{
unsigned  row column height;
matrixType* array; //使用时,必须对*array进行初始化
}Matrix;

//矩阵分配内存
Bool SetMatrixSize(Matrix* matrix const unsigned row const unsigned column const unsigned height);
//设置Matrix矩阵中的所有元素大小为ele
void SetMatrixEle(Matrix* matrix matrixType ele);
//设置Matrix矩阵中的所有元素大小为0
void SetMatrixZero(Matrix* matrix);
//判断矩阵是否为空,若为空则返回1,否则返回0
Bool IsNullMatrix(const Matrix* matrix);
//销毁矩阵,即释放为矩阵动态分配的内存并将矩阵的长宽高置0
void DestroyMatrix(Matrix* matrix);
//计算矩阵可容纳元素个数,即return row*column*height
unsigned MatrixCapacity(const Matrix* matrix);
//||matrix||_2  求A矩阵的2范数
matrixType MatrixNorm2(const Matrix* matrix);
//matrixB = matrix(::height)即拷贝三维矩阵的某层,若matrix为二维矩阵,需将height设置为0
Bool CopyMatrix(Matrix* matrixB Matrix* matrix unsigned height);
//matrixC = matrixA * matrixB
Bool MatrixMulMatrix(Matrix* matrixC const Matrix* matrixA const Matrix* matrixB);
//对vector中所有元素排序,sign= 0 时为升序,其余为降序
void SortVector(Matrix* vector int sign);
//打印矩阵
void PrintMatrix(const Matrix* matrix);
//将A分解为Q和R
void QR(Matrix* A Matrix* Q Matrix* R);
//计算特征值和特征向量
void Eigenvectors(Matrix* eigenVector Matrix* A Matrix* eigenValue);

//---------下面是QR分解,求解线性方程所用到的一些函数-----------
/*
matrix为要设置大小并分配内存的矩阵,row、column、height分别为行,列,高。
函数调用成功则则返回true否则返回false
*/
Bool SetMatrixSize(Matrix* matrix const unsigned row const unsigned column const unsigned height)
{
unsigned size = row * column * height * sizeof(matrixType);

if (size <= 0)
{
return False;
}

matrix->array = (matrixType*)malloc(size);

//如果分配内存成功
if (matrix->array)
{
matrix->row = row;
matrix->column = column;
matrix->height = height;

return True;
}
else
{
matrix->row = matrix->column = matrix->height = 0;

return False;
}
}

//设置Matrix矩阵中的所有元素大小为ele
void SetMatrixEle(Matrix* matrix matrixType ele)
{
unsigned size = matrix->row * matrix->column * matrix->height;
unsigned i;

for (i = 0;i < size;++i)
{
matrix->array[i] = ele;
}
}

//设置Matrix矩阵中的所有元素大小为0
void SetMatrixZero(Matrix* matrix)
{
SetMatrixEle(matrix 0);
}

//判断矩阵是否为空,若为空则返回1,否则返回0
Bool IsNullMatrix(const Matrix* matrix)
{
unsigned size = matrix->row * matrix->column * matrix->column;

if (size <= 0 || matrix->array == NULL)
{
return True;
}
return False;
}

//销毁矩阵,即释放为矩阵动态分配的内存并将矩阵的长宽高置0
void DestroyMatrix(Matrix* matrix)
{
if (!IsNullMatrix(matrix))
{
free(matrix->array);
matrix->array = NULL;
}
matrix->row = matrix->column = matrix->height = 0;
}

//计算矩阵可容纳元素个数,即return row*column*height
unsigned MatrixCapacity(const Matrix* matrix)
{
return matrix->row * mat

评论

共有 条评论