- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值分析作业第一题
算法设计方案
利用带状Dollittle分解,将A[501][501]转存到数组C[5][501],以节省存储空间
1、计算和
首先使用幂法求出矩阵的按模最大的特征值λ0:如果λ00,则其必为按模最大值,因此λ501=λ0,然后采用原点平移法,平移量为λ501,使用幂法迭代求出矩阵A-λ501I的按模最大的特征值,其特征值按从小到大排列应为λ1-λ501、λ2-λ501、……、。因此A-λ501I的按模最大的特征值应为λ1-λ501。又因为λ501的值已求得,由此可直接求出λ1。
2、计算,其中λ1和λn分别是矩阵A的模最大和最小特征值,直接利用上面求得的结果直接计算。
矩阵A的行列式可先对矩阵A进行LU分解后,det(A)等于U所有对角线上元素的乘积。
二、源程序:
#includemath.h
#includestdio.h
#includestdlib.h
#includeiostream.h
#define s 2
#define r 2
int Max(int v1,int v2);
int Min(int v1,int v2);
int maxt(int v1,int v2,int v3);
void storage(double C[5][501],double b,double c);
double mifa(double C[5][501]);
void LU(double C[5][501]);
double fmifa(double C[5][501]);
int Max(int v1,int v2) //求两个数的最大值
{ return((v1v2)?v1:v2);
}
int Min(int v1,int v2) //求两个数最小值
{ return ((v1v2)?v1:v2);
}
int maxt(int v1,int v2,int v3) //求三个数最大值
{ int t;
if(v1v2) t=v1;
else t=v2;
if(tv3) t=v3;
return(t);
}
/***将矩阵值转存在一个数组里,以节省存储空间***/
void storage(double C[5][501],double b,double c)
{ int i=0,j=0;
C[i][j]=0,C[i][j+1]=0;
for(j=2;j=500;j++)
C[i][j]=c;
i++;
j=0;
C[i][j]=0;
for(j=1;j=500;j++)
C[i][j]=b;
i++;
for(j=0;j=500;j++)
C[i][j]=(1.64-0.024*(j+1))*sin(0.2*(j+1))-0.64*exp(0.1/(j+1));
i++;
for(j=0;j=499;j++)
C[i][j]=b;
C[i][j]=0;
i++;
for(j=0;j=498;j++)
C[i][j]=c;
C[i][j]=0,C[i][j+1]=0;
}
//用于求解最大的特征值,幂法
double mifa(double C[5][501])
{ int m=0,i,j;
double b2,b1=0,sum;
double u[501],y[501];
for (i=0;i501;i++)
{ u[i] = 1.0;
}
do
{ sum=0;
if(m!=0)b1=b2;
m++;
for(i=0;i=500;i++)
sum+=u[i]*u[i];
for(i=0;i=500;i++)
y[i]=u[i]/sqrt(sum);
for(i=0;i=500;i++)
{ u[i]=0;
for(j=Max(i-r,0);j=Min(i+s,500);j++)
u[i]=u[i]+C[i-j+s][j]*y[j];
}
b2=0;
for(i=0;i=500;i++)
b2=b2+y[i]*u[i];
}
while(fabs(b2-b1)/fabs(b2)=1.0e-12);
return b2;
}
/*****行列式LU分解*****/
void LU(double C[5][501])
{ double sum;
int k,i,j;
for(k=1;k=501;k++)
{ for(j=k;j=Min(k+s,501
您可能关注的文档
最近下载
- 《指向高中生物核心素养的大单元教学设计研究》课题研究方案.doc
- Unit 4 What can you do Part C Story time(课件)-人教PEP版英语五年级上册.pptx VIP
- 学生会权益部部门招新.pptx VIP
- 《22G101三维彩色立体图集》.pdf VIP
- 一种快速测定萤石中氟化钙含量的方法.pdf VIP
- 人教版六年级数学上册同步辅导讲义教师版.doc
- 2025高中英语外刊时文阅读 巴黎奥运会之全红婵和潜水介绍 课件.pptx
- 植物生理学-扬州大学-中国大学MOOC慕课答案.pdf
- 三论我国发展注气提高采收率技术-李士伦.ppt
- 人教版六年级数学上册同步辅导讲义.doc
文档评论(0)