数值作业1Word文档格式.docx

上传人:b****5 文档编号:15838442 上传时间:2022-11-16 格式:DOCX 页数:16 大小:40.78KB
下载 相关 举报
数值作业1Word文档格式.docx_第1页
第1页 / 共16页
数值作业1Word文档格式.docx_第2页
第2页 / 共16页
数值作业1Word文档格式.docx_第3页
第3页 / 共16页
数值作业1Word文档格式.docx_第4页
第4页 / 共16页
数值作业1Word文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数值作业1Word文档格式.docx

《数值作业1Word文档格式.docx》由会员分享,可在线阅读,更多相关《数值作业1Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

数值作业1Word文档格式.docx

    ck-j+s+1,j:

=ck-j+s+1,j-

ck-t+s+1,jct-j+s+1,j

[j=k,k+1,…min(k+s,n)]

Ci-k+s+1,k:

=(ci-k+s+1,k-

ci-t+s+1,tct-k+s+1,k)/cs+1,k

[i=k+1,k+2,…min(k+r,n);

k<

n]

(2)求解Lx=y,Uuk=x(数组y先是存放原方程组右端的向量,后来存放中间变量,最后求解新的迭代向量uk)

  yi:

=yi-

ci-t+s+1,tyt

[i=2,3,…,n]

un:

=yn/cs+1,n

un:

=(yi-

ci-t+s+1,tut)/cs+1,i

[i=n-1,n-2,…1]

六.算法说明:

  1.选择不同的初始向量会得到不同的特征值,这是因为收敛速度的不同引起的.通过选择几组不同的初始向量比较后,发现当初始向量按照程序中的取值时比较合理,得到的特征值较为精确.

   2.利用矩阵U所有主元素乘积求detA,cond(A)

可有公式cond(A)

求得。

分别利用幂法和反幂法求的。

#include<

stdio.h>

stdlib.h>

math.h>

intMax(inta,intb,intc);

intMin(inta,intb);

doublea[501],C[5][501];

/*声明全局变量*/

/******************************************/

/*函数:

power*/

/*功能:

幂法按模最大求特征值*/

/*说明:

p是矩阵运算是需要平移的量*/

doublepower(doublep)

{

intm,k,t,n;

doubledPreVal,dVal;

doubley[501],u[501],s=0,b=0.16,c=-0.064,sum;

dPreVal=0.0;

dVal=0.0;

t=0;

/*********初始化u[n]*******/

for(n=0;

n<

501;

n++)

u[n]=1;

while(t<

2||fabs(dVal-dPreVal)/fabs(dVal)>

=1e-12)/*迭代循环*/

{sum=0;

dPreVal=dVal;

for(k=0;

k++)/*求模*/

{

sum+=u[k]*u[k];

}

/**********计算迭代向量Y*********/

k++)

{

y[k]=u[k]/sqrt(sum);

/*******矩阵与迭代向量相乘***********/

/*******求出新的迭代向量***********/

for(m=0;

m<

m++)

if(m==0)

{

s=(a[m]-p)*y[0]+b*y[1]+c*y[2];

}

elseif(m==1)

s=b*y[0]+(a[m]-p)*y[1]+b*y[2]+c*y[3];

}

elseif(m==499)

s=c*y[497]+b*y[498]+(a[m]-p)*y[499]+b*y[500];

elseif(m==500)

s=c*y[498]+b*y[499]+(a[m]-p)*y[500];

elseif(m!

=0&

&

m!

=1&

=499&

=500)

s=c*y[m-2]+b*y[m-1]+(a[m]-p)*y[m]+b*y[m+1]+c*y[m+2];

u[m]=s;

dVal=dVal+u[m]*y[m];

t++;

returndVal;

}

Max*/

求三个数的最大值*/

intMax(inta,intb,intc)

{

intmax;

max=a;

if(b>

max)max=b;

if(c>

max)max=c;

returnmax;

Min*/

求两个数的最小值*/

intMin(inta,intb)

if(a<

b)returna;

elsereturnb;

revpower*/

反幂法按模最小求特征值*/

doublerevpower()

Intk,t,n,m,x;

doubledPreVal,dVal;

doubley[501],u[501],v[501],s,sum;

/********初始化迭代向量u[n]**********/

/*************迭代循环(根据精度要求选择适当的迭代次数)********/

while(t<

2||fabs(1.0/dVal-1.0/dPreVal)/fabs(1.0/dVal)>

=1e-12)

sum+=u[k]*u[k];

/***********计算迭代向量Y**************/

y[k]=u[k]/sqrt(sum);

v[k]=y[k];

/**********根据Doolittle分解来求解方程组得到新的迭代向量*********/

for(k=2;

=501;

s=0;

m=Max(1,1,k-2);

for(x=m;

x<

=k-1;

x++)

s=s+C[k-x+2][x-1]*y[x-1];

y[k-1]=y[k-1]-s;

u[500]=y[500]/C[2][500];

for(k=500;

k>

0;

k--)

m=Min(k+2,501);

for(x=k+1;

=m;

s=s+C[k-x+2][x-1]*u[x-1];

u[k-1]=(y[k-1]-s)/C[2][k-1];

k<

k++)

dVal=dVal+v[k]*u[k];

t++;

return1.0/dVal;

SAVE*/

存储矩阵A带内元素,不存非零元素*/

voidSave(doublep)

inti,j;

doubleb=0.16,c=-0.064;

for(i=0;

i<

5;

i++)

for(j=0;

j<

j++)

if(i==0||i==4)

if((i==0&

j<

=1)||(i==4&

j>

=498))C[i][j]=0;

elseC[i][j]=c;

elseif(i==1||i==3)

if((i==1&

j==0)||(i==3&

j==500))C[i][j]=0;

elseC[i][j]=b;

elseif(i==2)

{

C[i][j]=a[j]-p;

Doolittle*/

Doolittle分解矩阵A带内元素*/

voidDoolittle()

ints,t,x,k,j,i;

doublesum;

for(k=1;

s=Min(k+2,501);

for(j=k;

=s;

j++)

t=Max(1,k-2,j-2);

sum=0.0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1