北航数值分析大作业一

上传人:豆浆 文档编号:30484064 上传时间:2018-01-29 格式:DOC 页数:8 大小:62.50KB
返回 下载 相关 举报
北航数值分析大作业一_第1页
第1页 / 共8页
北航数值分析大作业一_第2页
第2页 / 共8页
北航数值分析大作业一_第3页
第3页 / 共8页
北航数值分析大作业一_第4页
第4页 / 共8页
北航数值分析大作业一_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《北航数值分析大作业一》由会员分享,可在线阅读,更多相关《北航数值分析大作业一(8页珍藏版)》请在金锄头文库上搜索。

1、一、算法设计方案:1. 求出 A 的压缩后的矩阵 C,并对 C 作 LU分解;2. 根据反幂法求出 s 的值;若矩阵 A 存在相等的模最小的特征值,则当这些特征值完全相等时,反幂法可以求出此特征值和此特征值对应的特征向量。当这些特征值互为相反数时,由反幂法的推导过程可知:此时亦能求出这些特征值的模,但求不出与这些特征值对应的特征向量。综上所述,反幂法可以求出矩阵 A模最小的特征值。同理可知:幂法可以求出矩阵 A 模最大的特征值。3. 根据幂法求出矩阵 A 模最大的特征值 m;4. 计算出矩阵 B = A + | m|I 的模最大的特征值 m 和模最小的特征值 s。则有: 501 = m - |

2、 m| 1 = s - | m|5. 求出 k ; k = m + k( 501 1 )/40用反幂法计算出矩阵 Bk 的模最小的特征值。Bk = A - k I(其中,k = 1,2,39)。6. 求出 A 的条件数 cond(A)2 以及 A 的行列式detA,其中:cond(A)2 = | m|/| s|;detA = det(LU) = detU。二、全部源程序:/1.主程序#include stdafx.h#include iostream.h#include iomanip.h#include head.h#include math.hvoid main( )double *a_D

3、, *u0, *y; /u0 为迭代初始值double *a_L, *a_U, *c;/下面的 n 代表 A 阵维数,s 代表上半带宽,r代表下半带宽,可以随意设置const int n = 501;const int s = 2;const int r = 2;int i = 0, j = 0;a_D = new double n;u0 = new double n;y = new double n;a_U = new double *s;a_L = new double *r;c = new double *r+s+1;/生成压缩矩阵for ( i = 0; i != r+s+1; +i

4、)ci = new double n;for ( i = 0; i 1e-12 );delete y0;cout= 0; -i)mini = min( i+s, n-1 );for ( t = i+1; t b ) ? b : a;/此函数为求两个数的最大值函数int max( int a, int b )return ( a b ) ? a : b;/13.此函数实现压缩后的矩阵 A 与向量 y 的乘积/其中 c 代表压缩后的矩阵,y 代表中间矩阵,u=Ay/s 为上半带宽,r 为下半带宽,n 代表矩阵和向量的维数void mul_ay( double *c, double *y, doub

5、le *u, int s, int r, int n )int i, j, k;double sum = 0;for ( k = s; k =0 ); -i, +j)sum += cij*yj;uk-s = sum;for ( k = s+r+1; k = 0 ); -i, +j)sum += cij*yj;uk-s = sum;/14.此函数为求向量的二范数,p 为向量名,n 为向量维数#include math.hdouble norm2( double *p, int n )double sum = 0.0;for( int i = 0; i = 1e-12 );delete y;cou

