用幂法和反幂法分别计算矩阵按模最大和按模最小的特征值及其特征向量
//
// 用幂法和反幂法分别计算矩阵按模最大和按模最小的特征值及其特征向量 //
//
#include<stdio.h>
#include<math.h>
#include<iostream>
#define MAX_N 20 //方阵最大维数
#define MAXREPT 100 //迭代次数
#define epsilon 0.00001 //求解精度
using namespace std;int n;
int i, j, k;
double error;
double xmax, oxmax;
static double a[MAX_N][MAX_N]; //AX=C的A矩阵
static double L[MAX_N][MAX_N], u[MAX_N][MAX_N];
static double x[MAX_N], nx[MAX_N];void power_Method() {//初始化特征向量的值for (i = 0; i < n; i++) x[i] = 1;oxmax = 0; for (i = 0; i < MAXREPT; i++) { //迭代最大周期for (j = 0; j < n; j++) { //幂乘 x^(k+1) = A * x^k nx[j] = 0;for (k = 0; k < n; k++) { //矩阵*向量nx[j] += a[j][k] * x[k];}}xmax = 0.0;for (j = 0; j < n; j++) //规范化 x[i] / max(x)if (fabs(nx[j]) > xmax)xmax = fabs(nx[j]);for (j = 0; j < n; j++)nx[j] /= xmax; for (j = 0; j < n; j++)x[j] = nx[j] ;if (fabs(xmax - oxmax) < epsilon) {cout << "Solve the problem after "<<i<<" repeats,the max lambda = " << xmax << endl;cout << "The vector is:" << endl;for (j = 0;j < n; j++)cout << nx[j] << endl;return;}oxmax = xmax;}cout << "Ater " << MAX_N << "repeat,max no result...\n" << endl;
}
void inversePowerMethod();
int main() {cout<<"输入矩阵的维数n(dim of AX =C)"<<endl;cin >> n;if (n > MAX_N) {cout << "The input n is larger than MAX_N,please redefine the MAX_N" << endl;return 1;}if (n <= 0) {cout << "Please input a proper number between 1 and" << MAX_N << endl;return 1;}//输入矩阵Aprintf("Now input the matrix a(i,j),i,j=0...%d\n", n - 1);for (i = 0; i < n; i++)for (j = 0; j < n; j++)cin >> a[i][j];// power_Method();inversePowerMethod();
}/*P(A-pI)=LU*/
void inversePowerMethod() {for (i = 0; i < n; i++) // U矩阵对角元素为1 u[i][i] = 1;for (k = 0; k < n; k++) {for (i = k; i < n; i++) { //计算L矩阵L[i][k] = a[i][k];for (j = 0; j <= k - 1; j++) L[i][k] -= L[i][j] * u[j][k]; }for (j = k + 1; j < n; j++) { //计算U矩阵u[k][j] = a[k][j];for (i = 0; i <= k - 1; i++)u[k][j] -= L[k][i] * u[i][j];u[k][j] /= L[k][k];}}for (i = 0; i < n; i++)x[i] = 1;oxmax = 0;for (i = 0; i < MAXREPT; i++) {for (j = 0; j < n; j++){ //反幂乘nx[j] = x[j];for (k = 0; k <= j - 1; k++)nx[j] -= L[j][k] * nx[k];nx[j] /= L[j][j];}for (j = n - 1; j >= 0; j--) {x[j] = nx[j];for (k = j + 1; k < n; k++) x[j] -= u[j][k] * x[k]; }xmax = 0;for (j = 0; j < n; j++) if (fabs(x[j] > xmax))xmax = fabs(x[j]);for (j = 0; j < n; j++) {x[j] /= xmax;}if (fabs(xmax - oxmax) < epsilon) {cout << "Solve .. min lamda=" << 1 / xmax << endl;for (i = 0; i < n; i++)cout << x[i] << endl;return;}oxmax = xmax;}
}/*测试案例A=[ 1 1 0.51 1 0.25 0.5 0.25 2.0]
*/
用幂法和反幂法分别计算矩阵按模最大和按模最小的特征值及其特征向量相关推荐
- matlab幂法与反幂法,matlab位移反幂法
本次实验所用的幂法和反幂法分别是求解 最大特征值和最小特征值,并根据它们的结果求解二条件数.幂法和反幂法的 Matlab 程序很好的解决了手算时所会遇到的...... 类似幂法和反幂法可以写出按模最小 ...
- 反幂法matlab程序,数值分析幂法和反幂法.doc
<数值分析幂法和反幂法.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<数值分析幂法和反幂法.doc>文档请在天天文库搜索. 1.题目幂法和反幂 ...
- 2021-01-07 matlab数值分析 矩阵特征值与特征向量的计算 改进乘幂法 反幂法
matlab数值分析 矩阵特征值与特征向量的计算 1改进乘幂法 function [t,y]=eigIPower(A,v0,ep) [tv,ti]=max(abs(v0)); lam0=v0(ti) ...
- 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.doc
数值分析试验幂法与反幂法matlab 一.问题的描述及算法设计 (一)问题的描述 我所要做的课题是:对称矩阵的条件数的求解设计 1.求矩阵A的二条件数 问题 A= 2.设计内容: 1)采用幂法求出A的 ...
- 乘幂法计算矩阵主特征值和特征向量-Matlab实现
文章目录 1.前言 2.方法介绍 3.算法步骤 4.数值实验 5.总结 6.Matlab代码 1.前言 乘幂法主要用于求实矩阵按模最大的特征值(主特征值)和相应特征向量.本文通过Matlab解决实际例 ...
- 【数值计算】幂法与反幂法
幂法 求矩阵模最大的特征值及其对应特征向量 注:需要模最大特征值唯一,矩阵各列线性无关 // 幂法求特征值 // 需要保证各列线性无关 #include <iostream> #inclu ...
- R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离、dist函数计算矩阵中两两元素的曼哈顿距离
R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离.dist函数计算矩阵中两两元素的曼哈顿距离 目录 R语言计算曼哈顿距离(Manhattan Distance ...
最新文章
- 【IBM Tivoli Identity Manager 学习文档】11 TIM设计思路介绍
- C++重载运算符最好声明为友元
- 内存大对象dump linux_在 Linux 上创建并调试转储文件 | Linux 中国
- 为什么python打开pygame秒关闭后在运行_当我运行Python程序时,pygame窗口打开片刻,然后退出 - python...
- 随想录(三言两语app)
- python切片读取数据_在Python中读取、切片和重组数据文件blockbyblock
- 详解MAC硬盘中各个文件夹
- nxlog收集windows事件方案
- Excel汇总的撤销整个工作表保护的2种操作方法!
- 2021年中国新型电力系统行业市场现状、竞争格局与发展方向分析「图」
- Basler相机实时图像显示--Qt代码
- Android 模拟吹气实现吹风车效果
- access无法 dolby_dolby access怎么用?
- 2019-04-01 银行的零售业务和对公业务
- 微信PC扫码支付(五)-订单查询,关闭订单,下载对账单
- UML类图和用例图练习
- 越来越卷,教你使用Python实现卷积神经网络(CNN)
- OGRE+CG学习日记[1]-简单的3D程序
- pythonocc_PythonOCC基础使用:点的性质(glsl定义)
- 石英晶振的发展趋势及应用
热门文章
- 爬虫有道翻译接口+图片文字识别
- 发布一套类似于网易ITOWN,基于脚本开发的休闲游戏系统
- svn修改提交日志信息
- 少儿编程培训发展的重要趋势
- 网易163vip邮箱、163.net邮箱、新浪vip邮箱、QQ邮箱,哪款更符合商务邮件的需求
- Maven - 国内Maven仓库之阿里云Aliyun仓库地址及设置
- appium重启报错:Could not proxy command to the remote server. Original error: socket hang up
- 【时间序列】ARMA 时序模型形式、理解、统计特性
- JS去除字符串中间多余空格
- Python之路【第七篇】:常用模块