北航数学学院数值分析作业

发布 2022-07-03 18:12:28 阅读 4184

数值分析作业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 ...