数值分析。
计算实习题二。
学号:姓名:
院系:2023年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的全部特征值;
判断所有特征值,如果特征值为实数(即储存特征值虚部的数组中元素为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=-dr
hr=cr*cr-cr*b[r+1][r]
3)令。4)计算。
5)执行下一次循环。
3 拟上三角化后的矩阵的qr分解。
初始令q=i。
对于r=1,2,……n-1循环执行。
1)求第r列的第r+1个元素到第n个元素的平方和,如果和为0,则跳出该次循环直接进行下一次r的循环。如果和不为0,则继续执行。
2)计算第r列从第r到第n个元素的平方和的平方根。
当b[r+1][r]小于等于0时,取cr=dr,否则取cr=-dr
hr=cr*cr-cr*b[r+1][r]
3)令。4)计算。
5)执行下一次循环。
循环结束后的q和b就是分解后的q和r,之后再求rq。
4 qr分解过程。
给定精度水平sigma=e-12,给定迭代的次数限制l,令k=1,m=n。利用goto和if判断语句在下面几个步骤中跳转。
loop3:如果fabs(b[m][m-1])loop4:如果m=1,则得到特征值b[1][1]放入特征值数组中,跳转到loop9,如果m=2,则求二阶子阵特征值放入特征值数组中,跳转到loop9,否则跳转到loop3。
loop5:如果fabs(b[m-1][m-2]) loop6:如果k=l,则跳出整个循环,输出”未得到全部特征值;否则跳转到loop7。 loop7:计算。 之后对m执行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=-dr hr=cr*cr-cr*m[r][r] 3)令。4)计算。 5)执行下一次循环。 最终得到的矩阵b便是对m进行qr分解之后随之变动的矩阵b。 6 二阶子阵的特征值。 此函数的输入量为m,计算。 之后判断一元二次函数的是否小于零,从而得到两个特征值的实部和虚部分别放入特征值数组的相应位置。 7 列主元素高斯消去法。 参照课本的步骤,需要注意的是因为为奇异,所以在求特征向量的元素时令最后一个元素为1,再利用课本上的步骤倒推其他元素的值。 二、程序。#include<> #include<> #include<> #define l 2500//定义迭代次数。 #define n 10 double a[n+1][n+1]=,b[n+1][n+1]=,m[n+1][n+1]=,x[n+1][n+1]=; double lamr[n+1]=,lamc[n+1]=;lamr储存特征值的实部,lamc储存特征值的虚部。 double sigma=1e-12;//定义精度。 void hess();拟上三角化函数。 void aqr();a的qr分解函数。 void qrmeth();带双步位移的qr分解函数。 void mqrfenjie(int m);/m的qr分解函数。 void gauss(int y);/列主元素gauss消去法求特征向量函数。 以下为主程序。 void main() int i,j,k; for(i=1;i<=n;i++)输入矩阵a for(i=1;i<=n;i++)令矩阵b=a,对b做拟上三角化。 hess();拟上三角化矩阵b aqr();将拟上三角化后的矩阵b进行qr分解。 qrmeth();带双步位移的qr分解。 for(k=1;k<=n;k++)判断特征值是否为实数,并求实数的特征向量。 gauss(k);/gauss消去法求特征向量。 以下为拟上三角化程序。 void hess()/拟上三角化函数。 int r=0,i=0,j=0; double temp1,sum=0; double dr=0,cr=0,hr=0,tr=0; double ur[n+1]=,pr[n+1]=,qr[n+1]=,wr[n+1]=; for(r=1;r<=n-2;r++) for(temp1=0.0,i=r+2;i<=n;i++)temp1+=b[i][r]*b[i][r]; if(temp1==0) continue; elsefor(tr=0.0,i=1;i<=n;i++) for(i=1;i<=n;i++) for(i=1;i<=n;i++) for(i=1;i<=n;i++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(fabs(b[i][j])} printf("拟上三角化后a(n-1):"); for(i=1;i<=n;i++)输出拟上三角化函数。 for(j=1;j<=n;j++) printf(""); 以下为qr分解程序。 void aqr()/qr分解函数。 double ur[n+1],wr[n+1],pr[n+1],cr,dr,hr,r[n+1][n+1],q[n+1][n+1]=,rq[n+1][n+1]=; int i,j,r,k; for(i=1;i<=n;i++)令矩阵r等于矩阵b,对r进行qr分解。 for(j=1;j<=n;j++) r[i][j]=b[i][j]; for(i=1;i<=n;i++)q[i][i]=1;//q初始为单位阵。 for(r=1;r<=n-1;r++) 2.1函数图形与极限。2.1.1实验目的。1.熟悉mathematica基本绘图语句。2.掌握函数极限的有关操作命令。3.学会利用mathematica软件对函数进行分析研究。4.熟悉mathematica二元函数绘图语句。2.1.2实验内容。基本语句 选项 功能 画出函数f x 从min到max间... 12.求在 0,1 上的一次最佳平方逼近多项式与二次最佳平方逼近多项式。函数 function s zjpfbj n,a,b 创建一个函数,里面填入次数,和区间范围。base inline x j 1 x j 定义多项式。quan inline 1 x 权函数。a zeros n 1 y zeros... 实验2.2算法设计与比较。实验目的 编制不同方法的matlab程序,这些方法的计算效果和特点。问题提出 非线性方程的数值解法很多,不同的方法效果如何,要靠计算的实践来分析 比较。实验内容 考虑下列算法 1 牛顿法 2 弦割法 3 抛物线法。分别编写它们的matlab程序。牛顿法程序 function...数值计算方法实习作业小
数值分析作业
数值分析作业