乘幂法计算矩阵绝对值最大特征值
//乘幂法计算矩阵绝对值最大特征值
#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);
}
乘幂法计算矩阵绝对值最大特征值相关推荐
- 乘幂法计算矩阵主特征值和特征向量-Matlab实现
文章目录 1.前言 2.方法介绍 3.算法步骤 4.数值实验 5.总结 6.Matlab代码 1.前言 乘幂法主要用于求实矩阵按模最大的特征值(主特征值)和相应特征向量.本文通过Matlab解决实际例 ...
- 豪斯荷尔德变换 matlab,隐式QR法求实矩阵的全部特征值matlab实现
隐式QR法求实矩阵的全部特征值matlab实现 隐式QR法求实矩阵的全部特征值matlab实现 要求:用matlab编写通用子程序,利用隐式QR法求实矩阵的全部特征值和特征向量. 思想:隐式QR法实质 ...
- R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE)、计算矩阵数据的特征值(eigenvalue)
R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE).计算矩阵数据的特征值(eigenvalue) 目录 R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE). ...
- 线性代数 --- 三种计算矩阵的行列式的方法之二 莱布尼兹展开法(个人笔记扫描版)
三种计算矩阵的行列式的方法之二 莱布尼兹展开法 在我的个人的线性代数学习中,我分别记录计算矩阵行列式的三种方法,1,LU分解法,2,拉普拉斯展开法,这里我介绍一下第三种方法,莱布尼兹展开法. 行列 ...
- qr带原点位移 matlab,qr方法计算中小型矩阵的全部特征值.doc
qr方法计算中小型矩阵的全部特征值.doc 计算方法课程设计报告学生姓名学号学院班级题目QR方法计算中小型矩阵的全部特征值指导教师职称教授讲师实验师2015年12月31日目录目录I一.选题背景111Q ...
- 乘幂法、复化梯形以及二分法求特征值【相关例题python实现】
目录 写在前面的话 乘幂法 例题 代码 结果 二分法求对称三对角矩阵特征值 代码 结果 复化梯形 例题 代码 结果 写在前面的话 考试结束,<数值计算方法>编程作业发出来给大家看看~ 乘幂 ...
- matlab卷积矩阵绝对值,MATLAB矩阵分析和计算
MATLAB矩阵分析和计算 编辑 锁定 讨论 上传视频 本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! <MATLAB矩阵分析和计算>是清华大学出版社出版的一本图 ...
- python numpy逆_Python使用numpy计算矩阵特征值、特征向量与逆矩阵
原标题:Python使用numpy计算矩阵特征值.特征向量与逆矩阵 Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv() ...
- Python使用numpy计算矩阵特征值、特征向量与逆矩阵
Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv()函数用来计算可逆矩阵的逆矩阵. >>> impor ...
最新文章
- 类型转换函数(三十五)
- VS2010 修改输出的exe名字和pdb文件名字的方法
- ITK:用内核卷积图像
- 一段java并发编程代码
- Unix domain socket 简介(进程间通信,进程通信)
- Python_列表生成式
- C#ADO.NET操作数据代码汇总
- Jquery Validate 动态添加校验
- Python爬虫 --- 2.2 Scrapy 选择器的介绍
- 谷歌 Nest 和 Fitbit 漏洞奖励翻番
- Linux组件封装(三)使用面向对象编程封装Thread
- HFSS阵列天线设计与仿真3
- PHP MySQL 数据字典生成器
- Excel如何快速生成二维码图片?
- 建议IPC采用RTMP(server+rtmppush)的流媒体框架。
- java mina框架_Mina框架在项目中的使用(一)
- Open Distro for Elasticsearch
- android技术交流群 付费群,QQ群付费入群功能停止服务是怎么回事?QQ付费入群功能停止服务详情一览[多图]...
- SNN 脉冲神经网络
- 路由器桥接成功后,仍然没有网络