数值第一次大作业
北航数值分析大作业 第一题 幂法与反幂法

数 值 分 析(B ) 大 作 业(一)姓名: 学号: 电话:1、算法设计:①求1λ、501λ和s λ的值:s λ:s λ表示矩阵的按模最小特征值,为求得s λ直接对待求矩阵A 应用反幂法即可。
1λ、501λ:若矩阵A 的特征值满足关系 1n λλ<<且1n λλ≠,要求1λ、及501λ时,可按如下方法求解: a . 对矩阵A 用幂法,求得按模最大的特征值1m λ。
b . 按平移量1m λ对矩阵A 进行原点平移得矩阵1m BA I λ=+,对矩阵B 用反幂法求得B 的按模最小特征值2m λ。
c . 321m m m λλλ=-则:113min(,)m m λλλ=,13max(,)n m m λλλ=即为所求。
②求和A 的与数5011140k k λλμλ-=+最接近的特征值ik λ(k=0,1,…39):求矩阵A 的特征值中与P 最接近的特征值的大小,采用原点平移的方法:先求矩阵 B=A-PI 对应的按模最小特征值k β,则k β+P 即为矩阵A 与P 最接近的特征值。
在本次计算实习中则是先求平移矩阵k B A I μ=-,对该矩阵应用反幂法求得s λ,则与k μ最接近的A 的特征值为:s P λ+重复以上过程39次即可求得ik λ(k=0,1,…39)的值。
③求A 的(谱范数)条件数2cond()A 和行列式det A :在(1)中用反幂法求矩阵A 的按模最小特征值时,要用到Doolittle 分解方法,在Doolittle 分解完成后得到的两个矩阵分别为L 和U ,则A 的行列式可由U 阵求出,即:det(A)=det(U)。
求得det(A)不为0,因此A 为非奇异的实对称矩阵,则: max 2()scond A λλ=,max λ和s λ分别为模最大特征值与模最小特征值。
2、程序源代码:#include "Stdio.h"#include "Conio.h"#include "math.h"//****************************************************************************// // 在存储带状矩阵时,下面的几个量在程序中反复用到,为方便编程故把它们定义成宏.// // M :转换后的矩阵的行数,M=R+S+1。
北航数理统计第一次大作业

数理统计第一次课程论文广州恒大队在2015赛季亚冠的进球数的多元线性回归模型学号: SY1527205姓名:郭谢有摘要本赛季亚洲冠军联赛,来自中国的球队广州恒大淘宝队最终在决赛中力克阿联酋的迪拜阿赫利队,三年之内第二次夺得亚冠冠军。
为了研究恒大的夺冠过程,本文选取了恒大该赛季亚冠总共15场比赛中的进球数为因变量,对可能影响进球数的射门数、射正数等7个自变量进行统计,并进一步利用统计软件SPSS对以上数据进行了多元逐步线性回归。
最终确定了进球数与各因素之间关系的“最优”回归方程。
关键词:多元线性回归,逐步回归法,广州恒大,SPSS目录摘要 (1)1.引言 (3)2.符号说明 (3)3.数据的采集和整理 (3)3.1数据的采集 (3)3.2建模 (4)4.数据分析及计算 (4)4.结论 (9)参考文献 (10)致谢 (10)1.引言一场足球比赛的进球数说明了一支球队攻击力的强弱,也是决定比赛胜负的至关因素,综合反映出这支球队的实际水平。
而作为竞技体育,足球场上影响进球数的因素很多,为了研究本赛季恒大在亚冠夺冠过程中的14场比赛中进球数与其他一些因素的关系,本论文从搜达足球和新浪体育数据库中查找了进球数和其他7个主要影响因素的数据,包括射门次数、射正次数、传球次数、传中次数、角球次数、抢断次数。
并进一步采用多元逐步回归分析方法对以上因素进行了显著性分析,从而确定了关于恒大在本赛季亚冠中进球数的最优多元线型回归方程。
2.符号说明3.数据的采集和整理3.1数据的采集本文统计数据时,查阅了搜达足球数据库,确定恒大在亚冠14场比赛中的进球数为因变量,并初步选取这14场比赛中的射门次数、射正次数、传球次数、传中次数、角球次数、抢断次数7因素为自变量,具体数据见下表1。
3.2建模本文选取了恒大在亚冠比赛中的进球数作为因变量y,并选取可能对进球数造成影响的因素为自变量,其中对应关系在符号说明中已经列举。
这里构建模型如下:7⋅X i+εy=β0+∑βii=1其中,其中ε为随机误差项,β0为常数项,βi为待估计的参数。
数值分析大作业一

