main.cpp

来自「本文的重点在于通过一个实例来解决特殊的条形矩阵特征值得解算.」· C++ 代码 · 共 70 行

CPP
70
字号
#include <iostream.h>
#include <stdio.h>
#include "Matrix.h"
#include "Max&Min.h"

void main()
{
    int i,j;
	int s = 2;
	int r = 2;
	double MatrixA[M][N];
	double b = 0.16;
	double c = -0.064;
	double Max;
	double Min;
	double AbsMin;
	double AbsMax;
	double Cond;
	double det;
	double V;
	InitMatrix(MatrixA, b, c);//创建矩阵。
    cout.precision(12);  //12位有效数字。

//	cout<<Det(MatrixA)<<endl;;
	//求出矩阵A的最大和最小的特征值
	MaMiEigenval(MatrixA,Max,Min);

	//求出矩阵A的绝对值最小的特征值
	AbsMinEigenval(MatrixA,AbsMin);

	//求出矩阵A的绝对值最大的特征值
	AbsMaxEigenval(MatrixA,AbsMax);

	//求谱范数条件数cond(A),等于绝对值最大与绝对值最小的特征值的商的绝对值
	Cond = fabs(AbsMax/AbsMin);
    
	//求矩阵的行列式。
	det = Det(MatrixA);

	cout<<"1、求特征值Eigenval_1, Eigenval_501和Eigenval。"<<endl;
	printf("最小特征根Eigenval_1=%12.11e\n", Min);
	printf("最大特征根Eigenval_501=%12.11e\n", Max);
	printf("绝对值最小特征根Eigenval_s=%12.11e\n", AbsMin);
	
	cout<<"2、求矩阵A数V_k最接近的特征值。"<<endl;

	//求与V[k]距离最近的特征值。
	for (i=1;i<=39;i++)
	{
		V = Min + i *( Max - Min) / 40;
		for (j=0;j<N;j++)
		{
			MatrixA[s][j] = MatrixA[s][j] - V;
		}
		AbsMinEigenval(MatrixA,AbsMin);
		for (j=0;j<N;j++)
		{
			MatrixA[s][j] = MatrixA[s][j] + V;
		}
		AbsMin = AbsMin + V;
		printf("   V_%d=%12.11e,   Eigenval_i%d=%12.11e\n", i, V, i, AbsMin);
		
	}

	cout<<"3、求A的条件数cond2和行列式det:"<<endl;
	printf("条件数cond=%12.11e\n", Cond);
	printf("行列式det=%12.11e\n", det);
	
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?