- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北航数值分析计算实习题目二 矩阵QR分解
数值分析
实习二
院(系)名称 航空科学与工程学院 专业名称 动力工程及工程热物理 学号 SY0905303 学生姓名 解立垚
题目
试用带双步位移QR的分解法求矩阵A=[aij]10*10的全部特征值,并对其中的每一个实特征值求相应的特征向量。已知 。说明:
1、求矩阵特征值时,要求迭代的精度水平为。
2、打印以下内容:
算法的设计方案;
全部源程序(要求注明主程序和每个子程序的功能);
矩阵A经过拟上三角话之后所得的矩阵;
对矩阵进行QR分解方法结束后所得的矩阵;
矩阵A的全部特征值,和A的相应于实特征值的特征向量;
其中如果是实数,则令
3、采用e型输出数据,并且至少显示12位有效数字。
算法设计方案
本题采用带双步位移的QR分解方法。
为了使程序简洁,自定义类Xmatrix,其中封装了所需要的函数方法。
在Xmatrix类中封装了运算符重载的函数,即定义了矩阵的加、减、乘、除、数乘运算及转置运算(T())。同时为了避免传递数组带来的额外内存开销,使用引用()代替值传递,以节省内存空间,避免溢出.
(1)此程序的主要部分为Xmatrix中的doubleQR()方法,具体如下:
Step1:使用矩阵拟上三角化的算法将A化为拟上三角阵A(n-1)(此处调用Xmatrix中的preQR()方法)
Step2:令, 其中k为迭代次数。
Step3:如果,则得到A的一个特征值,令,goto Step4;否则goto Step5.
Step4: 如果,则得到A的一个特征值,goto Step11;如果,则goto Step11;如果,则goto Step3;
Step5(Step6):如果,则得到A的两个特征值(为右下角两阶子阵对应的特征方程的两个根。),goto Step 11,否则goto Step7:
Step7:如果,则得到A的两个特征值(定义同上),令,goto Step4;否则goto Step8.
Step8:如果,则输出“error”否则goto Step9.
Step9(Step10):对A(m×m阶)进行QR 分解,此处调用Xmatrix中的方法QR().令k=k+1,goto Step3.
Step11:若到此步,则认为程序已经计算出全部特征值或已超过最大迭代次数k,退出此函数,相当于return 0.
(2)在求特征向量对应的特征值时,采用列主元素的高斯消元法,来解方程组(A-λI)x=0,以得出某一组特征向量。在消元法的过程中,首先进行行交换,把aik(i=k,k+1,…,n)中绝对值最大的元素交换到第k行的主对角线上,然后再使用第二种初等行变换进行消元。由于A-λI为非满秩矩阵,故这样变换得到的矩阵ann=0,令xn=1,即可解出某一个特征向量。
具体算法在Xmatrix::Get_Eigenvector中,如下:
消元过程:
对于k=1,2,…,n-1执行
Step1:选行号ik,使
Step2:交换以及所含的数值
Step3:对于计算
回代过程:
(3)拟上三角化的过程在Xmatrix::QR()中,具体算法如下:
记,并记的第r列至第n列的元素为
对执行:
Step1:若全为零,则令,转(5);否则转(2)。
Step2:计算
(若,则取)
Step3:令
Step4:计算
(4)QR分解的过程在Xmatrix::QR()中,具体算法如下:
记
对于r=1,2,…,m-1执行
Step1:若全为零,则令,转(5);否则转(2)。
Step2:计算
(若)
Step3:令
Step4:计算
此算法执行完后,就得到。
全部源程序
#include stdio.h
#include math.h
#includeiostream
using namespace std;
class XMatrix //定义类Xmatrix
{
private:
public:
int dim_a,dim_b; //类成员dim_a和dim_b为矩阵的行数和列数
double a[11][11]; //类成员a数组用来存储矩阵元素
XMatrix(int i=1,int j=1):dim_a(i),dim_b(j) //类的构造函数,传递行数和列数
{
}
void ShowIt() const //此方法用来显示矩阵元素
{
for(int i=1;i=dim_a;i++)
for(int j=1;j=dim_b;j++)
{
printf(%1.12f ,a[i][j]);
您可能关注的文档
- 信息系本科毕业论文基于Android的邮件收发系统设计.doc
- 信用社对账管理办法.doc
- 信访干部先进事迹材料信访干部先进事迹材料.doc
- 债务融资与“债权软约束”理论分析:对国企实行债权转股权的理性思考.doc
- 倾城之恋鉴赏解析.docx
- 偏瘫患者良姿位的摆放及房间的布置在康复护理中的应用.doc
- 健康管理教育在社區慢性病管理中的應用.doc
- 做销售怎样做才能成功.doc
- 做好眼保健操 Microsoft PowerPoint 演示文稿.ppt
- 儿科护理学先心病患儿的护理.doc
- 新教材2023年高考物理总复习-考案6-周测卷五-抛体运动-圆周运动课件.pptx
- 中央空调基础-PPT课件.ppt
- 部编版七年级历史上册第20课-魏晋南北朝的科技与文化-精品课件(共63张PPT).pptx
- 部编人教版七年级道德与法治下册第四单元《走进法治天地》优质课课件(2课共4课时).ppt
- 第3章数控铣削加工工艺(教案9).ppt
- 新人教版八年级物理上册期中考试卷【参考答案】.doc
- 2016-2017学年北京朝阳区人大附朝阳学校初二上学期期中物理试卷.pdf
- 药物传递:第二章.ppt
- 小学生国庆节实践的活动方案.docx
- 人教部编版七年级上册第三单元名著导读《朝花夕拾》课件(38张ppt).pptx
文档评论(0)