数值分析大作业一一、算法设计方案1、求λ1和λ501的值:思路:采用幂法求出按模最大特征值λmax,该值必为λ1或λ501,若λmax小于0,则λmax=λ1;否则λmax=λ501。
再经过原点平移,使用幂法迭代出矩阵A-λmax I的特征值,此时求出的按模最大特征值即为λ1和λ501的另一个值。
2、求λs的值:采用反幂法求出按模最小的特征值λmin即为λs,其中的方程组采用LU分解法进行求解。
3、求与μk最接近的特征值:对矩阵A采用带原点平移的反幂法求解最小特征值,其中平移量为:μk。
4、A的条件数cond(A)=| λmax/λmin|;5、A的行列式的值:先将A进行LU分解,再求U矩阵对角元素的乘积即为A 行列式的值。
二、源程序#include<iostream>#include<iomanip>#include<math.h>#define N 501#define E 1.0e-12 //定义精度常量#define r 2#define s 2using namespace std;double a[N];double cc[5][N];void init();double mifa();double fmifa();int max(int aa,int bb);int min(int aa,int bb);int max_3(int aa,int bb,int cc);void LU();void main(){double a1,a2,d1,d501=0,ds,det=1,miu[39],lamta,cond;int i,k;init();/*************求λ1和λ501********************/a1=mifa();if(a1<0)d1=a1; //若小于0则表示λ1的值elsed501=a1; //若大于0则表示λ501的值for(i=0;i<N;i++)a[i]=a[i]-a1;a2=mifa()+a1;if(a2<0)d1=a2; //若小于0则表示λ1的值elsed501=a2; //若大于0则表示λ501的值cout<<"λ1="<<setiosflags(ios::scientific)<<setprecision(12)<<d1<<"\t";cout<<"λ501="<<setiosflags(ios::scientific)<<setprecision(12)<<d501<<endl;/**************求λs*****************/init();ds=fmifa();cout<<"λs="<<setiosflags(ios::scientific)<<setprecision(12)<<ds<<endl;/**************求与μk最接近的特征值λik**************/cout<<"与μk最接近的特征值λik:"<<endl;for(k=0;k<39;k++){miu[k]=d1+(k+1)*(d501-d1)/40;init();for(i=0;i<N;i++)a[i]=a[i]-miu[k];lamta=fmifa()+miu[k];cout<<"λi"<<k+1<<"\t\t"<<setiosflags(ios::scientific)<<setprecision(12)<<lamta<<en dl;}/**************求A的条件数**************/cout<<"矩阵A的条件式";cond=abs(max(abs(d1),abs(d501))/ds);cout<<"cond="<<setiosflags(ios::scientific)<<setprecision(12)<<cond<<endl;/**************求A的行列式**************/cout<<"矩阵A的行列式";init();LU();for(i=0;i<N;i++){det*=cc[2][i];}cout<<"det="<<setiosflags(ios::scientific)<<setprecision(12)<<det<<endl;system("pause");}/**************初始化函数,给a[N]赋值*************/void init(){int i;for(i=1;i<=501;i++)a[i-1]=(1.64-0.024*i)*sin((double)(0.2*i))-0.64*exp((double)(0.1/i)); }/**************幂法求最大绝对特征值**************/double mifa(){int i,k=0;double u[N],y[N]={0},b=0.16,c=-0.064,Beta_=0,error;for(i=0;i<501;i++)u[i]=1; //令u[N]=1for(k=1;k<2000;k++) //控制最大迭代次数为2000{/***求y(k-1)***/double sum_u=0,gh_sum_u;for(i=0;i<N;i++){sum_u+=u[i]*u[i]; }gh_sum_u=sqrt(sum_u);for(i=0;i<N;i++){y[i]=u[i]/gh_sum_u;}/****求新的uk****/u[0]=a[0]*y[0]+b*y[1]+c*y[2];u[1]=b*y[0]+a[1]*y[1]+b*y[2]+c*y[3]; //前两列和最后两列单独拿出来求中D间的循环求for(i=2;i<N-2;i++){u[i]=c*y[i-2]+b*y[i-1]+a[i]*y[i]+b*y[i+1]+c*y[i+2];}u[N-2]=c*y[N-4]+b*y[N-3]+a[N-2]*y[N-2]+b*y[N-1];u[N-1]=c*y[N-3]+b*y[N-2]+a[N-1]*y[N-1];/***求beta***/double Beta=0;for(i=0;i<N;i++){Beta+=y[i]*u[i];}//cout<<"Beta"<<k<<"="<<Beta<<"\t"; 输出每次迭代的beta /***求误差***/error=abs(Beta-Beta_)/abs(Beta);if(error<=E) //若迭代误差在精度水平内则可以停止迭代{return Beta;} //控制显示位数Beta_=Beta; //第个eta的值都要保存下来,为了与后个值进行误差计算 }if(k==2000){cout<<"error"<<endl;return 0;} //若在最大迭代次数范围内都不能满足精度要求说明不收敛}/**************反幂法求最小绝对特¬征值**************/double fmifa(){int i,k,t;double u[N],y[N]={0},yy[N]={0},b=0.16,c=-0.064,Beta_=0,error;for(i=0;i<501;i++)u[i]=1; //令u[N]=1for(k=1;k<2000;k++){double sum_u=0,gh_sum_u;for(i=0;i<N;i++){sum_u+=u[i]*u[i]; }gh_sum_u=sqrt(sum_u);for(i=0;i<N;i++){y[i]=u[i]/gh_sum_u;yy[i]=y[i]; //用重新赋值,避免求解方程组的时候改变y的值}/****LU分解法解方程组Au=y,求新的***/LU();for(i=2;i<=N;i++){double temp_b=0;for(t=max(1,i-r);t<=i-1;t++)temp_b+=cc[i-t+s][t-1]*yy[t-1];yy[i-1]=yy[i-1]-temp_b;}u[N-1]=yy[N-1]/cc[s][N-1];for(i=N-1;i>=1;i--){double temp_u=0;for(t=i+1;t<=min(i+s,N);t++)temp_u+=cc[i-t+s][t-1]*u[t-1];u[i-1]=(yy[i-1]-temp_u)/cc[s][i-1];}double Beta=0;for(i=0;i<N;i++){Beta+=y[i]*u[i];}error=abs(Beta-Beta_)/abs(Beta);if(error<=E){return (1/Beta);}Beta_=Beta;}if(k==2000){cout<<"error"<<endl;return 0;} }/**************求两数最大值的子程序**************/int max(int aa,int bb){return(aa>bb?aa:bb);}/**************求两数最小值的子程序**************/int min(int aa,int bb){return(aa<bb?aa:bb);}/**************求三数最大值的子程序**************/int max_3(int aa,int bb,int cc){ int tt;if(aa>bb)tt=aa;else tt=bb;if(tt<cc) tt=cc;return(tt);}/**************LU分解**************/void LU(){int i,j,k,t;double b=0.16,c=-0.064;/**赋值压缩后矩阵cc[5][501]**/for(i=2;i<N;i++)cc[0][i]=c;for(i=1;i<N;i++)cc[1][i]=b;for(i=0;i<N;i++)cc[2][i]=a[i];for(i=0;i<N-1;i++)cc[3][i]=b;for(i=0;i<N-2;i++)cc[4][i]=c;for(k=1;k<=N;k++){for(j=k;j<=min(k+s,N);j++){double temp=0;for(t=max_3(1,k-r,j-s);t<=k-1;t++)temp+=cc[k-t+s][t-1]*cc[t-j+s][j-1];cc[k-j+s][j-1]=cc[k-j+s][j-1]-temp;}//if(k<500){for(i=k+1;i<=min(k+r,N);i++){double temp2=0;for(t=max_3(1,i-r,k-s);t<=k-1;t++)temp2+=cc[i-t+s][t-1]*cc[t-k+s][k-1];cc[i-k+s][k-1]=(cc[i-k+s][k-1]-temp2)/cc[s][k-1];}}}}三、程序结果。
数值分析大作业

