北航研究生数值分析B作业

发布 2022-09-15 04:29:28 阅读 8093

设有的矩阵。

其中矩阵的特征值满足 ,试求:

1. 的值。

2. 的与数最接近的特征值。

3. 的(谱范数)条件数和行列式。

1. 算法的设计方案

本题的核心算法是幂法、带原点平移的幂法、反幂法和lu分解法,要点在于选择算法时,应使的所有零元素都不存储。故算法设计的思路如下,第一步,对使用幂法(powermethod),可得的按模最大的特征值,记为;

第二步,对使用带有原点平移的幂法,令平移量,可得另一端点的特征值记为;

第三步,比较与的大小,根据条件可知, ;

第四步,对使用反幂法(inversepowermethod),可得的按模最小的特征值(使用lu杜立特尔分解法)

第五步,根据计算出,然后利用带有原点平移的反幂法求得,其中平移量,反幂法运算39次,可得;

第六步, 根据定义,非奇异的实对称矩阵的谱范数条件数,其中分别是矩阵的模为最大和模为最小的特征值,对于本题,则有;

第七步,由lu分解可知,,可得。

由于题目要求算法中所有零元素均不为0,故构造一个givevalue()函数为从一个的数组里为赋值。

2. 全部的源程序。

#include <>

#include <>

void init_a();初始化a

double givevalue(int,int);/为a中元素赋值。

double powermethod(double);/带原点平移的幂法。

double inversepowermethod(double);/带原点平移的反幂法。

int presolve(double);/三角lu分解。

int solve(double double 解方程组。

int max(int,int);

int min(int,int);

double (*u)[502]=new double[502][502];/上三角u数组。

double (*l)[502]=new double[502][502];/单位下三角l数组。

double a[6][502];/矩阵a

int main()

int i,k;

double lambdat1,lambdat2,lambda1,lambda501,lambdas,mu[40],det;

double lambda[40];

init_a();对a初始化。

lambdat1=powermethod(0);

lambdat2=powermethod(lambdat1);

lambda1=lambdat1 lambda501=lambdat1>lambdat2?lambdat1:lambdat2;

presolve(0);

lambdas=inversepowermethod(0);

det=1;

for(i=1;i<=501;i++)

det=det*u[i][i];

for (k=1;k<=39;k++)

mu[k]=lambda1+k*(lambda501-lambda1)/40;

presolve(mu[k]);

lambda[k]=inversepowermethod(mu[k]);

printf计算结果如下所示n");

printf("λ1.11e λ=1.11e",lambda1,lambda501);

printf("λs=%1.11e",lambdas);

printf("cond(a)=%1.11e",fabs(lambdat1/lambdas));

printf("deta=%1.11e ",det);

for (k=1;k<=39;k++)

printf("λi%d=%1.11e ",k,lambda[k]);if(k % 3==0) printf("");

void init_a()/对a初始化。

int i;

for (i=3;i<=501;i++)a[1][i]=a[5][502-i]=-0.064;

for (i=2;i<=501;i++)a[2][i]=a[4][502-i]=0.16;

for (i=1;i<=501;i++)a[3][i]=(1.64-0.024*i)*sin(0.2*i)-0.64*exp(0.1/i);

double givevalue(int i,int j)//为a中非零元赋值,if (abs(i-j)<=2) return a[i-j+3][j];else return 0;

double powermethod(double offset)//幂法。

int i,x1;

double u[502],y[502];

double beta=0,prebeta=-1000,yita=0;

for (i=1;i<=501;i++)

u[i]=1,y[i]=0;//给向量u赋初值

for (int k=1;k<=10000;k++)

prebeta=beta;beta=0;

for (i=1;i<=501;i++)beta=beta+ y[i]*u[i];

if (fabs((prebeta-beta)/beta)<=1e-12) ;

输出偏移量,误差,迭代次数。

return (beta+offset);

double inversepowermethod(double offset)//反幂法。

int i;

double u[502],y[502];

double beta=0,prebeta=0,yita=0;

for (i=1;i<=501;i++)

u[i]=1,y[i]=0; /给u赋初值

for (int k=1;k<=10000;k++)

/输出偏移量,误差,迭代次数。

return (beta+offset);

int presolve(double offset)//三角lu分解。

int i,k,j,t;

double sum;

for (k=1;k<=501;k++)

for (j=1;j<=501;j++)

x[501]=y[501]/u[501][501];

for (i=500;i>=1;i--)

return 0;

int max(int x,int y)

return (x>y?x:y);

int min(int x,int y)

return (x}

3. 计算结果。

计算结果如图1所示。

图1偏移量offset,误差err,迭代次数k也在结果中有所反应,部分结果如图2所示。

图24. 讨论迭代初始向量的选取对计算结果的影响,并说明原因。

在main程序中,为初始向量u赋初值得到上述结果。

下面改变初始向量u的赋值,观察计算结果的差异。

北航研究生数值分析A作业三

数值分析 a 计算实习题目三。一 题目。关于x,y,t,u,v,w的下列方程组。0.5cost u v w x 2.67 t 0.5sinu v w y 1.07 0.5t u cosv w x 3.74 t 0.5u v sinw y 0.79 以及关于z,t,u的下列二维数表。确定了一个二元函数...

北航研究生数值分析作业第二题

一 算法设计方案。1.按照题目给出的矩阵定义对矩阵a赋初值 对应的函数为a init 2.对矩阵a进行householder变换,使其拟上三角化 对应的函数为householder 3.输出拟上三角化后的a 对应的函数为aout int 4.对拟上三角化后的矩阵a使用带双步位移的qr分解法逐次迭代 ...

研究生数值分析作业题

11级研究生数值分析习题。第一章误差及相关问题。1.设的相对误差为,求的绝对误差。2.要使的相对误差不超过0.1 应取几位有效数字?解 知识点 有效数字和相对误差间的关系。因为的首位数字为4,设近视数有n位有效数字,所以有 令 解得 所以有4位有效数字。3.用x近似即最大为多少时,该近似计算的截断误...