1、1数值分析大作业1、算法设计方案1、矩阵初始化矩阵 的下半带宽 r=2,上半带宽 s=2,设置矩阵 ,501ijaA 501srC在矩阵 C 中检索矩阵 A 中的带内元素 的方法是: 。这样所需要ijajsiijca,1的存储单元数大大减少,从而极大提高了运算效率。2、利用幂法求出 501与幂法迭代格式:0111nTkkkkTuRyAu非 零 向 量当 时,迭代终止。120/kk首先对于矩阵 A 利用幂法迭代求出一个 ,然后求出矩阵 B,其中( 为单位矩阵) ,对矩阵 B 进行幂法迭代,求出 ,之后令IB ,比较 ,大者为 ,小者为 。与50113、利用反幂法求出 iks,反幂法迭代格式:01
2、11nTkkkTkuRyAu非 零 向 量当 时,迭代终止, 。120/kk 1sk每迭代一次都要求解一次线性方程组 ,求解过程为:1yAu(1)作分解 LUA对于 执行nk,.22sknrki cccsj ksktkittksisi jstksjrttjskjsk );,m(,.21/)(:),.: ,1,1ax,1, ,11),max(,1,1(2)求解 (数组 b 先是存放原方程组右端向量,后来存放中间向yUbL量 y) )1,.2(/)(:/ ),.32(: ,1),min(1.1),ax(, nicbcistsittintiritstii使用反幂法,直接可以求得矩阵按模最小的特征值
3、。s求与数 最接近的特征值 ,对矩阵)39,.2(40151kk ik实行反幂法,即可求出对应的 。IAk kikk,/14、求出 A 的条件数和行列式根据 ,其中分子分母分别对应按模最大和最小的特征值。max2()scond的计算:由于 ,其中 为下三角矩阵,且对角线元素为 1,故etALU,所以有 ,又 为上三角矩阵,故 为对其对角线d()1L det()U上各元素的乘积,最后可得 。det()t()32、程序源代码(1)定义所需要的函数:#include #include #include #define N 501#define R 2#define S 2int min(int a,
4、int b); / 求最小值int max(int a,int b,int c); / 求最大值double Fan_two(double xN);/计算二范数void FenjieLU(double (*C)N);/解线性方程组的LU分解过程void Solve(double (*C)N, double *b,double *x);/解线性方程组的求解过程double PowerMethod(double CN,double uN,double yN,double bta,double D);/幂法double InversePowerMethod(double CN,double uN,d
5、ouble yN,double bta,double D);/反幂法;(2)程序的主函数,Main.cpp 代码如下:void main()double CR+S+1N;double uN;double yN;double miu39;double C1R+S+1N;double bta = 1.0;double Namda1,Namda501,NamdaS;double Namda39;double CondA2;double detA = 1.0;double D = 1.0e-12;int i, j, k;FILE * fp;fp = fopen(“Namda.txt“,“w“);/对数
6、组进行初始化/int i, j; for (i = 0; i b ? a : b;return temp c ? temp : c;double Fan_two(double xN)double sum = 0.0;int i;for (i = 0; i = 0; i-)for (t = i+1; t D)temp = bta;ita = Fan_two(u);for (i = 0; i D)temp = bta;ita = Fan_two(u);for (i = 0; i N; i+)yi = ui / ita;9/用到临时存储数组TC和ty 是因为函数Solve执行过程中会改变A和 yfo
7、r (i = 0; i R + S + 1; i+)for (j = 0; j N; j+)TCij = Cij;for (i = 0; i N; i+)tyi = yi;Solve(C, y, u);for (i = 0; i R+S+1; i+)for (j = 0; j N; j+)Cij = TCij;for (i = 0; i N; i+)yi = tyi;for (i = 0; i N; i+)sum += yi * ui;bta = sum;sum = 0;k+;bta = 1.0 / bta;return bta;103、程序运行结果下图为主程序运行结果其中 的结果输出在 Namda.txt 文件中,结果如下:ik