//乘幂法计算矩阵绝对值最大特征值
#include <iostream>
#include <math.h>
#include <process.h>

using namespace std;

class power
{
private:
 int check, flag, i, j, iteration, n;
 double eps1, eps2, error1, error2, lambda, lambda_old, sum;
 double *y, *z, *z_old;
 double **a;

public:
 power()
 {
  iteration = 0;
  flag = 1;
 }
 void solution();
 double euclidean_norm(double *);
 ~power()
 {
  delete[] y, z, z_old;
  for (i = 0; i < n; i++)
  {
   delete[] a[i];
  }
  delete[] a;
 }
};

void main()
{
 power eigenpair;
 eigenpair.solution();
}

void power::solution()
{
 cout << "输入矩阵阶数:";
 cin >> n;
 a = new double*[n];
 for (i = 0; i < n; i++)
 {
  a[i] = new double[n];
 }
 y = new double[n];
 z = new double[n];
 z_old = new double[n];
 for (i = 0; i < n; i++)
  for (j = 0; j < n; j++)
  {
   cout << "\n输入a[" << i << "][" << j << "] = ";
   cin >> a[i][j];
  }
 cout << "\n输入特征向量的初值。" << endl;
 for (i = 0; i < n; i++)
 {
  cout << "\n输入初值z[" << i << "] = ";
  cin >> z[i];
 }
 cout << "\n输入特征值的容许误差";
 cin >> eps1;
 cout << "\n输入特征向量的容许误差";
 cin >> eps2;
 do
 {
  iteration++;
  check = 0;
  for (i = 0; i < n; i++)
  {
   sum = 0.0;
   for (j = 0; j < n; j++)
   {
    sum += a[i][j]*z[j];
   }
  y[i] = sum;
  }
  lambda = euclidean_norm(y);
  for (i = 0; i < n; i++)
  {
   z[i] = y[i] / lambda;
  }
  if (iteration > 1)
  {
   error1 = fabs((lambda - lambda_old) / lambda);
   for (i = 0; i < n; i++)
   {
    error2 = fabs((z[i] - z_old[i]) / z[i]);
    if (error2 >= eps2)
    {
     check = 1;
    }
   }
   if ((error1 < eps1) && (check == 0))
   {
    flag = 0;
   }
  }
  if (flag == 1)
  {
   lambda_old = lambda;
   for (i = 0; i < n; i++)
   {
    z_old[i] = z[i];
   }
  }
  if (iteration > 1000)
  {
   cout << "\n1000次迭代不收敛,失败..." << endl;
   exit(0);
  }
 }while (flag == 1);
 cout << "\n绝对值最大的特征值 = " << lambda << endl;
 cout << "\n对应特征向量的各分量是:" << endl;
 for (i = 0; i < n; i++)
 {
  cout << "\nz[" << i << "] = " << z[i] << endl;
 }
 cout << "\n收敛于" << iteration << "次迭代。" << endl;
}

//计算向量欧几里得范数的函数
double power::euclidean_norm(double* x)
{
 sum = 0.0;
 for (i = 0; i < n; i++)
 {
  sum += x[i]*x[i];
 }
 sum = sqrt(sum);
 return(sum);
}

乘幂法计算矩阵绝对值最大特征值相关推荐

  1. 乘幂法计算矩阵主特征值和特征向量-Matlab实现

    文章目录 1.前言 2.方法介绍 3.算法步骤 4.数值实验 5.总结 6.Matlab代码 1.前言 乘幂法主要用于求实矩阵按模最大的特征值(主特征值)和相应特征向量.本文通过Matlab解决实际例 ...

  2. 豪斯荷尔德变换 matlab,隐式QR法求实矩阵的全部特征值matlab实现

    隐式QR法求实矩阵的全部特征值matlab实现 隐式QR法求实矩阵的全部特征值matlab实现 要求:用matlab编写通用子程序,利用隐式QR法求实矩阵的全部特征值和特征向量. 思想:隐式QR法实质 ...

  3. R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE)、计算矩阵数据的特征值(eigenvalue)

    R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE).计算矩阵数据的特征值(eigenvalue) 目录 R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE). ...

  4. 线性代数 --- 三种计算矩阵的行列式的方法之二 莱布尼兹展开法(个人笔记扫描版)

    三种计算矩阵的行列式的方法之二 莱布尼兹展开法 在我的个人的线性代数学习中,我分别记录计算矩阵行列式的三种方法,1,LU分解法,2,拉普拉斯展开法,这里我介绍一下第三种方法,莱布尼兹展开法.   行列 ...

  5. qr带原点位移 matlab,qr方法计算中小型矩阵的全部特征值.doc

    qr方法计算中小型矩阵的全部特征值.doc 计算方法课程设计报告学生姓名学号学院班级题目QR方法计算中小型矩阵的全部特征值指导教师职称教授讲师实验师2015年12月31日目录目录I一.选题背景111Q ...

  6. 乘幂法、复化梯形以及二分法求特征值【相关例题python实现】

    目录 写在前面的话 乘幂法 例题 代码 结果 二分法求对称三对角矩阵特征值 代码 结果 复化梯形 例题 代码 结果 写在前面的话 考试结束,<数值计算方法>编程作业发出来给大家看看~ 乘幂 ...

  7. matlab卷积矩阵绝对值,MATLAB矩阵分析和计算

    MATLAB矩阵分析和计算 编辑 锁定 讨论 上传视频 本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! <MATLAB矩阵分析和计算>是清华大学出版社出版的一本图 ...

  8. python numpy逆_Python使用numpy计算矩阵特征值、特征向量与逆矩阵

    原标题:Python使用numpy计算矩阵特征值.特征向量与逆矩阵 Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv() ...

  9. Python使用numpy计算矩阵特征值、特征向量与逆矩阵

    Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv()函数用来计算可逆矩阵的逆矩阵. >>> impor ...

最新文章

  1. 类型转换函数(三十五)
  2. VS2010 修改输出的exe名字和pdb文件名字的方法
  3. ITK:用内核卷积图像
  4. 一段java并发编程代码
  5. Unix domain socket 简介(进程间通信,进程通信)
  6. Python_列表生成式
  7. C#ADO.NET操作数据代码汇总
  8. Jquery Validate 动态添加校验
  9. Python爬虫 --- 2.2 Scrapy 选择器的介绍
  10. 谷歌 Nest 和 Fitbit 漏洞奖励翻番
  11. Linux组件封装(三)使用面向对象编程封装Thread
  12. HFSS阵列天线设计与仿真3
  13. PHP MySQL 数据字典生成器
  14. Excel如何快速生成二维码图片?
  15. 建议IPC采用RTMP(server+rtmppush)的流媒体框架。
  16. java mina框架_Mina框架在项目中的使用(一)
  17. Open Distro for Elasticsearch
  18. android技术交流群 付费群,QQ群付费入群功能停止服务是怎么回事?QQ付费入群功能停止服务详情一览[多图]...
  19. SNN 脉冲神经网络
  20. 路由器桥接成功后,仍然没有网络

热门文章

  1. php图书管理系统源码详细设计,C语言程序设计:图书管理系统(超详细有登录系统,附代码和试验报告)...
  2. 简单的抽卡模拟器1.2
  3. NixOS 安装教程
  4. 什么是SRM系统?有什么作用?如何应用SRM系统?
  5. 豆瓣电影(一):网络爬虫
  6. go入门——基础语法
  7. 第二篇 Cesium从零开始
  8. matlab 损耗计算,matlab配网潮流及线路损耗计算程序.doc
  9. mac osx LiteIDE 搭建go golang开发环境
  10. 稳定靠谱的企业云桌面选择