数值分析计算实习作业二

发布 2020-02-26 04:40:28 阅读 7087

数值分析。

计算实习题二。

学号:姓名:

院系: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...