【数值计算】幂法与反幂法
幂法
求矩阵模最大的特征值及其对应特征向量
注:需要模最大特征值唯一,矩阵各列线性无关
// 幂法求特征值
// 需要保证各列线性无关
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <iomanip>using namespace std;#define N 5class MT {
public:int x, y;double mt[N][N];MT() {}MT(int x, int y) {this->x = x;this->y = y;for (int i = 0; i < this->x; i++)for (int j = 0; j < this->y; j++)mt[i][j] = 0.0;}
};MT operator * (MT a, MT b) {MT c(a.x, b.y);for (int i = 0; i < c.x; i++)for (int j = 0; j < c.y; j++) {c.mt[i][j] = 0;for (int k = 0; k < a.y; k++)c.mt[i][j] += a.mt[i][k] * b.mt[k][j];}return c;
}MT A(3, 3);
MT xk(3, 1), yk(3, 1);
double lastm, m;
int n;
double eps;void init() {n = 3;A.mt[0][0] = 2; A.mt[0][1] = 4; A.mt[0][2] = 6;A.mt[1][0] = 3; A.mt[1][1] = 9; A.mt[1][2] = 15;A.mt[2][0] = 4; A.mt[2][1] = 16; A.mt[2][2] = 36;xk.mt[0][0] = xk.mt[0][1] = xk.mt[0][2] = 1.0;m = 1.0;lastm = -9999.0;eps = 0.0001;//精度设置
}int main() {init();while (fabs(lastm - m) > eps) {lastm = m;yk = A * xk;m = yk.mt[0][0];for (int i = 1; i < n; i++) m = max(m, yk.mt[i][0]);for (int i = 0; i < n; i++) {xk.mt[i][0] = (1.0 / m) * yk.mt[i][0];}for (int i = 0; i < n; i++) {cout << right << setw(6) << yk.mt[i][0] << " ";}cout << right << setw(6) << m << " ";for (int i = 0; i < n; i++) {cout << right << setw(6) << xk.mt[i][0] << " ";}cout << endl;}return 0;
}
反幂法
求矩阵模最小的特征值及其对应特征向量
注:与幂法几乎完全相同
// 反幂法求特征值
// 需要保证各列线性无关
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <iomanip>using namespace std;#define N 5class MT {
public:int x, y;double mt[N][N];MT() {}MT(int x, int y) {this->x = x;this->y = y;for (int i = 0; i < this->x; i++)for (int j = 0; j < this->y; j++)mt[i][j] = 0.0;}
};MT operator * (MT a, MT b) {MT c(a.x, b.y);for (int i = 0; i < c.x; i++)for (int j = 0; j < c.y; j++) {c.mt[i][j] = 0;for (int k = 0; k < a.y; k++)c.mt[i][j] += a.mt[i][k] * b.mt[k][j];}return c;
}MT A(3, 3);
MT xk(3, 1), yk(3, 1);
double lastm, m;
int n;
double eps;void init() {n = 3;A.mt[0][0] = 2; A.mt[0][1] = 0; A.mt[0][2] = 0;A.mt[1][0] = 2; A.mt[1][1] = 3; A.mt[1][2] = 2;A.mt[2][0] = 1; A.mt[2][1] = 2; A.mt[2][2] = 3;xk.mt[0][0] = 1.0;m = 1.0;lastm = 0.0001;eps = 0.0001;//精度设置
}MT gauss(MT a, MT y) {for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {double t = a.mt[j][i] / a.mt[i][i];for (int k = i; k < n; k++) {a.mt[j][k] -= t * a.mt[i][k];}y.mt[j][0] -= t * y.mt[i][0];}}MT rt(3, 1);for (int i = n - 1; i >= 0; i--) {double tmp = y.mt[i][0];for (int j = n - 1; j > i; j--)tmp -= rt.mt[j][0] * a.mt[i][j];rt.mt[i][0] = tmp / a.mt[i][i];}return rt;
}int main() {init();while (fabs(1.0 / lastm - 1.0 / m) > eps) {lastm = m;yk = gauss(A, xk);m = yk.mt[0][0];for (int i = 1; i < n; i++) m = max(m, yk.mt[i][0]);for (int i = 0; i < n; i++) {xk.mt[i][0] = (1.0 / m) * yk.mt[i][0];}for (int i = 0; i < n; i++) {cout << right << setw(10) << yk.mt[i][0] << " ";}cout << right << setw(10) << m << " ";for (int i = 0; i < n; i++) {cout << right << setw(10) << xk.mt[i][0] << " ";}cout << endl;}return 0;
}
【数值计算】幂法与反幂法相关推荐
- matlab 幂法,数值分析试验幂法与反幂法matlab.doc
数值分析试验幂法与反幂法matlab 一.问题的描述及算法设计 (一)问题的描述 我所要做的课题是:对称矩阵的条件数的求解设计 1.求矩阵A的二条件数 问题 A= 2.设计内容: 1)采用幂法求出A的 ...
- matlab程序的幂法,数值分析课程设计+幂法与反幂法MATLAB
数值分析课程设计+幂法与反幂法MATLAB 1一.问题的描述及算法设计(一)问题的描述本次课程设计我所要做的课题是对称矩阵的条件数的求解设计1.求矩阵 A 的二条件数问题 A 2102.设计内容1)采 ...
- 幂法的c语言程序例子,数值分析之幂法及反幂法C语言程序实例.doc
0;i--) { temp=0; for(t=i+1;t<=min(i+S,N);t++) temp+=A[i-t+S][t-1]*u[t-1]; u[i-1]=(y[i-1]-temp)/A[ ...
- matlab幂法与反幂法,matlab位移反幂法
本次实验所用的幂法和反幂法分别是求解 最大特征值和最小特征值,并根据它们的结果求解二条件数.幂法和反幂法的 Matlab 程序很好的解决了手算时所会遇到的...... 类似幂法和反幂法可以写出按模最小 ...
- 用幂法和反幂法分别计算矩阵按模最大和按模最小的特征值及其特征向量
// // 用幂法和反幂法分别计算矩阵按模最大和按模最小的特征值及其特征向量 // // #include<stdio.h> #include<math.h> #include ...
- 反幂法matlab程序,数值分析幂法和反幂法.doc
<数值分析幂法和反幂法.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<数值分析幂法和反幂法.doc>文档请在天天文库搜索. 1.题目幂法和反幂 ...
- matlab在数值计算中的应用,详解MATLAB在科学计算中的应用
详解MATLAB在科学计算中的应用 编辑 锁定 讨论 上传视频 <详解MATLAB在科学计算中的应用>是2011年电子工业出版社出版的图书,作者是陈泽占海明. 书 名 详解MATLA ...
- 数值计算---求希尔伯特矩阵的条件数
这几天数值计算老师交给我们一个课程设计,计算希尔伯特矩阵的条件数,观察其随维数的变化情况. 下面是程序,主要用到幂法和反幂法. #include <iostream> #include & ...
- matlab幂法的瑞利商加速,瑞利商加速定理14.PPT
瑞利商加速定理14 第8章 矩阵特征值问题计算 8 . 2 幂法及反幂法 8.2.2 加速方法 原点平移法 由前面讨论知道,应用幂法计算 的主特征值的收敛 速度主要由比值 来决定,但当 接近于1时,收 ...
最新文章
- exit的用法python_python 中exit,sys.exit,os._exit用法
- PHP版本的Graphviz样例之集群流程图
- OpenCL2.0特性之SVM
- 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心
- 收藏!史上最全的30个生物实验技术及原理
- Nexus入门【转】
- bzoj4773 负环
- [ 搭建Redis本地服务器实践系列二 ] :图解CentOS7配置Redis
- MyBatis源码阅读(七) --- 查询结果集封装流程
- SQL2014 MySQL_SQL Server 2014 Express 官方免费版下载
- python爬虫与反爬虫
- 国产操作系统之中兴新支点NewStartOS安装
- web页面跳转支付宝网页支付
- 解决Cipher Suites导致的“未能创建 SSL/TLS 安全通道”异常问题
- 【Vue3 第十四章】父子组件通信
- iOS开发中UIImageView逆时针旋转,并得到旋转后的图片
- winform 两个区域保持固定距离_【麻辣烫】川渝区域零担十强分析:余氏东风、力展、宇鑫、金泓达快运、长吉、西部风、海风快运、绍平、迪丰、健隆......
- Solr Filter过滤器
- 面试经验(互联网,研究所,国企)
- 平行泊车系统路径规划(5)