北航数值分析第二次大作业(最小二乘 simpson rk)
北航 数值分析第二次大作业(带双步位移的QR方法)
一、算法设计方案:按题目要求,本程序运用带双步位移的QR方法求解给定矩阵的特征值,并对每一实特征值,求解其相应的特征向量。
总体思路:1)初始化矩阵首先需要将需要求解的矩阵输入程序。
为了防止矩阵在后面的计算中被破坏保存A[][]。
2)对给定的矩阵进行拟上三角化为了尽量减少计算量,提高程序的运行效率,在对矩阵进行QR分解之前,先进行拟上三角化。
由于矩阵的QR 分解不改变矩阵的结构,所以具有拟上三角形状的矩阵的QR分解可以减少大量的计算量。
这里用函数void QuasiTriangularization()来实现,函数形参为double型N维方阵double a[][N]。
3)对拟上三角化后的矩阵进行QR分解对拟上三角化的矩阵进行QR分解会大大减小计算量。
用子程序void QR_decomposition()来实现,将Q、R设为形参,然后将计算出来的结果传入Q和R,然后求出RQ乘积。
4)对拟上三角化后的矩阵进行带双步位移的QR分解为了加速收敛,对QR分解引入双步位移,适当选取位移量,可以避免进行复数运算。
为了进一步减少计算量,在每次进行QR分解之前,先判断是否可以直接得到矩阵的一个特征值或者通过简单的运算得到矩阵的一对特征值。
若可以,则得到特征值,同时对矩阵进行降阶处理;若不可以,则进行QR分解。
这里用函数intTwoStepDisplacement_QR()来实现。
这是用来存储计算得到的特征值的二维数组。
考虑到特征值可能为复数,因此将所有特征值均当成复数处理。
此函数中,QR分解部分用子函数void QR_decompositionMk()实现。
这里形参有三个,分别用来传递引入双步位移后的Mk阵,A矩阵,以及当前目标矩阵的维数m。
5)计算特征向量得到特征值后,计算实特征值相应的特征向量。
这里判断所得特征值的虚数部分是否为零。
求实特征值的特征向量采用求解相应的方程组((A-λI)x=0)的方法。
因此先初始化矩阵Array,计算(A-λI),再求解方程组。
北航数值分析大作业二(纯原创,高分版)
(R_5 ,I_5 )=(-1.493147080915e+000, 0.000000000000e+000)
(R_6 ,I_6 )=(-9.891143464723e-001, 1.084758631502e-001)
-0.8945216982
-0.0993313649
-1.0998317589
0.9132565113
-0.6407977009
0.1946733679
-2.3478783624
2.3720579216
1.8279985523
-1.2630152661
0.6790694668
-0.4672150886
6.220134985374e-001
-1.119962139645e-001
-2.521344456568e+000
-1.306189420531e+000
-3.809101150714e+000
8.132800093357e+000
-1.230295627285e+000
-6.753086301215e-001
而其本质就是
1.令 以及最大迭代步数L;
2.若m≤0,则结束计算,已求出A的全部特征值,判断 或 或m≤2是否成立,成立则转3,否则转4;
3.若 ,则得一个特征值 ,m=m-1,降阶;若 ,则计算矩阵:
的特征值得矩阵A的两个特征值,m=m-2,降阶,转2.;
4.若k≤L,成立则令
k=k+1,转2,否则结束计算,为计算出矩阵A的全部特征值;
高中数学北师大版必修3最小二乘估计课后作业Word版含答案
§8最小二乘估计一、非标准1.已知回归直线的斜率的估计值是1.23,样本点的中心是(4,5),则线性回归方程是( )A.y=4+1.23xB.y=5+1.23xC.y=0.08+1.23xD.y=1.23+0.08x解析:由已知得b=1.23,=4,=5,于是a=-b=5-1.23×4=0.08,因此线性回归方程为y=1.23x+0.08.答案:C2.用回归直线方程的系数a,b的最小二乘法估计a,b,使函数Q(a,b)的值最小,则Q函数是指( )A.(y i-a-bx i)2B.(y i-a-bx i)C.y i-a-bx iD.(y i-a-bx i)2答案:A3.某地区调查了2~9岁的儿童的身高,由此建立的身高y(cm)与年龄x(岁)的回归模型为y=8.25x+60.13,下列叙述正确的是( )A.该地区一个10岁儿童的身高为142.63cmB.该地区2~9岁的儿童每年身高约增加8.25cmC.该地区9岁儿童的平均身高是134.38cmD.利用这个模型可以准确地预算该地区每个2~9岁儿童的身高解析:由y=8.25x+60.13知斜率的估计值为8.25,说明每增加一个单位年龄,约增加8.25个单位身高,故选B.答案:B4.某产品的广告费用x与销售额y的统计数据如下表:根据上表可得回归方程y=bx+a中的b为9.4,据此模型预报广告费用为6万元时的销售额为( )A.63.6万元B.65.5万元C.67.7万元D.72.0万元解析:∵=3.5,=42,又y=bx+a必过(),∴42=3.5×9.4+a,∴a=9.1.∴线性回归方程为y=9.4x+9.1.∴当x=6时,y=9.4×6+9.1=65.5(万元).答案:B5.已知x与y之间的几组数据如下表:假设根据上表数据所得线性回归方程为y=bx+a,若某同学根据上表中的前两组数据(1,0)和(2,2)求得的直线方程为y=b'x+a',则以下结论正确的是( )A.b>b',a>a'B.b>b',a<a'C.b<b',a>a'D.b<b',a<a'解析:b'==2,a'=0-2×1=-2.x i y i=0+4+3+12+15+24=58,=3.5,=1+4+9+16+25+36=91, ∴b=,a=×3.5=-,∴b<b',a>a'.故选C.答案:C6.下表是某厂1到4用水量y与月份x之间具有线性相关关系,其线性回归方程为y=-0.7x+a,则a的值为.解析:由已知得=2.5,=3.5,因此3.5=-0.7×2.5+a,解得a=5.25.答案:5.257.在一项关于16艘轮船的研究中,船的吨位区间从192t~3246t,船员的人数从5到32,由船员人数y关于吨位x的回归分析得到:y=9.5+0.0062x,假定两艘轮船的吨位相差1000 t,船员平均人数相差,对于最小的船估计的船员人数是,对于最大的船估计的船员人数是.解析:由线性回归方程知船的吨位每增加1000t,则人数增加0.0062×1000≥6(人),又分别令x=192和3246,即可估算船员人数.答案:6 10 298.2014年6月22日,某市物价部门对本市的5家商场的一天销售量及其价格进行调查,5家由数据对应的散点图可知,销售量y与价格x之间有较强的线性相关关系,其线性回归方程是=-3.2x+40,且m+n=20,则其中的n=.解析:(9+9.5+m+10.5+11)=8+(11+n+8+6+5)=6+,线性回归方程一定经过样本中心(),所以6+=-3.2×+40,即3.2m+n=42,由解得故n=10.答案:109.某连锁经营公司所属5个零售店某月的销售额和利润额如下表:万元(1)画出散点图,观察散点图,说明两个变量是否线性相关;(2)用最小二乘法计算利润额y对销售额x的线性回归方程;(3)当销售额为4千万元时,估计利润额的大小.解:(1)散点图如下图.由散点图可以看出变量x,y线性相关.(2)设线性回归方程是y=bx+a,=3.4,=6,所以b==0.5,a=-b=3.4-6×0.5=0.4,即利润额y对销售额x的线性回归方程为y=0.5x+0.4.(3)当销售额为4千万元时,利润额为y=0.5×4+0.4=2.4(百万元).10.(1)利用所给数据求年需求量与年份之间的线性回归方程y=bx+a;(2)利用(1)中所求出的直线方程预测该地2015年的粮食需求量.解:(1)由所给数据看出,年需求量与年份之间是近似直线上升的,下面来求线性回归方程,为此对数据预处理如下:对预处理后的数据,容易算得=0,=3.2.b===6.5,a=-b =3.2.由上述计算结果,知所求线性回归方程为y-257=b(x-2010)+a=6.5(x-2010)+3.2,即y=6.5(x-2010)+260.2.①(2)利用直线方程①,可预测2015年的粮食需求量为6.5×(2015-2010)+260.2=6.5×5+260.2=292.7(万吨).。
数值分析上机实验最小二乘法
---------------------------------------------------------------最新资料推荐------------------------------------------------------数值分析上机实验最小二乘法数值分析实验报告五最小二乘法一、数值分析实验报告五最小二乘法一、题目设有如下数据题目设有如下数据 xj -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 ( )jf x -1.76 0.42 1.2 1.34 1.43 2.25 4.38 -1.76 0.42 1.2 1.34 1.43 2.25 4.38 用三次多项式拟合这组数据,并绘出图形。
二、用三次多项式拟合这组数据,并绘出图形。
二、方法最小二t(f,[xx(1),xx(n)]) 四、结果 save and run 之后:请输入插值节点 as [x1,x2...] [-3 -2 -1 0 1 2 3] 请输入插值节点处对应的函数值 as [f1,f2...] [-1.76 0.42 1.2 1.34 1.43 2.25 4.38] 请输入要求的插值次数m =3 f = 133/100+121469856021/35184372088832*x-8042142191733/450359结果 save and run 之后:请输入插值节点 as [x1,x2...] [-3 -2 -1 0 1 2 3] 请输入插值节点处对应的函数值 as [f1,f2...] [-1.76 0.42 1.2 1.34 1.43 2.25 4.38] 请输入要求的插值次数m =3 f = 133/100+121469856021/35184372088832*x-8042142191733/4503599 627370496*x+1020815915537309/9007199254740992*x9627370496*x+1020815915537309/9007199254740992*x五、拓展:1 / 2最小二乘法计算方法比较简单,是实际中常用的一种方法,但是必须经计算机来实现,如果要保证精度则需要对大量数据进行拟合,计算量很大。
数值分析课件第七章最小二乘逼近共26页文档
51、山气日夕佳,飞鸟相与还。 52、木欣欣以向荣, Nhomakorabea涓涓而始流。
53、富贵非吾愿,帝乡不可期。 54、雄发指危冠,猛气冲长缨。 55、土地平旷,屋舍俨然,有良田美 池桑竹 之属, 阡陌交 通,鸡 犬相闻 。
21、要知道对好事的称颂过于夸大,也会招来人们的反感轻蔑和嫉妒。——培根 22、业精于勤,荒于嬉;行成于思,毁于随。——韩愈
23、一切节省,归根到底都归结为时间的节省。——马克思 24、意志命运往往背道而驰,决心到最后会全部推倒。——莎士比亚
25、学习是劳动,是充满思想的劳动。——乌申斯基
谢谢!
北航数值分析第二次大作业--QR分解
《数值分析A》计算实习题目二姓名学号联系方式班级指导教师2012年10月一、算法设计方案整个程序主要分为四个函数,主函数,拟上三角化函数,QR分解函数以及使用双步位移求解矩阵特征值、特征向量的函数。
因为在最后一个函数中也存在QR分解,所以我没有采用参考书上把矩阵M进行的QR分解与矩阵Ak的迭代合并的方法,而是在该函数中调用了QR分解函数,这样增强了代码的复用性,减少了程序长度;但由于时间关系,对阵中方法的运算速度没有进行深入研究。
1.为了减少QR分解法应用时的迭代次数,首先对给定矩阵进行拟上三角化处理。
2.对经过拟上三角化处理的矩阵进行QR分解。
3.注意到计算特征值与特征向量的过程首先要应用前面两个函数,于是在拟上三角化矩阵的基础上对QR分解函数进行了调用。
计算过程中,没有采用goto语句,而是根据流程图采用其他循环方式完成了设计,通过对迭代过程的合并,简化了程序的循环次数,最后在计算特征向量的时候采用了列主元高斯消去法。
二、源程序代码#include<stdio.h>#include<math.h>#include<string.h>int i,j,k,l,m; //定义外部变量double d,h,b,c,t,s;double A[10][10],AA[10][10],R[10][10],Q[10][10],RQ[10][10]; double X[10][10],Y[10][10],Qt[10][10],M[10][10];double U[10],P[10],T[10],W[10],Re[10]={0},Im[10]={0}; double epsilon=1e-12;void main(){void Quasiuppertriangular(double A[][10]);void QRdecomposition(double A[][10]);void DoublestepsQR(double A[][10]);int i,j;for(i=0;i<10;i++){for(j=0;j<10;j++){A[i][j]=sin(0.5*(i+1)+0.2*(j+1));Q[i][j]=0;AA[i][j]=A[i][j];}A[i][i]=1.5*cos(2.2*(i+1));AA[i][i]=A[i][i];}Quasiuppertriangular(A); //调用拟上三角化函数printf( "\n A经过拟上三角化矩阵为:\n\n");for(i=0;i<10;i++) //输出拟上三角化矩阵{for(j=0;j<10;j++){printf("%.12e ",A[i][j]); //输出拟上三角化矩阵}printf( "\n\n");}QRdecomposition(A); //调用QR分解函数printf( " 进行QR分解后,R矩阵为:\n\n"); //输出R矩阵for(i=0;i<10;i++){for(j=0;j<10;j++){printf("%.12e ",R[i][j]);}printf( "\n\n");}printf( " Q矩阵为:\n\n"); //输出Q矩阵for(i=0;i<10;i++){for(j=0;j<10;j++){printf("%.12e ",Q[i][j]);}printf( "\n\n");}printf( " RQ矩阵为:\n\n"); //输出RQ矩阵for(i=0;i<10;i++){for(j=0;j<10;j++){printf("%.12e ",RQ[i][j]);}printf( "\n\n");}DoublestepsQR(A); //调用双步位移函数printf( "\n\n 特征值实部依次为:\n\n"); //输出特征值实部for(j=0;j<10;j++){printf("%.12e ",Re[j]);}printf("\n\n 特征值虚部依次为:\n\n "); //输出特征值虚部for(j=0;j<10;j++){printf("%.12e ",Im[j]);}//按行输出特征向量printf( "\n\n 按行输出实特征根相应特征向量为:\n\n");for(i=0;i<10;i++){if(i==1||i==2||i==5||i==6){continue;}for(j=0;j<10;j++){printf("%.12e ",X[i][j]);}printf( "\n\n");}getchar();}//拟上三角化函数void Quasiuppertriangular(double A[][10]) {for(j=0;j<8;j++){for(i=0;i<10;i++){U[i]=0;P[i]=0;T[i]=0;W[i]=0;}m=0;for(i=j+2;i<10;i++){if(A[i][j]!=0){m=m+1;}}if(m==0){continue;}d=0;for(i=j+1;i<10;i++){d=d+pow(A[i][j],2);}d=sqrt(d);c=-d;if(A[j+1][j]<=0){c=d;}h=c*(c-A[j+1][j]);U[j+1]=A[j+1][j]-c;for(i=j+2;i<10;i++){U[i]=A[i][j];}for(i=0;i<10;i++){for(k=0;k<10;k++){P[i]=P[i]+U[k]*A[k][i];}P[i]=P[i]/h;}t=0;for(i=0;i<10;i++){for(k=0;k<10;k++){T[i]=T[i]+U[k]*A[i][k];}T[i]=T[i]/h;t=t+P[i]*U[i];}t=t/h;for(i=0;i<10;i++){W[i]=T[i]-t*U[i];for(k=0;k<10;k++){A[i][k]=A[i][k]-W[i]*U[k]-U[i]*P[k];if(abs(A[i][k])<1e-12){A[i][k]=0;}}}}}//QR分解函数void QRdecomposition(double A[][10]) {for(i=0;i<10;i++){for(j=0;j<10;j++){RQ[i][j]=0;Q[i][j]=0;R[i][j]=A[i][j];}Q[i][i]=1;}for(j=0;j<9;j++){for(i=0;i<10;i++){U[i]=0;P[i]=0;W[i]=0;}m=0;for(i=j+1;i<10;i++){if(R[i][j]!=0){m=m+1;}}if(m==0){continue;}d=0;for(i=j;i<10;i++){d=d+pow(R[i][j],2);}d=sqrt(d);c=-d;if(R[j][j]<=0){c=d;}h=c*(c-R[j][j]);U[j]=R[j][j]-c;for(i=j+1;i<10;i++){U[i]=R[i][j];}for(i=0;i<10;i++){for(k=0;k<10;k++){W[i]=W[i]+U[k]*Q[i][k];}}for(i=0;i<10;i++){for(k=0;k<10;k++){Q[i][k]=Q[i][k]-((W[i]*U[k])/h);}}for(i=0;i<10;i++){for(k=0;k<10;k++){P[i]=P[i]+U[k]*R[k][i];}P[i]=P[i]/h;}for(i=0;i<10;i++){for(k=0;k<10;k++){R[i][k]=R[i][k]-U[i]*P[k];if(abs(R[i][k])<epsilon){R[i][k]=0;}}}}for(i=0;i<10;i++) //计算A(n+1)=RQ {for(j=0;j<10;j++){for(k=0;k<10;k++){RQ[i][j]=RQ[i][j]+R[i][k]*Q[k][j];}}}}//双步位移法计算特征值特征向量函数void DoublestepsQR(double A[][10]){int L=1000,m=9; //定义最大循环次数for(i=0;i<L;i++){for(;m>-1;){if(abs(A[m][m-1])<=epsilon){Re[m]=A[m][m];m=m-1; //降阶if(m==0) //4{Re[0]=A[0][0];break;}if(m==-1){break;}if(m>1){continue;}}b=-A[m][m]-A[m-1][m-1]; //5c=A[m][m]*A[m-1][m-1]-A[m][m-1]*A[m-1][m];if(m==1) //6{if((b*b-4*c)>=0){Re[m]=(-b+sqrt(b*b-4*c))/2;Re[m-1]=(-b-sqrt(b*b-4*c))/2;}if((b*b-4*c)<0){Re[m]=-b/2; Im[m]=sqrt(4*c-b*b)/2;Re[m-1]=-b/2; Im[m-1]=-sqrt(4*c-b*b)/2;}m=m-1; //循环出口条件break;}if((m>1)&&(abs(A[m-1][m-2])>epsilon)) //8{if(i==L-1){printf("No results! \n");m=0; //循环出口条件break;}break;}if((m>1)&&(abs(A[m-1][m-2])<=epsilon)) //7 {if((b*b-4*c)>0){Re[m]=(-b+sqrt(b*b-4*c))/2;Re[m-1]=(-b-sqrt(b*b-4*c))/2;}if((b*b-4*c)<0){Re[m]=-b/2; Im[m]=sqrt(4*c-b*b)/2;Re[m-1]=-b/2; Im[m-1]=-sqrt(4*c-b*b)/2;}m=m-2; //降阶if(m>0){continue;}if(m==0){Re[0]=A[0][0];break;}}}if(m<=0){break;}s=A[m-1][m-1]+A[m][m]; //9t=A[m][m]*A[m-1][m-1]-A[m][m-1]*A[m-1][m];for(j=0;j<10;j++){for(k=0;k<10;k++){Qt[j][k]=0;Q[j][k]=0;M[j][k]=0;X[j][k]=0;Y[j][k]=0;}}for(j=0;j<m+1;j++){for(k=0;k<m+1;k++){for(l=0;l<m+1;l++){M[j][k]=M[j][k]+A[j][l]*A[l][k];}}}for(j=0;j<m+1;j++){for(k=0;k<m+1;k++){M[j][k]=M[j][k]-s*A[j][k];}M[j][j]=M[j][j]+t;}//调用QR分解函数对M矩阵进行分解并传递参数矩阵QQRdecomposition(M);for(j=0;j<10;j++){for(k=0;k<10;k++){Qt[j][k]=Q[k][j];}}for(j=0;j<m+1;j++){for(k=0;k<m+1;k++){for(l=0;l<m+1;l++){X[j][k]=X[j][k]+Qt[j][l]*A[l][k];}}}for(j=0;j<m+1;j++){for(k=0;k<m+1;k++){for(l=0;l<m+1;l++){Y[j][k]=Y[j][k]+X[j][l]*Q[l][k];}}}for(j=0;j<10;j++){{A[j][k]=Y[j][k];}}}//应用列主元高斯消元法计算实部特征向量for(l=0;l<10;l++){if(l==1||l==2||l==5||l==6){continue;}for(k=0;k<10;k++){for(m=0;m<10;m++){A[k][m]=AA[k][m];}A[k][k]=A[k][k]-Re[l];}for(j=0;j<9;j++){m=j;for(i=j+1;i<10;i++){if(abs(A[i][j])>abs(A[m][j])){m=i;}}{Y[j][k]=A[j][k];A[j][k]=A[m][k];A[m][k]=Y[j][k];}for(k=j+1;k<10;k++){b=A[k][j]/A[j][j];for(i=j;i<10;i++){A[k][i]=A[k][i]-A[j][i]*b;}}}X[l][9]=1;for(i=8;i>=0;i--){c=0;for(j=i+1;j<10;j++){c=c+A[i][j]*X[l][j];}X[l][i]=-c/A[i][i];}}}三、程序输出结果1819。
最小二乘平差 自由度
最小二乘平差最小二乘平差(Least Squares Adjustment)是测量数据处理中的一种常用方法,用于对测量观测数据进行最优估计。
通过该方法可以减小测量误差,提高测量精度,对于工程测量、测绘、地理信息系统等领域具有重要的应用价值。
原理介绍最小二乘平差的原理基于最小化观测量与观测值之间的残差平方和。
在测量过程中,常常会存在观测误差、系统误差等不确定因素,这些因素会导致观测值与真实值之间存在差异。
最小二乘平差通过对所有观测值进行加权,使得观测值与真实值之间的差异最小化。
设有n个观测值,每个观测值的观测量为O,真实值为T,观测误差为e。
则最小二乘平差的目标是找到最优的拟合/估计值x,使得:formula1通过对以上目标进行求解,可以得到最优的拟合/估计值x。
其中,观测值和真实值之间的关系可以通过各种数学模型进行描述,例如线性模型、非线性模型等。
应用场景最小二乘平差在测量数据处理中有广泛的应用。
以下是一些常见的应用场景:1.三角测量:在工程测量中,常用三角测量方法测量不同点之间的距离、角度等。
利用最小二乘平差,可以修正测量误差,提高测量精度。
2.高程测量:在测绘、地理信息系统中,通常需要测量地点的高程信息。
最小二乘平差可以对高程测量数据进行优化处理,提高高程测量的精度。
3.GPS定位:全球卫星定位系统(GPS)在导航、地图绘制等领域有着广泛的应用。
最小二乘平差可用于对GPS观测数据进行处理,提高定位的准确性。
4.建筑变形监测:在建筑工程中,对于建筑物的变形监测和建筑物的结构健康状况评估,最小二乘平差可用于对监测数据进行处理,及时发现异常情况。
实现方法最小二乘平差的实现方法有多种,常用的包括:1.高斯-马尔可夫模型:基于线性模型,通过最小二乘法对观测数据进行拟合估计。
该方法适用于满足高斯分布假设的情况。
2.递归最小二乘法:将观测数据分为多个子集,通过递归的方式对子集数据进行最小二乘拟合,然后合并得到最终的拟合结果。
北航数值分析全部三次大作业
北航数值分析全部三次大作业第一次大作业是关于解线性方程组的数值方法。
我们被要求实现各种常用的线性方程组求解算法,例如高斯消元法、LU分解法和迭代法等。
我首先学习了这些算法的原理和实现方法,并借助Python编程语言编写了这些算法的代码。
在实验中,我们使用了不同规模和条件的线性方程组进行测试,并比较了不同算法的性能和精度。
通过这个作业,我深入了解了线性方程组求解的原理和方法,提高了我的编程和数值计算能力。
第二次大作业是关于数值积分的方法。
数值积分是数值分析中的重要内容,它可以用于计算曲线的长度、函数的面积以及求解微分方程等问题。
在这个作业中,我们需要实现不同的数值积分算法,例如矩形法、梯形法和辛普森法等。
我学习了这些算法的原理和实现方法,并使用Python编写了它们的代码。
在实验中,我们计算了不同函数的积分值,并对比了不同算法的精度和效率。
通过这个作业,我深入了解了数值积分的原理和方法,提高了我的编程和数学建模能力。
第三次大作业是关于常微分方程的数值解法。
常微分方程是数值分析中的核心内容之一,它可以用于描述众多物理、化学和生物现象。
在这个作业中,我们需要实现不同的常微分方程求解算法,例如欧拉法、龙格-库塔法和Adams法等。
我学习了这些算法的原理和实现方法,并使用Python编写了它们的代码。
在实验中,我们解决了一些具体的常微分方程问题,并比较了不同算法的精度和效率。
通过这个作业,我深入了解了常微分方程的原理和方法,提高了我的编程和问题求解能力。
总的来说,北航数值分析课程的三次大作业非常有挑战性,但也非常有意义。
通过这些作业,我在数值计算和编程方面得到了很大的提升,也更加深入地了解了数值分析的理论和方法。
虽然这些作业需要大量的时间和精力,但我相信这些努力将会对我未来的学习和工作产生积极的影响。
北航数值分析大作业第二题
北航数值分析大作业第二题-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII数值分析第二次大作业史立峰SY1505327一、 方案(1)利用循环结构将sin(0.50.2)()1.5cos( 1.2)(){i j i j ij i j i j a +≠+==(i,j=1,2,……,10)进行赋值,得到需要变换的矩阵A ;(2)然后,对矩阵A 利用Householder 矩阵进行相似变换,把A 化为上三角矩阵A (n-1)。
对A 拟上三角化,得到拟上三角矩阵A (n-1),具体算法如下: 记A(1)=A ,并记A(r)的第r 列至第n 列的元素为()n r r j n i a r ij,,1,;,,2,1)( +==。
对于2,,2,1-=n r 执行 1. 若()n r r i a r ir,,3,2)( ++=全为零,则令A(r+1) =A(r),转5;否则转2。
2. 计算()∑+==nr i r irr a d 12)(()()r r r r r r r r r r d c a d a c ==-=++则取,0sgn )(,1)(,1若 )(,12r rr r r r a c c h +-=3. 令()nTr nrr r r r r r r r R a a c a u ∈-=++)()(,2)(,1,,,,0,,0 。
4. 计算r r T r r h u A p /)(= r r r r h u A q /)(=r r Tr r h u p t /=r r r r u t q -=ωT rr T r r r r p u u A A --=+ω)()1(5. 继续。
(3)使用带双步位移的QR 方法计算矩阵A (n-1)的全部特征值,也是A 的全部特征值,具体算法如下:1. 给定精度水平0>ε和迭代最大次数L 。
2. 记n n ij n a A A ⨯-==][)1()1()1(,令n m k ==,1。
北航数值分析大作业 第二题 QR分解
《数值分析B》课计算实习第一题设计文档与源程序姓名:杨彦杰学号:SY10171341 算法的设计方案(1)运行平台操作系统:Windows XP;开发平台:VC6.0++;工程类型:文档视图类;工程名:Numanalysis;(2)开发描述首先新建类CMetrix,该类完成矩阵之间的相关运算,包括相乘、加减等,以主程序方便调用;题目的解算过程在视图类CNumanalysisView中实现,解算结果在视图界面中显示;(3)运行流程(4)运行界面2、全部源代码(1)类CMetrixMetrix.h文件:class CMetrix{public:double** MetrixMultiplyConst(double**A,int nRow,int nCol,double nConst);//矩阵乘常数double** MetrixMultiplyMetrix(double**A,double**mA,int nRow,int nCol);//矩阵相乘double** MetrixSubtractMetrix(double **A, double **subA, int nRow,int nCol);//矩阵减矩阵double VectorMultiplyVector(double*V,double*mulV,int nV);//向量点积double** VectorMultiplyVectortoMetrix(double*V,double*VT,int nV);//向量相乘为矩阵double* VectorSubtractVector(double*V,double*subV,int nV);//向量相减double* VectorMultiplyConst(double *V, int nV, double nConst);//向量乘常数double LengthofVector(double *V,int nV);//求向量的长度double* MetrixMultiplyVector(double**A,int nRow,int nCol,double*V,int nV);//矩阵与向量相乘double** AtoAT(double **A,int Row,int Col);//矩阵转置运算void FreeMem();CMetrix(int nRow,int nCol);uCMetrix();virtual ~CMetrix();double* vector; //过渡向量double** B; //过渡矩阵};Metrix.cpp文件:CMetrix::CMetrix(int nRow, int nCol){B = new double*[nRow];for (int i = 0;i < nCol;i++){B[i] = new double[nCol];}vector = new double[nRow];}CMetrix::~CMetrix(){delete vector;B = NULL;delete B;}double** CMetrix::AtoAT(double **A, int nRow, int nCol){for (int row = 0;row < nRow;row++){for (int col = 0;col < nCol;col++){B[col][row] = A[row][col];}}return B;}double* CMetrix::MetrixMultiplyVector(double **A, int nRow, int nCol, double *V, int nV) {if (nCol != nV){AfxMessageBox("矩阵列数和向量维数不等,不能相乘!");return 0;}double sum = 0.0;for (int row = 0;row < nRow;row++){for (int col = 0;col < nCol;col++){sum += A[row][col]*V[col];}vector[row] = sum;sum = 0.0;}return vector;}double CMetrix::LengthofVector(double *V, int nV){double length = 0.0;for (int col = 0;col < nV;col++){length += V[col]*V[col];}return length;}double* CMetrix::VectorMultiplyConst(double *V, int nV, double nConst){for (int col = 0;col < nV;col++){vector[col] = V[col]*nConst;}return vector;}double* CMetrix::VectorSubtractVector(double *V, double *subV, int nV){for (int col = 0;col < nV;col++){vector[col] = V[col]-subV[col];}return vector;}double** CMetrix::VectorMultiplyVectortoMetrix(double*V, double *VT, int nV){for (int row = 0;row < nV;row++){for (int col = 0;col < nV;col++){B[row][col] = V[row]*VT[col];}}return B;}double CMetrix::VectorMultiplyVector(double *V, double *mulV, int nV){double length = 0.0;for (int col = 0;col < nV;col++){length += V[col]*mulV[col];}return length;}double** CMetrix::MetrixSubtractMetrix(double **A, double **subA, int nRow, int nCol) {for (int row = 0;row < nRow;row++){for (int col = 0;col < nCol;col++){B[row][col] = A[row][col]-subA[row][col];}}return B;}double** CMetrix::MetrixMultiplyMetrix(double **A, double **mA, int nRow, int nCol) {double sum = 0.0;for (int row = 0;row < nRow;row++){for (int col = 0;col < nCol;col++){for(int n = 0;n < nCol;n++){sum += A[row][n]*mA[n][col];}B[row][col] = sum;sum = 0.0;}}return B;}double** CMetrix::MetrixMultiplyConst(double **A, int nRow, int nCol, double nConst) {for (int row = 0;row < nRow;row++){for (int col = 0;col < nCol;col++){B[row][col] = A[row][col]*nConst;}}return B;}(2)类CNumanalysisViewNumanalysisview.hclass CNumanalysisView : public CEditView{…………public:double Sign(double x);void DisplayVector(double*V,int nV); // 显示向量数据void DisplayMetrix(double **A,int Row,int Col); //显示矩阵void DisplayText(CString str); //显示文本protected://{{AFX_MSG(CNumanalysisView)afx_msg void OnQRanalyze(); //运行主函数…………};Numanalysisview.cppvoid CNumanalysisView::OnQRanalyze(){//开辟空间int nRow = 10;int nCol = 10;CString str;CMetrix Metrix(nRow,nCol);double tempa = 0.0;double *V = new double[nCol]; //分配10*10矩阵空间double *ur = new double[nCol];double *pr = new double[nCol];double *qr = new double[nCol];double *wr = new double[nCol];double *tempV = new double[nCol];double **Ar = new double*[nRow];double **C = new double*[nRow];double **Cr = new double*[nRow];double **tempA = new double*[nRow];double **A = new double*[nRow];double **R = new double*[nRow];for (int col = 0;col < nRow;col++){A[col] = new double[nCol];Ar[col] = new double[nCol];C[col] = new double[nCol];Cr[col] = new double[nCol];tempA[col] = new double[nCol];R[col] = new double[nCol];}//矩阵A求解for (int i = 0;i < nRow;i++){for (int j = 0;j < nCol;j++){if(i == j)A[i][j] = 1.5*cos((i+1.0)+1.2*(j+1.0));elseA[i][j] = sin(0.5*(i+1.0)+0.2*(j+1.0));}}//--------------------拟上三角化-------------------------// double dr = 0.0,cr = 0.0,hr = 0.0,tr = 0.0;for (int r = 0;r < nCol - 2;r++){dr = 0.0;for (i = r+1;i < nCol;i++) //dr{dr += A[i][r]*A[i][r];}dr = sqrt(dr);for (i = r+2;i < nCol;i++) //判断air是否全为零tempa += fabs(A[i][r]);if (tempa <= IPSLEN)continue;if (A[r+1][r] == 0.0) //crcr = dr;elsecr = -1*Sign(A[r+1][r])*dr;hr = cr*cr - cr*A[r+1][r]; //hrstr.Format("dr = %.6e, cr = %.6e, hr = %.6e",dr,cr,hr);for (int row = 0;row < nRow;row++) //ur{if (row < r+1)ur[row] = 0.0;else if (row == r+1)ur[row] = A[row][r]-cr;elseur[row] = A[row][r];}tempA = Metrix.AtoAT(A,nRow,nCol);for (row = 0;row < nRow;row++){for (col = 0;col < nCol;col++)Ar[row][col] = tempA[row][col];}tempV = Metrix.MetrixMultiplyVector(Ar,nRow,nCol,ur,nCol); //pr memcpy(pr,tempV,nCol*8);tempV = Metrix.VectorMultiplyConst(pr,nCol,1.0/hr);memcpy(pr,tempV,nCol*8);tempV = Metrix.MetrixMultiplyVector(A,nRow,nCol,ur,nCol); //qr memcpy(qr,tempV,nCol*8);tempV = Metrix.VectorMultiplyConst(qr,nCol,1.0/hr);memcpy(qr,tempV,nCol*8);tr = Metrix.VectorMultiplyVector(pr,ur,nCol)/hr; //trtempV = Metrix.VectorMultiplyConst(ur,nCol,tr); //wr memcpy(wr,tempV,nCol*8);tempV = Metrix.VectorSubtractVector(qr,wr,nCol);memcpy(wr,tempV,nCol*8);tempA = Metrix.VectorMultiplyVectortoMetrix(wr,ur,nCol); //Arfor (row = 0;row < nRow;row++){for (col = 0;col < nCol;col++)Ar[row][col] = tempA[row][col];}tempA = Metrix.MetrixSubtractMetrix(A,Ar,nRow,nCol);for (row = 0;row < nRow;row++){for (col = 0;col < nCol;col++)A[row][col] = tempA[row][col];}tempA = Metrix.VectorMultiplyVectortoMetrix(ur,pr,nCol);for (row = 0;row < nRow;row++){for (col = 0;col < nCol;col++)Ar[row][col] = tempA[row][col];}tempA = Metrix.MetrixSubtractMetrix(A,Ar,nRow,nCol);for (row = 0;row < nRow;row++){for (col = 0;col < nCol;col++){A[row][col] = tempA[row][col];if (fabs(A[row][col]) < IPSLEN){A[row][col] = 0.0;}}}}DisplayText("矩阵A拟上三角化后所得的矩阵为:");DisplayMetrix(A,nRow,nCol);for (int row = 0;row < nRow;row++) //用于计算特征向量{for (col = 0;col < nCol;col++)R[row][col] = A[row][col];}// -------------------------------------------------////--------------------带双步位移的QR分解-------------------------// int m = nCol;struct EigenVal //定义特征值结构,实数和虚数{double Realnum;double Imagnum;};EigenVal *eigenvalue = new EigenVal[m];EigenVal tmpEigen1,tmpEigen2;double b = 0.0,c = 0.0,delta = 0.0,s = 0.0,t = 0.0;double *vr = new double[m];for (int k = 1;k < 100; k++){//m代表矩阵阶数,判断式中直接用,运算中需要-1while (m > 1 && fabs(A[m-1][m-2]) <= IPSLEN)//第三步和第四步{eigenvalue[m-1].Realnum = A[m-1][m-1];eigenvalue[m-1].Imagnum = 0.0;m = m - 1;}if (m == 1){eigenvalue[m-1].Realnum = A[m-1][m-1];eigenvalue[m-1].Imagnum = 0.0;DisplayText("已求出A的全部特征值:");break;}b = -(A[m-2][m-2]+A[m-1][m-1]); //第五步求一元二次方程式的根s1,s2c = A[m-2][m-2]*A[m-1][m-1]-A[m-2][m-1]*A[m-1][m-2];delta =b*b - 4*c;if (delta >= 0.0){tmpEigen1.Realnum = (-b-sqrt(delta))/2;tmpEigen1.Imagnum = 0.0;tmpEigen2.Realnum = (-b+sqrt(delta))/2;tmpEigen2.Imagnum = 0.0;}else{tmpEigen1.Realnum = -b/2;tmpEigen1.Imagnum = -sqrt(fabs(delta))/2 ;tmpEigen2.Realnum = -b/2;tmpEigen2.Imagnum = sqrt(fabs(delta))/2;}if (m == 2) //第六步 m=2时结束运算{eigenvalue[m-1] = tmpEigen1;eigenvalue[m-2] = tmpEigen2;DisplayText("已求出A的全部特征值:");break;}else //第七步 m > 1{if (fabs(A[m-2][m-3]) <= IPSLEN){eigenvalue[m-1] = tmpEigen1;eigenvalue[m-2] = tmpEigen2;m = m - 2;continue;}}for (int row = 0;row < m;row++) //Mk求之前需要把A付给C{for (int col = 0;col < m;col++)C[row][col] = A[row][col];}double **I = new double*[m]; //第九步求Mk和Mk的QR分解for (int i = 0;i < m;i++) //求单位矩阵I,分配m*m矩阵空间{I[i] = new double[m];}for (i = 0;i < m;i++){for (int j = 0;j < m;j++){if(i == j)I[i][j] = 1;else I[i][j] = 0;}}s = A[m-2][m-2]+A[m-1][m-1];t = A[m-2][m-2]*A[m-1][m-1] - A[m-2][m-1]*A[m-2][m-1];tempA = Metrix.MetrixMultiplyMetrix(A,A,m,m);//A*Afor (row = 0;row < m;row++){for (col = 0;col < m;col++)Ar[row][col] = tempA[row][col];}tempA = Metrix.MetrixMultiplyConst(A,m,m,s);//s*Afor (row = 0;row < m;row++){for (col = 0;col < m;col++)A[row][col] = tempA[row][col];}tempA = Metrix.MetrixSubtractMetrix(Ar,A,m,m);//A*A-s*Afor (row = 0;row < m;row++){for (col = 0;col < m;col++)A[row][col] = tempA[row][col]; }tempA = Metrix.MetrixMultiplyConst(I,m,m,-1*t);//-t*Ifor (row = 0;row < m;row++){for (col = 0;col < m;col++)Ar[row][col] = tempA[row][col]; }tempA = Metrix.MetrixSubtractMetrix(A,Ar,m,m);//A*A - s*A + r*I for (row = 0;row < m;row++){for (col = 0;col < m;col++){A[row][col] = tempA[row][col];if (fabs(A[row][col]) < IPSLEN){A[row][col] = 0.0;}}}delete I;//Mk的QR分解for (int r = 0;r < m - 1;r++){dr = 0.0;for (i = r;i < m;i++) //dr{dr += A[i][r]*A[i][r];}dr = sqrt(dr);for (i = r+1;i < m;i++) //判断air是否全为零tempa += fabs(A[i][r]);if (tempa <= IPSLEN)continue;if (A[r][r] == 0.0) //crcr = dr;elsecr = -1*Sign(A[r][r])*dr;hr = cr*cr - cr*A[r][r]; //hrfor (int row = 0;row < m;row++) //ur{if (row < r)ur[row] = 0.0;else if (row == r)ur[row] = A[row][r]-cr;elseur[row] = A[row][r];}tempA = Metrix.AtoAT(A,m,m); //Btfor (row = 0;row < m;row++){for (col = 0;col < m;col++)Ar[row][col] = tempA[row][col];}tempV = Metrix.MetrixMultiplyVector(Ar,m,m,ur,m); //Bt*ur memcpy(vr,tempV,m*8);tempV = Metrix.VectorMultiplyConst(vr,m,1.0/hr); //vr = Bt*ur/hr memcpy(vr,tempV,m*8);tempA = Metrix.VectorMultiplyVectortoMetrix(ur,vr,m);//Ur*vrfor (row = 0;row < m;row++){for (col = 0;col < m;col++)Ar[row][col] = tempA[row][col];}tempA = Metrix.MetrixSubtractMetrix(A,Ar,m,m); //Br-ur*vrfor (row = 0;row < m;row++){for (col = 0;col < m;col++){A[row][col] = tempA[row][col];if (fabs(A[row][col]) < IPSLEN){A[row][col] = 0.0;}}}tempA = Metrix.AtoAT(C,m,m); //Ctfor (row = 0;row < m;row++){for (col = 0;col < m;col++)Cr[row][col] = tempA[row][col]; }tempV = Metrix.MetrixMultiplyVector(Cr,m,m,ur,m); //pr memcpy(pr,tempV,m*8);tempV = Metrix.VectorMultiplyConst(pr,m,1.0/hr);memcpy(pr,tempV,m*8);tempV = Metrix.MetrixMultiplyVector(C,m,m,ur,m); //qr memcpy(qr,tempV,m*8);tempV = Metrix.VectorMultiplyConst(qr,m,1.0/hr);memcpy(qr,tempV,m*8);tr = Metrix.VectorMultiplyVector(pr,ur,m)/hr; //trtempV = Metrix.VectorMultiplyConst(ur,m,tr); //wr memcpy(wr,tempV,m*8);tempV = Metrix.VectorSubtractVector(qr,wr,m);memcpy(wr,tempV,m*8);tempA = Metrix.VectorMultiplyVectortoMetrix(wr,ur,m);//Cr+1for (row = 0;row < m;row++){for (col = 0;col < m;col++)Cr[row][col] = tempA[row][col]; }tempA = Metrix.MetrixSubtractMetrix(C,Cr,m,m);for (row = 0;row < m;row++){for (col = 0;col < m;col++)C[row][col] = tempA[row][col]; }tempA = Metrix.VectorMultiplyVectortoMetrix(ur,pr,m);for (row = 0;row < m;row++){for (col = 0;col < m;col++)Cr[row][col] = tempA[row][col]; }tempA = Metrix.MetrixSubtractMetrix(C,Cr,m,m);for (row = 0;row < m;row++){for (col = 0;col < m;col++){C[row][col] = tempA[row][col];if (fabs(C[row][col]) < IPSLEN){C[row][col] = 0.0;}}}}str.Format("矩阵A%d QR分解结束后所得到的矩阵为:",m);//计算结果输出DisplayText(str);DisplayMetrix(A,m,m);for (row = 0;row < m;row++) //Mk的QR分解后需要把C付给A{for (col = 0;col < m;col++)A[row][col] = C[row][col];}str.Format("迭代完成后的矩阵A%d = ",k);DisplayText(str);DisplayMetrix(A,m,m);}DisplayText("矩阵A的全体特征值如下: ");for (i = 0;i<nCol;i++){str.Format("%.6e + j%.6e",eigenvalue[i].Realnum,eigenvalue[i].Imagnum);DisplayText(str);}// -------------------------------------------------//求实特征值的特征向量,在拟上三角矩阵基础上直接求解即可////(A-egiI)X = 0.0;m = nRow;for (row = 0;row < nRow;row++) //用于计算特征向量{for (col = 0;col < nCol;col++)A[row][col] = R[row][col];}double **I = new double*[m]; //求单位矩阵I,分配m*m矩阵空间double sum = 0.0;for (i = 0;i < m;i++){I[i] = new double[m];}for (i = 0;i < m;i++){for (int j = 0;j < m;j++){if(i == j)I[i][j] = 1;else I[i][j] = 0;}}for (i = 0;i < nRow;i++){if (eigenvalue[i].Imagnum != 0.0){str.Format("特征值%.6e+j%.6e为虚数,不需要求特征向量。
北航数值分析大作业第二题(fortran)
!计算A(r+1) DO I=1,N DO J=1,N A(I,J)=A(I,J)-W(I)*U(J)-U(I)*P(J) ENDDO ENDDO ENDIF ENDDO RETURN END
!***************符号函数子程序*****************! FUNCTION SGN(X) REAL(8) X IF(X>0) THEN SGN=1 ELSE IF(X<0) THEN SGN=-1 ELSE IF(X==0) THEN SGN=0 ENDIF END
DIMENSION A(N,N),A1(N,N),A2(N,N),C(2,N),Q(N,N),R(N,N),CR(N),CM(N)!C为存储特征值的数 组,1为实部,为虚部 REAL(8) A,A1,A2,C,Q,R,CM E=1E-12 L=1000 !精度水平 !迭代最大次数
OPEN(1,FILE='数值分析大作业第二题计算结果.TXT') DO I=1,N DO J=1,N IF(I==J) THEN A(I,J)=1.52*COS(I+1.2*J) ELSE A(I,J)=SIN(0.5*I+0.2*J) ENDIF ENDDO ENDDO A1=A WRITE(*,"('矩阵A为:')") WRITE(1,"('矩阵A为:')") DO I=1,N DO J=1,N WRITE(*,"(2X,E20.13,2X,\)") A(I,J) WRITE(1,"(2X,E20.13,2X,\)") A(I,J) ENDDO WRITE(*,"(' ')") WRITE(1,"(' ')") ENDDO !使用矩阵的拟上三角化的算法将矩阵A化为拟上三角矩阵A(n-1) CALL HESSENBERG(A,N) WRITE(*,"('拟上三角化后矩阵A(n-1)为:')") WRITE(1,"('拟上三角化后矩阵A(n-1)为:')") DO I=1,N DO J=1,N WRITE(*,"(2X,E20.13,2X,\)") A(I,J) WRITE(1,"(2X,E20.13,2X,\)") A(I,J) ENDDO WRITE(*,"('')") WRITE(1,"('')") ENDDO !计算对矩阵A(n-1)实行QR方法迭代结束后所得矩阵 A2=A CALL QRD(A2,N,Q,R)
北航研究生数理统计第二次大作业-聚类分析
Z 场均 角球数 0.11373 2.18400 -0.22977 0.02089 0.21585 0.09516 0.32725 -0.90749 -1.22314 0.51293 -0.44330 1.62698 -1.68732 0.32725 -0.83322 1.09780 1.37632 -1.83586 0.79144 1.09780 0.16943 0.94926 -1.68732 -0.13694 -0.75895 -0.50829 -0.13694 -0.44330 -1.37168
北京航空航天大学 数理统计第二次大作业
欧洲足球俱乐部竞技水平的聚类分析和判别分析
2015 年 12 月
欧洲足球俱乐部竞技水平的聚类分析和判别分析
摘要:近年来,人们对足球的关注越来越多。欧洲作为足球的发源地,其五大联 赛自然吸引着大批人的目光。尤其是欧洲冠军杯联赛更是代表着欧洲足球的最高 水平,吸引着各国最好的球队参加。本文从参加 2014-2015 赛季欧洲冠军杯联赛 的球队中选取 29 支球队,根据这些球队的一些技术统计资料,用 SPSS 软件对 其进行聚类分析,将这些球队按水平层次分为了 5 类。并选取 3 支球队,利用聚 类分析的结果对这 3 支球队进行判别分析。结果表明,聚类分类结果与判别分析 结果基本符合实际情况。
由于不同的变量之间存在着较大的数量级的差别,因此要对数据变量进行标
准化处理。本文采用 Z 得分值法标准化的方法进行标准化,用 x 的值减去 x 的
均值再除以样本的方差。也就是把个案转换为样本均值为 0、标准差为 1 的样本。
如果不同变量的变量值数值相差太大,会导致计算个案间距离时,由于绝对值较
小的数值权数较小,个案距离的大小几乎由大数值决定,标准化过程可以解决此
北航数值分析计算实习题目二 矩阵QR分解
数值分析实习二院(系)名称航空科学与工程学院专业名称动力工程及工程热物理学号SY0905303学生姓名解立垚1. 题目试用带双步位移QR 的分解法求矩阵A=[a ij ]10*10的全部特征值,并对其中的每一个实特征值求相应的特征向量。
已知()sin 0.50.2,1.5cos 1.2,ij i j i j a i j i j ⎧⎫+≠⎪⎪=⎨⎬+=⎪⎪⎩⎭(),1,2,...,10i j =。
说明:1、求矩阵特征值时,要求迭代的精度水平为1210ε-=。
2、打印以下内容:算法的设计方案;全部源程序(要求注明主程序和每个子程序的功能); 矩阵A 经过拟上三角话之后所得的矩阵()1n A -;对矩阵()1n A-进行QR 分解方法结束后所得的矩阵;矩阵A 的全部特征值()(),1,2,......10i i iR I i λ=,和A 的相应于实特征值的特征向量;其中()(),.i e i m i R R I I λλ==如果i λ是实数,则令0.i I =3、采用e 型输出数据,并且至少显示12位有效数字。
2. 算法设计方案本题采用带双步位移的QR 分解方法。
为了使程序简洁,自定义类Xmatrix ,其中封装了所需要的函数方法。
在Xmatrix 类中封装了运算符重载的函数,即定义了矩阵的加、减、乘、除、数乘运算及转置运算(T())。
同时为了避免传递数组带来的额外内存开销,使用引用(&)代替值传递,以节省内存空间,避免溢出.(1)此程序的主要部分为Xmatrix 中的doubleQR()方法,具体如下:Step1:使用矩阵拟上三角化的算法将A 化为拟上三角阵A (n-1)(此处调用Xmatrix 中的preQR()方法)Step2:令121,,10k m n ε-===, 其中k 为迭代次数。
Step3:如果,1m m a ε-≤,则得到A 的一个特征值,m m a ,令1m m =-,goto Step4;否则goto Step5.Step4: 如果1m =,则得到A 的一个特征值11a ,goto Step11;如果0m =,则goto Step11;如果1m >,则goto Step3;Step5(Step6):如果2m =,则得到A 的两个特征值12s s 和(12s s 和为右下角两阶子阵对应的特征方程21,1,()det 0m m m m a a D λλ---++=的两个根。
数值分析-第二次作业答案
2020级数值分析第二次作业(非线性方程求根)参考答案和评分标准班级学号姓名一(20分)用二分法求方程3()10f x x x =--=在区间[1.0,1.5]内的一个实根,且要求有3位有效数字。
试完成:(1)估计需要二分的次数;(8分)解:容易知道方程在[1.0,1.5]有且仅有一个实根。
记此实根为*x ,根据二分法误差估计公式有12()1*22k k k b a x x ++--≤=要使得近似解有3位有效数字,只需要有22111022k -+≤⨯从而可得6k ≥,即满足精度要求的二分次数为6次。
(2)将计算过程中数据填入表1.(中间过程填写到小数点后面3位)(12分,每个k x 得2分,其它空不计分)表1题1计算过程kk a k b kx 0 1.0 1.5 1.251 1.25 1.5 1.3752 1.25 1.375 1.3163 1.313 1.375 1.3494 1.313 1.344 1.3285 1.313 1.328 1.32061.3201.3281.324二.(10分)为了计算方程()3sin 2120f x x x =--=的根,某同学将()0f x =改写为14sin 23x x =+,并建立迭代公式114sin 23k k x x +=+。
请问此迭代公式在R 上是否全局收敛的吗?说明理由。
证明:(1)对任意的x R ∈,有11113()4sin 2,333x x R ϕ⎡⎤=+∈⊆⎢⎣⎦;(2)对任意的x R ∈,有22'()cos 2133x x ϕ=≤<;从而可知,迭代格式在R 上全局收敛。
三.(20分)设有方程3()10f x x x =--=,试回答下列问题:(1)确定方程3()10f x x x =--=实根的数目;(4分)解:由2'()31f x x =-可知函数3()1f x x x =--的单调递增区间是,33⎛⎛⎫-∞-⋃+∞ ⎪ ⎪⎝⎭⎝⎭,单调递减区间是,33⎛- ⎝⎭。
北航 数值分析第二次大作业(带双步位移的QR方法)
一、算法设计方案:按题目要求,本程序运用带双步位移的QR方法求解给定矩阵的特征值,并对每一实特征值,求解其相应的特征向量。
总体思路:1)初始化矩阵首先需要将需要求解的矩阵输入程序。
为了防止矩阵在后面的计算中被破坏保存A[][]。
2)对给定的矩阵进行拟上三角化为了尽量减少计算量,提高程序的运行效率,在对矩阵进行QR分解之前,先进行拟上三角化。
由于矩阵的QR 分解不改变矩阵的结构,所以具有拟上三角形状的矩阵的QR分解可以减少大量的计算量。
这里用函数void QuasiTriangularization()来实现,函数形参为double型N维方阵double a[][N]。
3)对拟上三角化后的矩阵进行QR分解对拟上三角化的矩阵进行QR分解会大大减小计算量。
用子程序void QR_decomposition()来实现,将Q、R设为形参,然后将计算出来的结果传入Q和R,然后求出RQ乘积。
4)对拟上三角化后的矩阵进行带双步位移的QR分解为了加速收敛,对QR分解引入双步位移,适当选取位移量,可以避免进行复数运算。
为了进一步减少计算量,在每次进行QR分解之前,先判断是否可以直接得到矩阵的一个特征值或者通过简单的运算得到矩阵的一对特征值。
若可以,则得到特征值,同时对矩阵进行降阶处理;若不可以,则进行QR分解。
这里用函数intTwoStepDisplacement_QR()来实现。
这是用来存储计算得到的特征值的二维数组。
考虑到特征值可能为复数,因此将所有特征值均当成复数处理。
此函数中,QR分解部分用子函数void QR_decompositionMk()实现。
这里形参有三个,分别用来传递引入双步位移后的Mk阵,A矩阵,以及当前目标矩阵的维数m。
5)计算特征向量得到特征值后,计算实特征值相应的特征向量。
这里判断所得特征值的虚数部分是否为零。
求实特征值的特征向量采用求解相应的方程组((A-λI)x=0)的方法。
因此先初始化矩阵Array,计算(A-λI),再求解方程组。
数值分析 第七章最小二乘法
对于有些不能化为多项式形式的函数,照此矩阵形式,计算较 简单.
9
例:给出数据
xi yi
0.1
0.2
0.3
0.4
0. 5
0.6
0.172 0.323 0.484 0.690 1.000 1.579
现在用最小二乘法求拟合曲线 作变换 z =
y=
cx 1 + ax + bx2
1 1 a b 1 1 = + + x = a0 + a1 + a2 x , Φ = span{ ,1, x} y cx c c x x 1 10 5 5 = 5.814 2 10 5 a0 3 2 3 r 0.172 ur T 1 1 1 1 1 z = 3.096 A = 1 C = a1 M a 0.1 0.2 0.3 0.4 0.5 0.6 2 0.633 ur r T T 则最小二乘法的法方程组就可以写为: A AC = A z 求得: a0 = 0.503, a1 = 0.976, a2 = −1.967
i=1 i=1
⇒a0 ∑ ϕ j ( xi )ϕ0 ( xi ) ρ ( xi ) +L+ an ∑ ϕ j ( xi )ϕn ( xi ) = ∑ f ( xi )ρ ( xi ) ϕ j ( xi )
i=1 i=1 i=1
m
m
m
j = 0,1,L, n
这就得到了一个线性方程组,这个方程组称为最小二乘法的 法方程组(又称正规方程组). 由这个法方程组的解就可得到所要求的函数 ϕ ( x ) = a 0 ϕ 0 ( x ) + a1ϕ 1 ( x ) + L + a n ϕ n ( x )
数值分析之最小二乘法与最佳一致逼近
19
例2
设数据 ( xi , yi )(i 0,1,2,3,4) 由表3-1给出,
表中第4行为 ln yi yi ,通过描点可以看出数学模型为 及 b. y aebx , 用最小二乘法确定 a
表3 1 i xi yi 0 1.00 5.10 1 1.25 5.79 2 1.50 6.53 3 1.75 7.45 4 2.00 8.46
0 ( x) 1, 1 ( x) x, ( x) 1,
得
表3 1 (0 , 0 ) 5, i 0 2 3 41 ,00 1 ) xi 7 .5 , 0. xi ( 1 1.25 1 .50 1.75 i 0 4.79 yi 5.10 5 6.53 7.45 2 (1 , 1 ) xi 11.875, yi 1. 629 1 .756 1.876 2.008 i 0
13
令 S1 ( x) a0 a1 x, 这里 m 4, n 1, 0 ( x) 1, 1 ( x) x, 故
( 0 , 0 ) i 8,
i 0 4
( 0 , 1 ) (1 , 0 ) i xi 22,
i 0
4
(1 , 1 ) i xi2 74,
解
用给定数据描图可确定拟合曲线方程为 y aebx ,
它不是线性形式. 两边取对数得
20
ln y ln a bx.
若令 y ln y, A ln a, 则得 y A bx, {1, x}.
为确定 A, b ,先将 ( xi , yi )转化为 ( xi , yi ), 数据表见表3-1.
i 0 m
这里 ( x) 0是 [a, b]上的权函数,它表示不同点 ( xi , f ( xi ))
北航数值分析大作业 第二题 QR分解
数值分析第二题 梁进明SY0906529算法设计方案。
一.矩阵的QR 分解。
把矩阵A 分解为一个正交矩阵Q 与一个上三角矩阵R 的乘积,称为矩阵A 的正三角分解,简称QR 分解。
QR 分解的算法如下:记1A A =,并记[]rij n n Ar a ⨯=,令1Q I =(n 阶单位矩阵) 对于r=1,2,…,n-1执行(1) 若(1,2,...,)rir a i r r n =++全为零,则令1r r Q Q +=,1r r A A +=转(5);否则转(2)(2) 计算2r d =()sgn()r r rr r c a d =-(若()0r rr a =,则取r r c d =) 2()r r r r rrh c c a =- (3) 令()()()1,(0,...,0,,,...,)r r r T nr rr r r r nr u a c a a R +=-∈ (4) 计算11//r r rTr r r r rT r rr rT r r r rQ u Q Q u h p A u h A A u p ωω++==-==-(5) 继续当此算法执行完后就得到正交矩阵n Q Q =和上三角矩阵n R A =且有A QR =。
二.矩阵的 拟上三角化。
对实矩阵A 的拟上三角化具体算法如下:记(1)AA =,并记()r A 的第r 列到第n 列的元素为(1,2,...,;,1,...,)rij a i n j r r n ==+。
对于1,2,...,2r n =-执行(1) 若()(2,3,...,)r ir a i r r n =++全为零,则令(1)()r r AA +=,转(5);否则转(2)。
(2) 计算2()()1,1,2()1,sgn()(0,)r r r r r r r r r r r r r r r r rd c a d a c d h c c a +++==-===-若则取 (3) 令()()()1,2,(0,...,0,,,...,)r r r T nr r r r r r nr u a c a a R ++=-∈ (4) 计算()()(1)()///r T r r r r r r rTr r r rr r r rr r T T r r r rp A u h q A u h t p u h q t u A A u u p ωω+====-=--(5) 继续算法执行完后,就得到与原矩阵A 相似的拟上三角矩阵(1)n A -。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
50248449
2.3
3.787994
64875364
3.787995
11610470
3.787995
11615298
3.787995
11615314
3.787995
11615500
2.4
4.160165
86770901
4.160166
37838632
4.160166
37843906
68954997
2.081044
68957296
2.081044
68957297
2.081044
68957283
1.8
2.308420
90889291
2.308421
16958140
2.308421
16960836
2.308421
16960837
2.308421
16960820
1.9
2.557186
0.3818300505
0.4179591837
0.1012285363
0.2223810345
0.3137066459
0.3626837834
0.0812743884
0.1806481607
0.2606106964
0.3123470770
0.3302393550
截断误差:
,
最高精度2n-1阶
二、计算结果
2.1
3.123238
20863730
3.123238
59095791
3.123238
59099743
3.123238
59099745
3.123238
59099784
2.2
3.44272
407791075
3.442724
50243946
3.442724
50248333
3.442724
50248341
{
b[i]=0;
for(k=0;k<N;k++)
b[i]+=Base(x,i,k)*y[k];
}
Guass(a,b,c);
s=0;
for(k=0;k<N;k++)
{
yy[k]=0;
for(i=0;i<3;i++)
yy[k]+=c[i]*Base(x,i,k);
s+=pow(yy[k]-y[k],2);
5.25E-04
4点
3.1416119052
1.93E-05
5点
3.1415926966
4.30E-08
6点
3.1415926112
4.24E-08
7点
3.1415926564
2.82E-09
8点
3.1415926538
2.43E-10
程序运行截图:
三、结论
由复化Simpson求积公式的截断误差公式可知其具有4阶收敛性。对于本算例,当步长 时,绝对误差-步长拟合函数关系式近似为:
(2)使用Gauss求积公式重新计算上述积分,比较各阶Gauss积分的数值精度和对 的近似精度。
一、算法描述:
1)Simpson复化求积公式:
截断误差:
,
截断误差随h减小而减小,然而过小的h可能会造成累积误差。
2)Gauss-Legendre求积公式(权函数 ):
Gauss-Legendre求积节点和求积系数
4.989698
18726518
4.98969
18726587
4.989698
18727057
2.7
5.449311
54277910
5.449312
18554878
5.449312
18561509
5.449312
18561606
5.449312
18562187
2.8
5.940331
96328716
5.940332
}
for(i=0;i<3;i++)
printf("c%d:%f\n",i+1,c[i]);
printf("节点拟合误差:%f\n",s);
}
float Base(float x[],int m,int n)
{
float b;
b=sin((m+1)*x[n]);
return(b);
}
void Guass(float a[][3],float b[],float c[])
1)复化Simpson解:(精确解: )
步长h
1e-1
1e-2
1e-3
1e-4
1e-5
1e-6
1e-7
1e-8
数值积
分解S
3.268
2594
3.154
8593
3.142
9253
3.141
7260
3.141
6060
3.141
5940
3.141
5928
3.141
5926
绝对误
差E
1.27e-1
1.33e-2
60118370
1.686170
60118371
1.686170
60118363
1.6
1.873981
67160519
1.873981
85688338
1.873981
85690253
1.873981
85690254
1.873981
85690243
1.7
2.081044
46724338
2.081044
进而可求解出系数向量 ,从而找到最小二乘拟合函数 。
二、
1)节点数据:
i
1
2
3
4
5
6
7
8
9
9
1
2
3
4
5
6
7
8
9
拟合函数:
精确函数:y=x
拟合误差:251.947067
拟合曲线:
程序运行截图:
2)节点数据:
i
1
2
3
4
5
6
7
8
9
0
0
1.5
3
1.5
0
-1.5
-3
-1.5
0
拟合函数:
拟合误差:0.000000
23964234
2.557186
53989904
2.557186
53993009
2.557186
53993010
2.557186
53992990
2
2.828426
78386010
2.828427
12471086
2.828427
12474610
2.828427
12474611
2.828427
12474587
1.106816
60630836
1.2
1.227879
53964033
1.227879
59356063
1.227879
59356619
1.227879
59356619
1.227879
59356617
1.3
1.364135
90632094ห้องสมุดไป่ตู้
1.364135
99027967
1.364135
99028835
一方面,随着步长的减小,复化Simpson解有效数字增加。另一方面,随着步长的减小,其计算时间逐步增加(步长每缩短10倍,计算时间增长10倍)。因此本算例未考虑步长大于 的情况。理论上,随着 ,应有 。
Gauss-Legendre求积公式收敛速度快,计算精度高。对于本算例,采用5节点Gauss-Legendre求积公式既可使误差控制到 量级,较相同精度的复化Simpson求积法大大减少了计算量。Gauss-Legendre代数精度为2n-1,积分节点数每增加1,代数精度增加2。对于本算例,Gauss-Legendre的有效数字随积分节点数增加而增加,逐步收敛于精确解。
数值分析
第二次上机作业
学号:BY×××
姓名:云××
问题
编写程序编写程序实现如下的线性最小二乘拟合算法:用函数 拟合给定的数据 ,i=0,1,2,…,m。
算法步骤如下:
1.输入m及其数据 ,i=1,2…,m;
2.建立法方程 ;
3.解法方程组;
4.输出 。
用此程序求出如下数据的拟合曲线,计算出拟合误差,并画出这些数据点和拟合曲线的图形,比较分析拟合的效果。
拟合曲线:
程序运行截图:
三、结论
通过比较以上两组给定数据的最小二乘拟合结果可知,拟合基函数对拟合结果的好坏存在很大的影响。对于来自三角函数类型的离散数据点,采用三角函数类型基函数并适当控制基函数个数,可得到良好的拟合结果。
问题
数学上已经证明:
(1)使用Simpson复化求积公式计算 的近似值。选择不同的h,将误差刻画为h的函数绘图,分析该方法的精度。
4.160166
37843935
4.160166
37844207
2.5
4.560358
53227084
4.560359
08668122
4.560359
08673845
4.560359
08673891
4.560359
08674259
2.6
4.989697