数值作业1.docx

您所在的位置:网站首页 唐朝休闲活动有哪些地方 数值作业1.docx

数值作业1.docx

2024-07-09 21:39:59| 来源: 网络整理| 查看: 265

数值作业1.docx

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

数值作业1.docx

数值作业1

1.第一题 2

 

算法设计说明:

一.在计算最小特征值和最大特征值是的算法设计如下:

1.对A用幂法计算出矩阵的按模为最大的特征值:

λm;

2.对矩阵B=A-λmI用幂法计算出矩阵的按模为最大的特征值:

λn;

3.λp=λm+λn,则有:

λ1=min(λm,λp),λ501=max(λm,λp).

二.幂法迭代公式:

  当|βk-βk-1|/|βk|≤1e-12时,迭代中止,以当前的βk作为按模最大特征值的近似值.

三.反幂法迭代公式:

     

每迭代一次都要求解一次线性方程组Auk=y(k-1).k足够大时,当|βk-βk-1|/|βk|≤1e-12时,迭代中止,此时可取λn≈1/βk.

四.在对给定矩阵存储的时,由于A是上半带宽度为s=2,下半带宽度r=2的带状矩阵,A的零元素较多,为了节省存储量,A的带外元素不给存储,仅存A的带内元素,将A以及进行平移后矩阵存在一个二维数组C(5,501),数组C的第j列存放A的第j列带内元素,并使A的主对角线元素存放C的第s+1=3行中.在数组C中检索矩阵A的带内元素aij的方法是:

   A的带内元素aij=C的元素ci-j+s+1,j

五.在求解一次线性方程组Auk=y(k-1)时,需要对A进行Doolittle分解来求解新的迭代向量uk,算法可分解两步:

(1)作分解A=LU

对于k=1,2,…n(501)执行

    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

(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

#include

#include

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

u[n]=1;

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

{sum=0;

dPreVal=dVal;

dVal=0.0;

for(k=0;k

{

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

}

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

for(k=0;k

{

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

}

 

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

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

/*说明:

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

for(m=0;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&&m!

=499&&m!

=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

elsereturnb;

}

 

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

/*函数:

revpower*/

/*功能:

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

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

doublerevpower()

{

Intk,t,n,m,x;

doubledPreVal,dVal;

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

dPreVal=0.0;

dVal=0.0;

t=0;

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

for(n=0;n

u[n]=1;

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

while(t=1e-12)

{sum=0;

dPreVal=dVal;

dVal=0.0;

for(k=0;k

{

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

}

 

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

for(k=0;k

{

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

v[k]=y[k];

}

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

for(k=2;k

{

s=0;

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

for(x=m;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--)

{

s=0;

m=Min(k+2,501);

for(x=k+1;x

{

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

}

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

}

for(k=0;k

{

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

}

t++;

}

return1.0/dVal;

}

 

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

/*函数:

SAVE*/

/*功能:

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

/*说明:

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

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

voidSave(doublep)

{

inti,j;

doubleb=0.16,c=-0.064;

for(i=0;i

{

for(j=0;j

{

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

{

if((i==0&&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;k

{

s=Min(k+2,501);

for(j=k;j

{

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

sum=0.0;



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