文件名称:幂法 反幂法 带双步位移
文件大小:10KB
文件格式:CPP
更新时间:2012-12-05 05:13:41
幂法 反幂法 带双步位移
void main(void)
{
cout.setf(ios::scientific); //输出值为科学计数法
cout.precision(12); //输出值精度为12位
char f;
int i;
double maxNorm,maxNorm1,lambda[N],lambda_s,miu[N],cond_A,det_A;
double A[UB+DB+1][N];
MatrixInit(A); //为矩阵A赋初值
maxNorm=PowerMethod(A); //求得模最大的特征根
maxNorm1=PMwithTr(A,maxNorm); //求得距离模最大特征根最远的根
lambda_s=AntiPowerMethod(A); //求得模最小特征根
if(maxNorm>maxNorm1) ////////////////////////////
{ //
lambda[0]=maxNorm1; // 判断maxNrom与maxNorm1
lambda[N-1]=maxNorm; // 的大小,大的即为最大特征值,
} // 小的即为最小特征值。
else //
lambda[0]=maxNorm; //
lambda[N-1]=maxNorm1; /////////////////////////////
for(i=1;i<=39;i++) //循环调用带原点平移的
{ //反幂法求最接近特征值
miu[i]=lambda[0]+i*(lambda[500]-lambda[0])/40;
lambda[i]=APMwithTr(A,miu[i]);
}
cond_A=fabs(maxNorm/lambda_s); //求条件数
det_A=Det_A(A); //求行列式
cout<<"lambda_1="<