数值分析上机作业(一)一、算法的设计方案1、幂法求解λ1、λ501幂法主要用于计算矩阵的按模最大的特征值和相应的特征向量,即对于|λ1|≥|λ2|≥.....≥|λn|可以采用幂法直接求出λ1,但在本题中λ1≤λ2≤……≤λ501,我们无法判断按模最大的特征值。
但是由矩阵A的特征值条件可知|λ1|和|λ501|之间必然有一个是最大的,通过对矩阵A使用幂法迭代一定次数后得到满足精度ε=10−12的特征值λ0,然后在对矩阵A做如下的平移:B=A-λ0I由线性代数(A-PI)x=(λ-p)x可得矩阵B的特征值为:λ1-λ0、λ2-λ0…….λ501-λ0。
对B矩阵采用幂法求出B矩阵按模最大的特征值为λ∗=λ501-λ0,所以λ501=λ∗+λ0,比较λ0与λ501的大小,若λ0>λ501则λ1=λ501,λ501=λ0;若λ0<λ501,则令t=λ501,λ1=λ0,λ501=t。
求矩阵M按模最大的特征值λ的具体算法如下:任取非零向量u0∈R nηk−1=u T(k−1)∗u k−1y k−1=u k−1ηk−1u k=Ay k−1βk=y Tk−1u k(k=1,2,3……)当|βk−βk−1||βk|≤ε=10−12时,迭终终止,并且令λ1=βk2、反幂法计算λs和λik由已知条件可知λs是矩阵A 按模最小的特征值,可以应用反幂法直接求解出λs。
使用带偏移量的反幂法求解λik,其中偏移量为μk=λ1+kλ501−λ140(k=1,2,3…39),构造矩阵C=A-μk I,矩阵C的特征值为λik−μk,对矩阵C使用反幂法求得按模最小特征值λ0,则有λik=1λ0+μk。
求解矩阵M按模最小特征值的具体算法如下:任取非零向量u 0∈R n ηk−1= u T (k−1)∗u k−1y k−1=u k−1ηk−1 Au k =y k−1βk =y T k−1u k (k=1,2,3……)在反幂法中每一次迭代都要求解线性方程组Au k =y k−1,当K 足够大时,取λn =1βk 。
(完整版)数值分析第一次作业