6、t迭代次数为:jendl;return b1;/16.此函数实现两个数值的交换void swap( double &a, double &b )double c;c = a;a = b;b = c;/17.头文件/此函数为求两个数的最小值函数extern int min( int a, int b );/此函数为求两个数的最大值函数extern int max( int a, int b );/此函数将带状稀疏矩阵 a 压缩为 cextern void arr_compress( double *c, double *a_D, double *a_U, double *a_L, int s,

7、int r, int n );/此函数为求压缩后矩阵 C 的 LU 分解extern void LU_decomp( double *c, int s, int r, int n );/此函数为 lu 分解的回代过程extern void LU_regres( double *c, double *b, double *x, int s, int r, int n);/此函数为求向量的二范数,p 为向量名,n 为向量维数extern double norm2( double *p, int n );/此函数实现压缩后的矩阵 A 与向量 y 的乘积extern void mul_ay( doub

8、le *c, double *y, double *u, int s, int r, int n );/此函数为求出模最大的特征值extern double eig_max( double *y, double *u, int n );/此函数实现两个数值的交换extern void swap( double /此函数实现幂法求模最大的特征值extern double power( double *c, double *u, int s, int r, int n );/此函数实现反幂法求模最大的特征值extern double inv_power( double *c, double *u,

9、 double *y, int s, int r, int n );/此函数生成矩阵 A 的非零元素extern void arr_ger( double *a_U, double *a_D, double *a_L, int s, int r, int n, double u_max );/此函数求 A 的行列式extern double deta( double *c, int s, int r, int n );/此函数求 A 模最大的特征值extern double m_max( double *c, double *a_u, double *a_D, double *a_L, int

10、 s, int r, int n );/求矩阵条件数extern double cond( double m, double n );/此函数求 A 模最小的特征值extern double m_min( double *c, double *a_U, double *a_D, double *y, double *a_L, int s, int r, int n );三、各种求出的值A 的行列式为: A = 2.772786141752e+118迭代次数为:343A 的模最大特征值为:-1.070011361502e+001迭代次数为:70 s = -5.557910794230e-003迭

11、代次数为:615 501 = 9.724634098777e+000迭代次数为:3 1 = -1.070011361515e+001A 的条件数为:cond(A)2 = 1.925204273902e+003 ik 的值如下所示:( 其中 ik = xk - 1)迭代次数为:7x0=-1.018293403315e+001迭代次数为:226x1=-9.585707425068e+000迭代次数为:7x2=-9.172672423928e+000迭代次数为:8x3=-8.652284007898e+000迭代次数为:118x4=-8.093483808675e+000迭代次数为:16x5=-7.

12、659405407692e+000迭代次数为:15x6=-7.119684648691e+000迭代次数为:19x7=-6.611764339397e+000迭代次数为:28x8=-6.066103226595e+000迭代次数为:21x9=-5.585101052628e+000迭代次数为:15x10=-5.114083529812e+000迭代次数为:13x11=-4.578872176865e+000迭代次数为:290x12=-4.096470926260e+000迭代次数为:13x13=-3.554211215751e+000迭代次数为:6x14=-3.041090018133e+00

13、0迭代次数为:1606x15=-2.533970311130e+000迭代次数为:72x16=-2.003230769563e+000迭代次数为:19x17=-1.503557611227e+000迭代次数为:17x18=-9.935586060075e-001迭代次数为:11x19=-4.870426738850e-001迭代次数为:10x20=2.231736249575e-002迭代次数为:13x21=5.324174742069e-001迭代次数为:15x22=1.052898962693e+000迭代次数为:29x23=1.589445881881e+000迭代次数为:81x24=2

14、.060330460274e+000迭代次数为:40x25=2.558075597073e+000迭代次数为:13x26=3.080240509307e+000迭代次数为:23x27=3.613620867692e+000迭代次数为:16x28=4.091378510451e+000迭代次数为:23x29=4.603035378279e+000迭代次数为:12x30=5.132924283898e+000迭代次数为:30x31=5.594906348083e+000迭代次数为:45x32=6.080933857027e+000迭代次数为:18x33=6.680354092112e+000迭代次

15、数为:74x34=7.293877448127e+000迭代次数为:30x35=7.717111714236e+000迭代次数为:11x36=8.225220014050e+000迭代次数为:38x37=8.648666065193e+000迭代次数为:10x38=9.254200344575e+000四、初始向量对计算结果的影响:三中求出的结果采用的初始向量的第一个元素为 1,其余所有元素均为 5,得到的结果与MATLAB 中所得结果一致。而当选取的初始向量的第一个元素为 1,其余元素均为 0 时,得到的结果有误,列出如下部分错误结果:A 的模最大的特征值为:-2.080981085336e+000 501 = 9.978750038032e-001 1 = -2.080981085347e+001出现错误的原因如下:所选取的特征向量与 501 和 1 应的特征向量垂直。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号