《数值分析a》
计算实习题目二。
2023年10月。
一、 算法设计方案。
整个程序主要分为四个函数,主函数,拟上三角化函数,qr分解函数以及使用双步位移求解矩阵特征值、特征向量的函数。因为在最后一个函数中也存在qr分解,所以我没有采用参考书上把矩阵m进行的qr分解与矩阵ak的迭代合并的方法,而是在该函数中调用了qr分解函数,这样增强了**的复用性,减少了程序长度;但由于时间关系,对阵中方法的运算速度没有进行深入研究。
1.为了减少qr分解法应用时的迭代次数,首先对给定矩阵进行拟上三角化处理。
2.对经过拟上三角化处理的矩阵进行qr分解。
3.注意到计算特征值与特征向量的过程首先要应用前面两个函数,于是在拟上三角化矩阵的基础上对qr分解函数进行了调用。计算过程中,没有采用goto语句,而是根据流程图采用其他循环方式完成了设计,通过对迭代过程的合并,简化了程序的循环次数,最后在计算特征向量的时候采用了列主元高斯消去法。
二、源程序**。
#include<>
#include<>
#include<>
inti,j,k,l,m定义外部变量。
double d,h,b,c,t,s;
double a[10][10],aa[10][10],r[10][10],q[10][10],rq[10][10];
double x[10][10],y[10][10],qt[10][10],m[10][10];
double u[10],p[10],t[10],w[10],re[10]=,im[10]=;
double epsilon=1e-12;
void main()
voidquasiuppertriangular(double a[10]);
voidqrdecomposition(double a[10]);
voiddoublestepsqr(double a[10]);
inti,j;
for(i=0;i<10;i++)
a[i][i]=1.5*cos(2.2*(i+1));
aa[i][i]=a[i][i];
quasiuppertriangular(a调用拟上三角化函数
printf( "n a经过拟上三角化矩阵为:");
for(i=0;i<10;i输出拟上三角化矩阵。
qrdecomposition(a调用qr分解函数。
printf( "进行qr分解后,r矩阵为:");输出r矩阵。
for(i=0;i<10;i
printf( "q矩阵为:输出q矩阵。
for(i=0;i<10;i
printf( "rq矩阵为:输出rq矩阵。
for(i=0;i<10;i
doublestepsqr(a调用双步位移函数。
printf( "n 特征值实部依次为:");输出特征值实部。
for(j=0;j<10;j
printf("%12e ",re[j]);
printf(" 特征值虚部依次为:输出特征值虚部。
for(j=0;j<10;j
printf("%12e ",im[j]);
/按行输出特征向量。
printf( "n 按行输出实特征根相应特征向量为:
for(i=0;i<10;i
if(i==1||i==2||i==5||i==6)
continue;
for(j=0;j<10;j++)
printf("%12e ",x[i][j]);
printf("");
getchar();
/拟上三角化函数。
voidquasiuppertriangular(double a[10])
for(j=0;j<8;j++)
m=0;for(i=j+2;i<10;i++)
if(a[i][j]!=0)
m=m+1;
if(m==0)
d=0;for(i=j+1;i<10;i++)
d=sqrt(d);
c=-d;if(a[j+1][j]<=0)
h=c*(c-a[j+1][j]);
u[j+1]=a[j+1][j]-c;
for(i=j+2;i<10;i++)
for(i=0;i<10;i++)
for(k=0;k<10;k++)
p[i]=p[i]+u[k]*a[k][i];
p[i]=p[i]/h;
t=0;for(i=0;i<10;i++)
for(k=0;k<10;k++)
t[i]=t[i]+u[k]*a[i][k];
t[i]=t[i]/h;
t=t+p[i]*u[i];
t=t/h;
for(i=0;i<10;i++)
w[i]=t[i]-t*u[i];
for(k=0;k<10;k++)
a[i][k]=a[i][k]-w[i]*u[k]-u[i]*p[k];
if(abs(a[i][k])<1e-12)
a[i][k]=0;
/qr分解函数。
voidqrdecomposition(double a[10])
for(i=0;i<10;i++)
for(j=0;j<9;j++)
m=0;for(i=j+1;i<10;i++)
if(r[i][j]!=0)
m=m+1;
if(m==0)
d=0;for(i=j;i<10;i++)
d=sqrt(d);
c=-d;if(r[j][j]<=0)
h=c*(c-r[j][j]);
u[j]=r[j][j]-c;
for(i=j+1;i<10;i++)
for(i=0;i<10;i++)
for(k=0;k<10;k++)
w[i]=w[i]+u[k]*q[i][k];
for(i=0;i<10;i++)
for(k=0;k<10;k++)
q[i][k]=q[i][k]-(w[i]*u[k])/h);
for(i=0;i<10;i++)
for(k=0;k<10;k++)
p[i]=p[i]+u[k]*r[k][i];
p[i]=p[i]/h;
for(i=0;i<10;i++)
for(k=0;k<10;k++)
r[i][k]=r[i][k]-u[i]*p[k];
if(abs(r[i][k])
r[i][k]=0;
for(i=0;i<10;i计算a(n+1)=rq
for(j=0;j<10;j++)
for(k=0;k<10;k++)
rq[i][j]=rq[i][j]+r[i][k]*q[k][j];
/双步位移法计算特征值特征向量函数
voiddoublestepsqr(double a[10])
int l=1000,m=9定义最大循环次数。
for(i=0;i {
for(;m>-1;)
if(abs(a[m][m-1]) re[m]=a[m][m]; m=m-1降阶。 if(m==04 re[0]=a[0][0]; break; if(m==-1) break; if(m>1) continue; b=-a[m][m]-a[m-1][m-15 c=a[m][m]*a[m-1][m-1]-a[m][m-1]*a[m-1][m]; 题目 使用带双步位移的qr分解法求矩阵的全部特征值,并对其中的每一个实特征值求相应的特征向量。已知 i,j 1,2,10 一 算法的设计方案 一 总体方案设计 构造矩阵 a,先利用householder矩阵对矩阵a作相似变换,把a化为拟上三角矩阵a n 1 然后进行带双步位移的qr分解求解矩阵的全部... 数值分析 计算实习作业。第二题 算法设计方案 1 对矩阵a赋值,取计算精度 1 10 12 2 对矩阵a进行拟上三角化,得到a n 1 并输出a n 1 对矩阵a的拟上三角化,通过直接调用子函数inftrianglize a 来实现 拟上三角化得到的矩阵a n 1 输出至文件中。3 对a n 1 进... 一 填空题。是指人们关于基本价值的立场 取向 态度 信念 理想系统。是指一种哲学思想或道德标准,用来辨别行为的善与恶,即这会关系中判断行为的一种道德标准。是指风俗习惯及社会传统,它是调节和约束人们行为的一种社会规范。社会工作伦理困境是指由于社会工作者所秉承的 之间的不一致而产生的困顿局面。社会工作专...北航数值分析第二次大作业
北航数值分析大作业第二次
第二次大作业