欢迎来到天天文库
浏览记录
ID:60722429
大小:794.81 KB
页数:20页
时间:2020-12-11
《数值分析计算实习作业二.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数值分析计算实习题二学号:姓名:院系:2015年11月28日一、算法采用拟上三角化的双步位移的QR分解法计算特征值,并利用列主元素Guass消去法求实数特征值对应的特征向量,定义全局变量n=10。1主程序在定义一维和二维数组时将数组的大小定为n+1(大小为11),这样在使用单个元素时的角标可以与矩阵或向量元素的角标相对应。先输入矩阵A的各个元素;保留数组A,定义数组B的元素与A相同,即B=A,后面的矩阵变换用数组B来进行;对B进行拟上三角化;输出拟上三角化后的矩阵B;对拟上三角化后的B进行QR分解,输出矩阵Q、R、RQ;对拟上三角化的数组矩阵B进行QR分解;输出A的全部特征值;判
2、断所有特征值,如果特征值为实数(即储存特征值虚部的数组中元素为0),利用列主元素高斯消去法求其特征向量;输出实特征值对应的特征向量。2拟上三角化程序对于r=1,2,……,n-2循环执行(1)求第r列的第r+2个元素到第n个元素的平方和,如果和为0,则跳出该次循环直接进行下一次r的循环。如果和不为0,则继续执行。(2)计算第r列从第r+1到第n个元素的平方和的平方根当B[r+1][r]小于等于0时,取cr=dr,否则取cr=-drhr=cr*cr-cr*B[r+1][r](3)令(4)计算(5)执行下一次循环。3拟上三角化后的矩阵的QR分解初始令Q=I。对于r=1,2,……,n-1
3、循环执行(1)求第r列的第r+1个元素到第n个元素的平方和,如果和为0,则跳出该次循环直接进行下一次r的循环。如果和不为0,则继续执行。(2)计算第r列从第r到第n个元素的平方和的平方根当B[r+1][r]小于等于0时,取cr=dr,否则取cr=-drhr=cr*cr-cr*B[r+1][r](3)令(4)计算(5)执行下一次循环。循环结束后的Q和B就是分解后的Q和R,之后再求RQ。4QR分解过程给定精度水平sigma=e-12,给定迭代的次数限制L,令k=1,m=n。利用goto和if判断语句在下面几个步骤中跳转。loop3:如果fabs(B[m][m-1])4、到一个特征值B[m][m],将其放入特征值数组中,并令m=m-1,跳转到loop4上;否则跳转到loop5。loop4:如果m=1,则得到特征值B[1][1]放入特征值数组中,跳转到loop9,如果m=2,则求二阶子阵特征值放入特征值数组中,跳转到loop9,否则跳转到loop3。loop5:如果fabs(B[m-1][m-2])<=sigma,则对右下角相邻的一个二阶子阵执行求特征值函数得到两个特征值放入数组中,并且令m=m-2,跳转到loop4;否则跳转到loop6。loop6:如果k=L,则跳出整个循环,输出”未得到全部特征值;否则跳转到loop7。loop7:计算之后对M5、执行QR分解,同时得到新的经过QR分解后的矩阵B,跳转到loop8。loop8:令k=k+1,跳转到loop3。loop9:结束整个循环。最后输出特征值。5对M的QR分解对于r=1,2,……,m循环执行(1)将M矩阵的第r列的第r+1个元素到第m个元素的绝对值相加,如果和为0,则跳出该次循环直接进行下一次r的循环。如果和不为0,则继续执行。(2)计算矩阵M第r列从第r到第m个元素的平方和的平方根当M[r][r]小于等于0时,取cr=dr,否则取cr=-drhr=cr*cr-cr*M[r][r](3)令(4)计算(5)执行下一次循环。最终得到的矩阵B便是对M进行QR分解之后随之变动6、的矩阵B。6二阶子阵的特征值此函数的输入量为m,计算之后判断一元二次函数的是否小于零,从而得到两个特征值的实部和虚部分别放入特征值数组的相应位置。7列主元素高斯消去法参照课本的步骤,需要注意的是因为为奇异,所以在求特征向量的元素时令最后一个元素为1,再利用课本上的步骤倒推其他元素的值。二、程序#include#include#include#defineL2500//定义迭代次数#definen10doubleA[n+1][n+1]={0},B[n+1][n+1]={0},M[n+1][n+1]={0},X[n+1][n+1]7、={0};doublelamr[n+1]={0},lamc[n+1]={0};//lamr储存特征值的实部,lamc储存特征值的虚部doublesigma=1e-12;//定义精度voidhess();//拟上三角化函数voidAQR();//A的QR分解函数voidQRmeth();//带双步位移的QR分解函数voidMQRfenjie(intm);//M的QR分解函数voidgauss(inty);//列主元素gauss消去法求特征向量函数/*****************
4、到一个特征值B[m][m],将其放入特征值数组中,并令m=m-1,跳转到loop4上;否则跳转到loop5。loop4:如果m=1,则得到特征值B[1][1]放入特征值数组中,跳转到loop9,如果m=2,则求二阶子阵特征值放入特征值数组中,跳转到loop9,否则跳转到loop3。loop5:如果fabs(B[m-1][m-2])<=sigma,则对右下角相邻的一个二阶子阵执行求特征值函数得到两个特征值放入数组中,并且令m=m-2,跳转到loop4;否则跳转到loop6。loop6:如果k=L,则跳出整个循环,输出”未得到全部特征值;否则跳转到loop7。loop7:计算之后对M
5、执行QR分解,同时得到新的经过QR分解后的矩阵B,跳转到loop8。loop8:令k=k+1,跳转到loop3。loop9:结束整个循环。最后输出特征值。5对M的QR分解对于r=1,2,……,m循环执行(1)将M矩阵的第r列的第r+1个元素到第m个元素的绝对值相加,如果和为0,则跳出该次循环直接进行下一次r的循环。如果和不为0,则继续执行。(2)计算矩阵M第r列从第r到第m个元素的平方和的平方根当M[r][r]小于等于0时,取cr=dr,否则取cr=-drhr=cr*cr-cr*M[r][r](3)令(4)计算(5)执行下一次循环。最终得到的矩阵B便是对M进行QR分解之后随之变动
6、的矩阵B。6二阶子阵的特征值此函数的输入量为m,计算之后判断一元二次函数的是否小于零,从而得到两个特征值的实部和虚部分别放入特征值数组的相应位置。7列主元素高斯消去法参照课本的步骤,需要注意的是因为为奇异,所以在求特征向量的元素时令最后一个元素为1,再利用课本上的步骤倒推其他元素的值。二、程序#include#include#include#defineL2500//定义迭代次数#definen10doubleA[n+1][n+1]={0},B[n+1][n+1]={0},M[n+1][n+1]={0},X[n+1][n+1]
7、={0};doublelamr[n+1]={0},lamc[n+1]={0};//lamr储存特征值的实部,lamc储存特征值的虚部doublesigma=1e-12;//定义精度voidhess();//拟上三角化函数voidAQR();//A的QR分解函数voidQRmeth();//带双步位移的QR分解函数voidMQRfenjie(intm);//M的QR分解函数voidgauss(inty);//列主元素gauss消去法求特征向量函数/*****************
此文档下载收益归作者所有