问题1:20.给定数据如下表:试求三次样条插值S(x),并满足条件 (1)S`(0.25)=1.0000,S`(0.53)=0.6868; (2)S ’’(0.25)=S ’’(0.53)=0。
分析:本问题是已知五个点,由这五个点求一三次样条插值函数。
边界条件有两种,(1)是已知一阶倒数,(2)是已知自然边界条件。
对于第一种边界(已知边界的一阶倒数值),可写出下面的矩阵方程。
⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡432104321034322110d M M M M M 200020000020022d d d d λμμλμλμλ其中μj =j1-j 1-j h h h +,λi=j1-j j h h h +,dj=6f[x j-1,x j ,x j+1], μn =1,λ0=1对于第一种边界条件d 0=0h 6(f[x 0,x 1]-f 0`),d n =1-n h 6(f`n-f `[x n-1,x n ]) 解:由matlab 计算得:由此得矩阵形式的线性方程组为:⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡ 2.1150-2.4286-3.2667-4.3143-5.5200-M M M M M 25714.00001204286.000004000.026000.0006429.023571.0001243210解得 M 0=-2.0286;M 1=-1.4627;M 2= -1.0333; M 3= -0.8058; M 4=-0.6546S(x)=⎪⎪⎩⎪⎪⎨⎧∈-+-+-∈-+-+-∈-+-+-∈-+-+-]53.0,45.0[x 5.40x 9.1087x 35.03956.8.450-x 1.3637-x .5301.67881- ]45.0,39.0[x 9.30x 11.188x 54.010.418793.0-x 2.2384-x .450(2.87040-]39.0,30.0[x 03.0x 6.9544x 9.30 6.107503.0-x 1.9136-x .3902.708779-]30.0,25.0[x 5.20x 10.9662x 0.3010.01695.20-x 4.8758-x .3006.76209-33333333),()()()(),()()()),()()()(),()()()(Matlab 程序代码如下:function tgsanci(n,s,t) %n代表元素数,s,t代表端点的一阶导。
第一次大作业习题2016

第一次大作业考核规则:(1)每题10分,共10题;(2)10人一组,组员是任课教师随机组合;(3)每组的考核方式:每名组员通过抽签独立完成一道题目(纸质书写相应题目代码),本组的分数是10名学生各自得分总和;(4)考核时间和地点,任课教师自行安排;注意:(1)题目求解的参考代码,请每组通过相互协作完成;(2)每名组员要求10道题目均要掌握(抽签随机,为了保证团体成绩,请组员主动学习,相互帮助、交流)。
1.编写一个程序,求出200到300之间同时满足以下条件的数:(1)三个数字之积为42;(2)三个数字之和为12。
要求每一行显示5个数,并且统计满足条件的数字个数。
2.编写程序求出满足下列条件的四位数:(1)该数是个完全平方数;(2)千位、十位数字之和为10且百位、个位数字之积为12。
要求每一行显示5个数,并且统计满足条件的数字个数。
3.若一个四位数等于其各位上数字的四方和,则称这个四位数为四叶玫瑰花数。
例如1634是一个四叶玫瑰花数,因为1634=14+64+34+44。
编写一个程序,输出所有的四叶玫瑰花数,要求每一行显示5个数,并且统计满足条件的数字个数。
4. 编写一个程序,统计并输出100~700之间素数。
要求每一行显示5个数,并且统计素数的个数。
5.输出显示1~100之间可以被n整除的所有整数,运行时n由键盘输入。
要求每一行显示5个数,并且统计一共有多少个整数能被n整除。
6. 使用循环语句输出以下图形7. 求100以内能被3整除且个位数字为9的所有正整数。
要求每一行显示5个数,并且统计一共有多少个正整数满足条件。
8.一个四位数具有以下特点:(1)前两位相同,后两位相同,但与前两位不同;(2)这个四位数正好是某位整数的平方;编程求解该四位数字是?9.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
10.编写程序,输出从公元1600到公元2016年所有的闰年年号,并且每输出5个年号换一行。
北航数值分析全部三次大作业

北航数值分析全部三次大作业第一次大作业是关于解线性方程组的数值方法。
我们被要求实现各种常用的线性方程组求解算法,例如高斯消元法、LU分解法和迭代法等。
我首先学习了这些算法的原理和实现方法,并借助Python编程语言编写了这些算法的代码。
在实验中,我们使用了不同规模和条件的线性方程组进行测试,并比较了不同算法的性能和精度。
通过这个作业,我深入了解了线性方程组求解的原理和方法,提高了我的编程和数值计算能力。
第二次大作业是关于数值积分的方法。
数值积分是数值分析中的重要内容,它可以用于计算曲线的长度、函数的面积以及求解微分方程等问题。
在这个作业中,我们需要实现不同的数值积分算法,例如矩形法、梯形法和辛普森法等。
我学习了这些算法的原理和实现方法,并使用Python编写了它们的代码。
在实验中,我们计算了不同函数的积分值,并对比了不同算法的精度和效率。
通过这个作业,我深入了解了数值积分的原理和方法,提高了我的编程和数学建模能力。
第三次大作业是关于常微分方程的数值解法。
常微分方程是数值分析中的核心内容之一,它可以用于描述众多物理、化学和生物现象。
在这个作业中,我们需要实现不同的常微分方程求解算法,例如欧拉法、龙格-库塔法和Adams法等。
我学习了这些算法的原理和实现方法,并使用Python编写了它们的代码。
在实验中,我们解决了一些具体的常微分方程问题,并比较了不同算法的精度和效率。
通过这个作业,我深入了解了常微分方程的原理和方法,提高了我的编程和问题求解能力。
总的来说,北航数值分析课程的三次大作业非常有挑战性,但也非常有意义。
通过这些作业,我在数值计算和编程方面得到了很大的提升,也更加深入地了解了数值分析的理论和方法。
虽然这些作业需要大量的时间和精力,但我相信这些努力将会对我未来的学习和工作产生积极的影响。
北航数值分析大作业一

北京航空航天大学数值分析大作业一学院名称自动化专业方向控制工程学号ZY*******学生姓名许阳教师孙玉泉日期2021 年11月26 日设有501501⨯的实对称矩阵A ,⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=5011A a b c b c c b c b a其中,064.0,16.0),501,,2,1(64.0)2.0sin()024.064.1(1.0-==⋅⋅⋅=--=c b i e i i a ii 。
矩阵A 的特征值为)501,,2,1(⋅⋅⋅=i i λ,并且有||min ||,501150121i i s λλλλλ≤≤=≤⋅⋅⋅≤≤1λ,501λ和s λ的值。
A 的与数4015011λλλμ-+=kk 最接近的特征值)39,,2,1(⋅⋅⋅=k k i λ。
A 的(谱范数)条件数2)A (cond 和行列式detA 。
一 方案设计1 求1λ,501λ和s λ的值。
s λ为按模最小特征值,||min ||5011i i s λλ≤≤=。
可使用反幂法求得。
1λ,501λ分别为最大特征值及最小特征值。
可使用幂法求出按模最大特征值,如结果为正,即为501λ,结果为负,那么为1λ。
使用位移的方式求得另一特征值即可。
2 求A 的与数4015011λλλμ-+=kk 最接近的特征值)39,...,2,1(=k k i λ。
题目可看成求以k μ为偏移量后,按模最小的特征值。
即以k μ为偏移量做位移,使用反幂法求出按模最小特征值后,加上k μ,即为所求。
3 求A 的(谱范数)条件数2)(A cond 和行列式detA 。
矩阵A 为非奇异对称矩阵,可知,||)(min max2λλ=A cond(1-1)其中m ax λ为按模最大特征值,min λ为按模最小特征值。
detA 可由LU 分解得到。
因LU 均为三角阵,那么其主对角线乘积即为A 的行列式。
二 算法实现1 幂法使用如下迭代格式:⎪⎪⎩⎪⎪⎨⎧⋅===⋅⋅⋅=------||max |)|sgn(max ||max /),,(111111)0()0(10k k k k k k k k Tn u u Ay u u u y u u u β任取非零向量 (2-1)终止迭代的控制理论使用εβββ≤--||/||1k k k , 实际使用εβββ≤--||/||||||1k k k(2-2)由于不保存A 矩阵中的零元素,只保存主对角元素a[501]及b,c 值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数值分析B》计算实习题第一题姓名:乔迈学号:SY1004319学院:能源与动力工程学院一、算法的设计方案:1、首先创建原矩阵,对矩阵A进行幂法运算,得出按模最大的特征值。
2、由于λ1‹λ2‹…‹λ501,所以在以所有特征值建立的数轴上,λ1、λ501位于数轴的两端,两者之一必为按模最大。
利用幂法,可以求出来按模最大的特征值,但该值可能为λ1也可能为λ501;判断该特征值的符号,若为正,则为λ501,否则,为λ1。
3、A平移,再用幂法,即可得另一个最大或最小的特征值。
4、对矩阵A进行反幂法运算,得出按模最小的特征值λs。
5、A平移相应量μk,进行反幂法运算,即可得相应的特征值λik,但是反幂法中要用到线性方程组的求解,而原矩阵A又是带状矩阵,采用LU分解。
6、A的谱范数条件数cond(A)为按模最大的特征值与按模最小的特征值之比按模最大的特征值与按模最小的特征值已分别在前面求出。
7、detA为LU分解后U的对角线元素的乘积。
二、源程序:#include<stdio.h>#include<math.h>#include<iostream.h>#define N 501/*定义全局变量*/double a[5][N];double u[N],y[N];/*定义函数*/void input_a() //输入矩阵A{int i;for(i=2;i<N;i++)a[0][i]=-0.064;for(i=1;i<N;i++)a[1][i]=0.16;for(i=1;i<=N;i++)a[2][i-1]=(1.64-0.024*i)*sin(0.2*i)-0.64*exp(0.1/i);for(i=0;i<N-1;i++)a[3][i]=0.16;for(i=0;i<N-2;i++)a[4][i]=-0.064;}void input_u() //输入初始向量u{for(int i=0;i<N;i++)u[i]=1;}int max(int a,int b) //求最大值{if(a>b) return a;else return b;}int min(int a,int b) //求最小值{if(a<b) return a;else return b;}void matrix_pingyi(double fun_a[5][N],double b) //矩阵的主对角线元素平移{for(int i=0;i<N;i++)a[2][i]=a[2][i]-b;}void doolittle(double fun_a[N][N],double fun_b[N]) //Doolittle分解{int k,i,j,t;int m,l;/*分解*/for(k=0;k<N;k++){m=min(k+2,N-1);for(j=k;j<=m;j++){double sum=0;l=max(max(0,k-2),j-2);for(t=l;t<=k-1;t++)sum+=fun_a[k-t+2][t]*fun_a[t-j+2][j];fun_a[k-j+2][j]=fun_a[k-j+2][j]-sum;}if(k<N-1){m=min(k+2,N-1);for(i=k+1;i<=m;i++){double sum=0;l=max(max(0,i-2),k-2);for(t=l;t<=k-1;t++)sum+=fun_a[i-t+2][t]*fun_a[t-k+2][k];fun_a[i-k+2][k]=(fun_a[i-k+2][k]-sum)/fun_a[2][k];}}}/*求解*/double copy_b[N];for(i=0;i<N;i++)copy_b[i]=fun_b[i];for(i=1;i<N;i++){double sum=0;m=max(0,i-2);for(t=m;t<=i-1;t++)sum+=fun_a[i-t+2][t]*copy_b[t];copy_b[i]=copy_b[i]-sum;}u[N-1]=copy_b[N-1]/fun_a[2][N-1];for(i=N-2;i>=0;i--){double sum=0;l=min(i+2,N-1);for(t=i+1;t<=l;t++)sum+=fun_a[i-t+2][t]*u[t];u[i]=(copy_b[i]-sum)/fun_a[2][i];}}double vector_chengji(double fun_a[N],double fun_b[N]) //计算向量乘积{double sum=0;for(int i=0;i<N;i++)sum=sum+fun_a[i]*fun_b[i];return sum;}void vector_bianxing(double fun_a[N],double b) //向量变形{for(int i=0;i<N;i++)y[i]=fun_a[i]/b;}void matix_vector(double fun_a[5][N],double fun_b[N]) //计算矩阵与向量的乘积{int i,j;double m;for(i=0;i<N;i++)u[i]=0;for(i=0;i<N;i++){m=max(0,i-2);for(j=min(i+2,N-1);j>=m;j--)u[i]+=a[i+2-j][j]*y[j];}/*for(i=0;i<2;i++){for(j=i+2;j>=0;j--)u[i]=u[i]+a[i+2-j][j]*y[j];}for(i=2;i<N-2;i++){for(j=i+2;j>=i-2;j--)u[i]+=a[i+2-j][j]*y[j];}for(i=N-2;i<N;i++){for(j=N-1;j>=i-2;j--)u[i]=u[i]+a[i+2-j][j]*y[j];}*/}double mifa(double a[5][N]) //幂法{double v0=0,v1;double v_middle;double xiangdui;input_u();for(int k=0;;k++){v_middle=vector_chengji(u,u);v_middle=sqrt(v_middle);vector_bianxing(u,v_middle);matix_vector(a,y);v1=vector_chengji(y,u);xiangdui=fabs(v1-v0)/fabs(v1);v0=v1;if(xiangdui<=1.0e-12)break;}return v1;}double fanmifa(double a[5][N],double b) //反幂法{double v0=0,v1;double v_middle;double xiangdui;input_u();for(int k=0;;k++){v_middle=vector_chengji(u,u);v_middle=sqrt(v_middle);vector_bianxing(u,v_middle);input_a();matrix_pingyi(a,b);doolittle(a,y);v1=vector_chengji(y,u);v1=1/v1;xiangdui=fabs(v1-v0)/fabs(v1);v0=v1;if(xiangdui<=1.0e-12)break;}return v1;}double det(double fun_a[5][N]) //求行列式的值{int k,i,j,t;int m,l;for(k=0;k<N;k++){m=min(k+2,N-1);for(j=k;j<=m;j++){double sum=0;l=max(max(0,k-2),j-2);for(t=l;t<=k-1;t++)sum+=fun_a[k-t+2][t]*fun_a[t-j+2][j];fun_a[k-j+2][j]=fun_a[k-j+2][j]-sum;}if(k<N-1){m=min(k+2,N-1);for(i=k+1;i<=m;i++){double sum=0;l=max(max(0,i-2),k-2);for(t=l;t<=k-1;t++)sum+=fun_a[i-t+2][t]*fun_a[t-k+2][k];fun_a[i-k+2][k]=(fun_a[i-k+2][k]-sum)/fun_a[2][k];}}}double sum=1;for(j=0;j<N;j++)sum=sum*a[2][j];return sum;}/*定义主函数*/int main(int argc, char* argv[]){printf("\n");printf("第1题答案是:\n");printf("\n");double t_max,t_min,t_s;input_a();t_max=mifa(a);matrix_pingyi(a,t_max);t_min=mifa(a);if(t_max>=0){t_min=t_min+t_max;}else{double t;t=t_max;t_max=t_min+t_max;t_min=t;}printf("矩阵的最小特征值λ1=%.11e\n",t_min);printf("矩阵的最大特征值λ501=%.11e\n",t_max);t_s=fanmifa(a,0);printf("矩阵的按模最小特征值λs=%.11e\n",t_s);printf("\n");printf("第2题答案是:\n");printf("\n");double miu[39];for(int k=1;k<=39;k++){double l;l=t_min+k*(t_max-t_min)/40;miu[k-1]=fanmifa(a,l)+l;printf("与%.11e 最接近的特征值λ%2d=%.11e\n",l,k,miu[k-1]);}printf("\n");printf("第3题答案是:\n");printf("\n");double cond;if(fabs(t_min)>fabs(t_max))cond=fabs(t_min);elsecond=fabs(t_max);cond=cond/fabs(t_s);printf("矩阵A的条件数cond(A)=%.11e\n",cond);input_a();printf("矩阵的行列式值detA=%.11e\n",det(a));printf("\n");return 0;}三、计算结果:四.讨论迭代初始向量的选取对于计算结果的影响:1.影响迭代速度。