欢迎来到天天文库
浏览记录
ID:51306238
大小:218.50 KB
页数:19页
时间:2020-03-21
《数值分析大作业一.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、数值分析大作业一幕法反幕法求矩阵特征值2014.11尤万龙PT1400133数值分析大作业一题目:设有50泮501的实对称矩阵AA=••c•・bb。5010.1其屮,勺=(1.64—0.024i)sin(0.2i)—0.64e,(i=l,2,・・・,501),b=O.I6,c=・0.064。矩阵A的特征值入(i=l,2,・・・,501),并且有人<人「・・5人("I入卜昙叭(&)1.求的值2.求A的与数从二人+R如二九最接近的特征值&•(k=l,2,…,39)。40人3.求A的(谱范数)条件数cond悶和行列式detAo算法设计1.由于C语言
2、小数组角标都是从0开始的,所以在数组MatrixC⑸[501]屮检索A的带内元素aij的方法是:A的带内元素aij=C小的元素ci-j+2,jo2.由于X13、5.利用反幕法,求矩阵A的按模最小的特征值。但是反幕法屮要用到线性方程组的求解,而原矩阵A又是带状矩阵,采用LU分解。所以在这Z前要定义一个LU分解子程序,将A矩阵分解为单位下三角矩阵L和上三角矩阵U的乘积。1.先利用循环求出k从1到39变化的uk的值。半循环次数为39吋,在每次循环时都将压缩后的矩阵A的第三行减去相应的,然后调用LU分解的子程序,利用反幕法求出与uk最接近的特征值,该特征值等于利用反幕法求出的值与uk的和。2.A的谱范数条件数等于按模最大的特征值的绝对值与按模最小的特征值的绝对值之比,按模最人的特征值与按模最小的特征值已分别4、在前面求出。3.A的行列式的值就是矩阵A进行LU分解后U的对角线元素的乘积。先把带状线性矩阵A[501][501]转存为一个矩阵c[5][501].源程序Aheaderfilecomheader.hVttifndefCOWIEADERJLTNCLUDEDttdefineCOMHEADER^INCLUDED#includettinclude#include5、lumnsize二501;constdoubleErr=1.0e~12;ttendif/*matrixfunctionclassdeclarematrixfuc.h*/ttpragmaonce#includez,comheader.h〃classmatrixfuc{public:matrixfuc(void);"matrixfuc(void);doublematrixinit();doublepower_eig();doubleinvpowereig(doubleMatB[5][columnsize]);voidmatrixLU(double6、MatB[5][columnsize]);doublematA[5][columns!ze];};~Arealizationofmatrixfucmatrixfuc.cpp*/#include"matrixfuc.h"intint_max2(inta,intb);intint_min2(inta,intb);intint_max3(inta,intb,intc);matrixfuc::matrixfuc(void){}matrixfuc::〜matrixfuc(void){}/*初始化矩阵*/doublematrixfuc::matrix_i7、nit(void){for(i=();i<5;i++)for(j=0;j8、9、i==3)matA[iJ10、jJ=O.16;elseif(i==2){matA[i][j]=(1.64-0.024*(j+l))*sin(0.2*(j+l))-0.64*exp(0.1/(j+1));}}matA[OJ[OJ=matA[O][lJ=matA[l][O]=0;matA[3J[500J=matA[4J[500J=matA[4J[499]11、=0;return(matA[i][j]);doublematrixfuc::power_eig(){doubleu[column_size],unitu[colu
3、5.利用反幕法,求矩阵A的按模最小的特征值。但是反幕法屮要用到线性方程组的求解,而原矩阵A又是带状矩阵,采用LU分解。所以在这Z前要定义一个LU分解子程序,将A矩阵分解为单位下三角矩阵L和上三角矩阵U的乘积。1.先利用循环求出k从1到39变化的uk的值。半循环次数为39吋,在每次循环时都将压缩后的矩阵A的第三行减去相应的,然后调用LU分解的子程序,利用反幕法求出与uk最接近的特征值,该特征值等于利用反幕法求出的值与uk的和。2.A的谱范数条件数等于按模最大的特征值的绝对值与按模最小的特征值的绝对值之比,按模最人的特征值与按模最小的特征值已分别
4、在前面求出。3.A的行列式的值就是矩阵A进行LU分解后U的对角线元素的乘积。先把带状线性矩阵A[501][501]转存为一个矩阵c[5][501].源程序Aheaderfilecomheader.hVttifndefCOWIEADERJLTNCLUDEDttdefineCOMHEADER^INCLUDED#includettinclude#include5、lumnsize二501;constdoubleErr=1.0e~12;ttendif/*matrixfunctionclassdeclarematrixfuc.h*/ttpragmaonce#includez,comheader.h〃classmatrixfuc{public:matrixfuc(void);"matrixfuc(void);doublematrixinit();doublepower_eig();doubleinvpowereig(doubleMatB[5][columnsize]);voidmatrixLU(double6、MatB[5][columnsize]);doublematA[5][columns!ze];};~Arealizationofmatrixfucmatrixfuc.cpp*/#include"matrixfuc.h"intint_max2(inta,intb);intint_min2(inta,intb);intint_max3(inta,intb,intc);matrixfuc::matrixfuc(void){}matrixfuc::〜matrixfuc(void){}/*初始化矩阵*/doublematrixfuc::matrix_i7、nit(void){for(i=();i<5;i++)for(j=0;j8、9、i==3)matA[iJ10、jJ=O.16;elseif(i==2){matA[i][j]=(1.64-0.024*(j+l))*sin(0.2*(j+l))-0.64*exp(0.1/(j+1));}}matA[OJ[OJ=matA[O][lJ=matA[l][O]=0;matA[3J[500J=matA[4J[500J=matA[4J[499]11、=0;return(matA[i][j]);doublematrixfuc::power_eig(){doubleu[column_size],unitu[colu
5、lumnsize二501;constdoubleErr=1.0e~12;ttendif/*matrixfunctionclassdeclarematrixfuc.h*/ttpragmaonce#includez,comheader.h〃classmatrixfuc{public:matrixfuc(void);"matrixfuc(void);doublematrixinit();doublepower_eig();doubleinvpowereig(doubleMatB[5][columnsize]);voidmatrixLU(double
6、MatB[5][columnsize]);doublematA[5][columns!ze];};~Arealizationofmatrixfucmatrixfuc.cpp*/#include"matrixfuc.h"intint_max2(inta,intb);intint_min2(inta,intb);intint_max3(inta,intb,intc);matrixfuc::matrixfuc(void){}matrixfuc::〜matrixfuc(void){}/*初始化矩阵*/doublematrixfuc::matrix_i
7、nit(void){for(i=();i<5;i++)for(j=0;j8、9、i==3)matA[iJ10、jJ=O.16;elseif(i==2){matA[i][j]=(1.64-0.024*(j+l))*sin(0.2*(j+l))-0.64*exp(0.1/(j+1));}}matA[OJ[OJ=matA[O][lJ=matA[l][O]=0;matA[3J[500J=matA[4J[500J=matA[4J[499]11、=0;return(matA[i][j]);doublematrixfuc::power_eig(){doubleu[column_size],unitu[colu
8、
9、i==3)matA[iJ
10、jJ=O.16;elseif(i==2){matA[i][j]=(1.64-0.024*(j+l))*sin(0.2*(j+l))-0.64*exp(0.1/(j+1));}}matA[OJ[OJ=matA[O][lJ=matA[l][O]=0;matA[3J[500J=matA[4J[500J=matA[4J[499]
11、=0;return(matA[i][j]);doublematrixfuc::power_eig(){doubleu[column_size],unitu[colu
此文档下载收益归作者所有