实验8 反幂法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数值分析》实验8

一.实验名称:反幂法

二、实验目的:

(1) 掌握求矩阵按模最小特征值及其对应的特征向量的规范化反幂法;

(2) 掌握原点移位法。

三、实验要求

(1) 按照题目要求完成实验内容

(2) 写出相应的实验原理与C 语言程序

(3) 给出实验结果,结果分析

(4) 写出相应的实验报告

四、实验题目:

用反幂法求以下矩阵的指定特征值及其特征向量(迭代终止误差为1e-3):

41411014110⎛⎫ ⎪ ⎪ ⎪⎝⎭

接近2的特征值及其特征向量.

程序:

#include

#include

int main(){

int n = 3, i, k, j, max_k = 1000;

double y[max_k][n], x[max_k][n], max_x[max_k], z[n], u[n][n], l[n][n], t, err = 1e-5, norm_dx = 1,tt=12;//norm_dx:dx 的一范数,tt:为了求接近tt 的特征值,

for (i = 0; i < n; i++)

for (j = 0; j < n; j++){

u[i][j] = 0;

(j == i) ? (l[i][j] = 1) : (l[i][j] = 0);

}

double a[][3] = { 4, 1, 4, 1, 10, 1, 4, 1, 10 };

for (i = 0; i < n; i++)

{ a[i][i]-=tt;

x[0][i] = 1;

}

for (i = 0; i < n; i++){

for (k = i; k < n; k++){

t = 0;

for (j = 0; j < i; j++)

t += l[i][j] * u[j][k];

u[i][k] = a[i][k] - t;

}

for (k = i + 1; k < n; k++){

t = 0;

for (j = 0; j < i; j++)

t += l[k][j] * u[j][i];

l[k][i] = (a[k][i] - t) / u[i][i];

}

}

for (k = 0; k<1000 && norm_dx>pow(err, 2); k++){

max_x[k] = 0;

for (i = 0; i < n; i++){

if (fabs(max_x[k]) < fabs(x[k][i]))

max_x[k] = x[k][i];

}

for (i = 0; i < n; i++)

y[k][i] = x[k][i] / max_x[k];

for (i = 0; i < n; i++){

t = 0;

for (j = 0; j < i; j++)

t += l[i][j] * z[j];

z[i] = y[k][i] - t;

}

for (i = n - 1; i >= 0; i--){

t = 0;

for (j = i + 1; j < n; j++)

t += u[i][j] * x[k + 1][j];

x[k + 1][i] = (z[i] - t) / u[i][i];

}

norm_dx = 0;

for (i = 0; i < n; i++)

norm_dx += pow((x[k + 1][i] - x[k][i]), 2);

}

k--;

printf("接近%f特征值=%f\n近似特征向量=\n", tt,1 / max_x[k]+12);

for (i = 0; i < n; i++)

(i < n - 1) ? printf("%f,", y[k][i]) : printf("%f\n", y[k][i]);

}

结果:

接近12.000000特征值=12.677104

近似特征向量=

0.526706,0.570281,1.000000

Press any key to continue...

相关文档
最新文档