数值分析作业1
一、算法设计方案。
1、 计算λ1和λ501时,先用幂法求出a矩阵模最大的特征值,记为max1。然后对矩阵a 平移,求矩阵a-maxi 的模最大的特征值max2。若max2>0,则λ1=max1,λ501=max2+max1;否则,λ1=max1+max2;λ501=max1。
2、 求λs时,用反幂法。由于反幂法需要解方程,故先对a三角分解(本例采取的是不列主元的doolittle 分解),然后每解一次方程,就回代一次。
3、 对于λik (k=1,2,··39),利用带原点平移的反幂法,求矩阵a-μki的模最小的特征值即可。
4、 由于已经对a进行了三角分解,则求a的行列式det(a)时,只需求a所有对角元的乘积。其次因为a是非奇异的实对称矩阵,故a条件数cond(a)2=│max1 / s│。
二、源程序(visual studio 环境下的c语言)
#include<>
#include<>
#include""
#include""
#define n 501
#define s 2对矩阵大小。
#define s 2带宽进行预定义,默认上下带宽一致 */
double tmax(double (*p)[n+1]) 求矩阵的模最大的特征值,采用幂法 */
void fjie( double (*p)[n+1对矩阵进行三角分解,采用不列主元 doolittle分解法 **
double *hdai( double (*p)[n+1],double *q); 对已三角化的方程的系数矩阵求解,即为回代过程 */
double tmin(double (*p)[n+1求矩阵的模最小的特征值 ,采用反幂法。
void main()
double a[6][502],b[6][502],x[40];
double t1,t2,max,min,det_a,cond_a,y;
t1--矩阵最小特征值;
t2--矩阵最大特征值;
max--模最大特征值;
min--模最小特征值;
det_a--a的行列式;
cond_a--a的条件数;
a存储的是题设矩阵a的非零元,a[i-j+s+1][j]=a[i][j];
int i,j;
for(i=1;i<=502;i对矩阵进行填充 */
if(i>=2)
if(i<=500)
if(i<=499)
max=tmax(a); 求a模最大的特征值 */
for(i=1;i<=501;i++)
b[3][i]=a[3][i]-max;
t1=tmax(b);
if(max>0)
else /*此时求得的t1,t2就是λ1,λ501 */
fjie(a
for(i=1;i<=39;i++)
/*x[i]的值就是 λii的值。
for(i=1,det_a=1;i<=501;i++)
det_a=det_a*a[3][i];
min=tmin(a); min的值就是λs的值 */
cond_a=fabs(max/min);
printf("第一题答案:");
printf("λ1=%.12e,λ501=%.12e,λs=%.12e",t1,t2,min);
printf("第二题答案:");
for(i=1,j=1;i<=39;j++,i++)
printf("第三题答案:");
printf("det_a=%.12e,cond_a=%.12e",det_a,cond_a);
system("pause");显示结果窗口 */
double tmax(double (*p)[n+1]) 求矩阵的模最大的特征值,采用幂法 */
* p--指向矩阵 */
double u[n+1],y[n+1],a,b1=1,b2,sum,t=1;
int i,j,k1,k2;
for(i=1;i<=n;i对u向量初始化 */
u[i]=1;
while(fabs(t)>1e-121e-12 "为精度。
for(i=1,b2=0;i<=n;i++)
b2+=y[i]*u[i];
t=(b2-b1)/b2;
b1=b2;
return b1;
void fjie( double (*p)[n+1对矩阵进行三角分解,采用不列主元 doolittle分解法 **
* p--指向矩阵 */
double sum;
int i,j,k,t,h1,h2;
for(k=1;k<=n;k++)
double *hdai( double (*p)[n+1],double *q) /对已三角化的方程的系数矩阵求解,即为回代过程 */
p--指向方程系数矩阵;
q--指向方程右端向量;
double *x;
int i,t,h1,h2;
double sum;
x=(double *)malloc(sizeof(double)*(n+1));
*(x+1)=q[1];
for(i=2;i<=n;i++)
*(x+n)=*x+n)/(p+3)+n));
for(i=n-1;i>=1;i--)
return x;
double tmin(double (*p)[n+1求矩阵的模最小的特征值 ,采用反幂法 */
* p指向矩阵 */
double y[n+1],a,b1=1,b2,sum,t=1;
double *u;
int i;
u=(double *)malloc(sizeof(double)*(n+1));
北航数值分析考点
1.矩阵的谱半径的定义是什么?34页 加没有加绝对值符号?2.矩阵的三种范数分别是怎样定义的?10页 注意,第二种特别容易记错 注意没有加绝对值符号 还有特别要注意绝对值符号是在哪个位置 3.矩阵的条件数是怎么定义的?与什么有关?30页 4.亲手写下三阶差商的公式!掌握差商的求法。96页 5.再顺便...
北航数值分析编程大作业一
数值分析b 大作业一。4系 zy1104219 许柱山。一 算法设计方案 1 首先应该创建原矩阵,但由于题目所给的矩阵是501 501的大型矩阵,计算机在计算时可能会运行不起来。而我们可以发现原矩阵a是一个带状矩阵,因此可以利用这一特点将其压缩存储。2 由于 1 2 501,所以在以所有特征值建立的...
北航研究生数值分析B作业
设有的矩阵。其中矩阵的特征值满足 试求 1.的值。2.的与数最接近的特征值。3.的 谱范数 条件数和行列式。1.算法的设计方案 本题的核心算法是幂法 带原点平移的幂法 反幂法和lu分解法,要点在于选择算法时,应使的所有零元素都不存储。故算法设计的思路如下,第一步,对使用幂法 powermethod ...