数值分析大作业

本文由用户“zl0606”分享发布 更新时间:2021-04-13 19:24:32 举报文档

以下为《数值分析大作业》的无排版文字预览,完整格式请下载

下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

数值分析大作业 二

姓名:苗某某 单位:航天五院502所

算法设计方案

本次大作业主要涉及到的算法有:

矩阵A的拟上三角化;

矩阵A的QR分解;

带双步位移QR分解求解矩阵A的全部特征值;

列主元高斯消去法求解线性方程组。

其中,列主元高斯消去法用于求解实特征值所对应的特征向量。算法的具体应用和算法描述如下。

求矩阵A的拟上三角化矩阵A(n-1)

矩阵A的拟上三角化算法步骤如下:

记,并记的第r列到第n列元素为。

对于执行如下算法:

若全为零,则令,转(5);否则转(2)。

计算







令

计算



继续

当此算法执行完后,就得到矩阵A的拟上三角化矩阵A(n-1)

A(n-1)的QR分解以求Q、R、RQ

记,并记。

对于执行

(1) 若全为零,则令,转(5);否则转(2);

(2) 计算







(3) 令

(4)计算



(5)继续

经过上述运算之后,就得到和上三角矩阵



然后利用和相乘可计算。

求矩阵A的全部特征值Lamta(i)

(1) 调用矩阵A拟上三角化算法得到的拟上三角矩阵,给定精度水平和迭代的最大次数100;

(2) 记,令k=1,m=10;

(3) 判断是否,是,则为特征值,m=m-1,goto(4),否则goto(5);

(4) 如果m=1,则为特征值,goto(10);若m=0,goto(10);如果m>1,goto(3);

(5) 如果m=2,则得到A的两个特征值和, 即右下角二阶子阵对应的特征方程的两个根,goto(11);否则goto(6);

(6) 如果,则得到A的两个特征值两个特征值和,即右下角二阶子阵对应的特征方程的两个根,令m=m-2,goto(4);否则goto(7);

(7)如果k>100,则求解失败,程序退出;否则goto(8);

(8)记计算



调用QR分解算法对进行QR分解得到矩阵Q;

Ak+1 = QkTAkQk

(9)置k=k+1,goto(3);

(10)A的所有特征值已经计算完毕,停止计算。

此算法执行完后即求得矩阵A的所有特征值。

求矩阵A相应实特征值的特征向量

利用列主元高斯消去法求解Lamta(i)所对应的特征向量,需要注意的地方是,由于特征向量为非0向量,所以求解回带过程时取x10 = 1。

1. 消元过程

(1)选行号,使 。

(2)交换与。

(3)对于计算



2. 回代过程

x10 = 1



经过上述过程解线性方程组所得的解向量即为对应于特征值Lamta(i)的特征向量。

源程序:

#include

#include

#include

#define DIMENSION 10

#define Failure 0

#define Success 1

#define Standard 1

#define Ephasilong pow(10,12)

#define CompareTimes 100

void intialMatrixA(double A[DIMENSION][DIMENSION]);

void intialMatrix_Lamta(double Lamta[DIMENSION][2]);

void printMatrix(double matrix[DIMENSION][DIMENSION]);

void printEigenValue(double Lamta[DIMENSION][2]);

void intialMatrixQ_toUnitE(double Q[DIMENSION][DIMENSION]);

void intialMatrixR_toZero(double R[DIMENSION][DIMENSION]);

//拟上三角化子程序

int allIsZero(double A[DIMENSION][DIMENSION], int rowStartIndex,

int rowEndIndex, int clomn);

double caculate_dr(double A[DIMENSION][DIMENSION],

int rowStart, int rowEnd, int clomn);

int sgn(double a);

void getArray_U(double A[DIMENSION][DIMENSION], double U[DIMENSION],

double c, int index);

void getArray_P_Q(double A[DIMENSION][DIMENSION], double U[DIMENSION],

double h, double P[DIMENSION], double Q[DIMENSION]);

