雅可比算法求方阵的全部特征值和特征向量

本文介绍了如何运用雅可比算法有效地求解方阵的全部特征值和对应的特征向量,详细阐述了算法的步骤与实现细节。
摘要由CSDN通过智能技术生成

ValVect.h

#include <iostream>

class ValVect {
public :
	ValVect(void);
	void clear(void);
	//~ValVect(void);

public :
	void rdOrMatrix(int _dim, double _e); //从文件中读取对称方阵,将其存在矩valAry中(每一列为一样本向量,即行数为维数)._dim为方阵的阶,_e为计算精度
	void itVtAry(void); //初始化样本向量矩阵vectAry(每一列为一特征向量)
	void calValVect(void); //计算特征值和特征向量,特征值为valAry个对角线元素,对应的特征向量为vectAry各列
	void stValVect(void); //按特征值由大到小将特征值和相应的特征向量排序
	void showValVect(void); //输出特征值和相应的特征向量
	void sortVect(void); //输出排序后的特征向量矩阵

private :
	int dim_; //方阵的阶数
	double **valAry, **vectAry; //初始方阵和特征向量方阵
	double e_;
};

ValVectFile.h

#include "ValVect.h"
#include <math.h>
#include <malloc.h>
#include <iostream>

ValVect::ValVect() {
	dim_ = 0;  e_ = 0;
	valAry = NULL;  vectAry = NULL;
}

void ValVect::rdOrMatrix(int _dim, double _e) { //读取待计算的方阵
	dim_ = _dim;  e_ = _e;
	valAry = (double **)malloc(dim_*sizeof(double));
	for(int i=0; i<dim_; i++)
		*(valAry+i) = (double *)malloc(dim_*sizeof(double)); //valAry为初始方阵,阶为dim_,每一列为一个样本向量,列数为样本个数,以后在矩阵本身计算特征值

	std::cout << "read the original vectors" << '\n';
	FILE *fp;
	char ch;
	if((fp=fopen("ValVectOrMatrix.txt","rt"))==NULL) { //ValVectOrMatrix文件中每一行为一个样本向量,列数代表维数                             
		printf("Cannot open file strike any key exit!");
		exit(0);
	}

	ch=fgetc(fp);
	std::string str=""; //这里str是类string的一个对象
	int k=0;
	while(ch!=EOF) {
		for(int i=0; i<dim_; i++) {
			while(ch==' ' || ch=='v' || ch=='\n')
				ch=fgetc(fp);
			while(ch!=' ' && ch!='\n' && ch!='v') {
				str+=ch;
				ch=fgetc(fp);
			}
			double aa=atof(str.c_str()); //将字符串转换成double型
			*(*(valAry+i)+k) &
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值