double get_T(double P[DIMENSION], double U[DIMENSION], double h);

void getArray_W(double Q[DIMENSION], double t,

double U[DIMENSION], double W[DIMENSION]);

void getMatrixA(double A[DIMENSION][DIMENSION], double W[DIMENSION],

double U[DIMENSION], double P[DIMENSION]);

void simulateUpTriangel(double A[DIMENSION][DIMENSION]);

//QR分解法所用子程序

void getArray_QR_U(double A[DIMENSION][DIMENSION], double U[DIMENSION],

double c, int index, int M_Dimension);

void getArray_Omega(double Q[DIMENSION][DIMENSION], double U[DIMENSION],

double Omega[DIMENSION], int M_Dimension);

void getArray_Q(double Q[DIMENSION][DIMENSION], double Omega[DIMENSION],

double U[DIMENSION], double h, int M_Dimension);

void getArray_P(double A[DIMENSION][DIMENSION], double U[DIMENSION], double h,

double P[DIMENSION], int M_Dimension);

void getMatrixAr(double A[DIMENSION][DIMENSION], double U[DIMENSION],

double P[DIMENSION], int M_Dimension);

void matrix_QR_disassemble(double A[DIMENSION][DIMENSION],

double Q[DIMENSION][DIMENSION],

double R[DIMENSION][DIMENSION], int M_Dimension);

//带双步位移QR方法求解矩阵A的全部特征值所用子程序

int checkPricision(double number);

int doubleDisplacement_QR(double A[DIMENSION][DIMENSION], double Lamta[DIMENSION][2]);

void getEigenVector(double A[DIMENSION][DIMENSION], double Lamta);

int rmain_Guass(int dimension, double coefficient[DIMENSION][DIMENSION],

double rightValue[DIMENSION], double X[DIMENSION]);

//主程序

int main()

{

double A[DIMENSION][DIMENSION], Q[DIMENSION][DIMENSION],

R[DIMENSION][DIMENSION], RQ[DIMENSION][DIMENSION];

double Lamta[DIMENSION][2];

int i, j, p;

//初始化矩阵A和特征值向量

intialMatrixA(A);

intialMatrix_Lamta(Lamta);

//对矩阵A进行拟上三角化

simulateUpTriangel(A);

printf("\nThe A's simulateUpTriangel Matrix is: \n");

printMatrix(A);

//对矩阵A进行QR分解,并求解RQ

matrix_QR_disassemble(A, Q, R, DIMENSION);

printf("\nThe Q Matrix is: \n");

printMatrix(Q);

printf("\nThe R Matrix is: \n");

printMatrix(R);

printf("\nThe RQ Matrix is: \n");

//求解矩阵RQ

for(i=0; i请点击下方选择您需要的文档下载。

  1. TDOA定位的Chan算法MATLAB源代码
  2. 公司新媒体矩阵 创业计划书(获奖范文)
  3. 《拔萝卜》教学反思
  4. c3-10基于反馈调整差分进化算法的人工智能教育系统1
  5. 选择题高频考点随身学—二级MS Office高级应用
  6. python程序设计知识点
  7. 全国计算机二级考试公共基础知识题库365题及答案
  8. 复试背诵资料
  9. 1.算法及应用复杂度
  10. 矩阵论作业10.23
  11. 向量减法及几何意义教学设计
  12. 2.2.2向量减法运算及其几何意义ppt课件
  13. 《高等代数》期末考试卷
  14. 《平面向量的坐标表示》教学反思
  15. 2.2.3向量数乘运算及其几何意义:课件八(7张PPT)
  16. 网络数据挖掘笔记
  17. 数学建模(cumcm)历届竞赛赛题基本解法
  18. 详细设计说明书(GB8567——88)
  19. 2020届高考数学(理)二轮复习专题检测(5)平面向量
  20. 912-数学分析与高等代数考试大纲

以上为《数值分析大作业》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

图片预览