北航数值分析二题

更新时间:2023-10-28 15:16:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一 算法设计方案 1.初始化矩阵A。 2.将矩阵A拟上三角化

矩阵A的拟上三角化的算法如下: 记(1)若

A,并记

。对于r=1,2,全为零,则令

,n-2执行

,转(5);否则转(2)。

(2)计算

(3)令(4)计算

,(若,则取),

(5)继续。

3. 对拟上三角化后的矩阵进行QR分解 记(1)若转(2)。

A,并记

。令全为零,则令

对于r=1,2,

,

,n-2执行 ,转(5);否则

(2)计算

(3)令(4)计算(5)继续。

,(若,则取),

此程序执行完便可得到,。

4.对拟上三角化后的矩阵进行带双步位移的QR分解。 (1)使用矩阵的拟上三角化的算法把矩阵A精度水平和迭代最大次数L。 (2)记(3)如果(5)。

(4)如果m=1,则得到A的一个特征值如果m1,则转(3)。

,转(11);如果m=0,则直接转(11);

,令k=1,m=n。

,则得到A的一个特征值

,置m=n-1,转(4);否则转化为拟上三角矩阵

;给定

(5)求二阶子阵的两个特征值的两个根和

和,即计算二次方程

(6)如果m=2,则得到A的两个特征值和(7)如果则转(8)。

,转(11);否则转(7)。

,置m=m-2,转(4);否

,则得到A的两个特征值和

(8)如果k=L,则计算终止,未得到A的全部特征值,否则转(9)。 (9)记

(为m阶单位矩阵) (对

作QR分解)

,计算

其中对记(a)若

作QR分解与

的计算算法如下:

,全为零,则令

。对于r=1,2,

,m-1执行

,转(e);否则

转(b)。

(b)计算

(c)令(d)计算

(e)继续

(10)置k=k+1,转(3)。

,(若,则取),

(11)A的全部特征值以计算完毕,停止计算。

注:为了节省程序量,本作业结果大部分是来自于程序运行时的监视器保存值,故没有作为运行结果显示 二 源程序

#include\#include\#include%using namespace std; #define N 10 #define L 1000 #define E 1.0e-12

void set_A(double (*A)[10]); double deta(double b,double c); int sign(double a);

void QR_fenjie(double A[N][10],double Q[N][10],double R[N][10]); void hessenberg(double (*A)[10]);

void QR_Mk(double (*B)[N],double (*C)[N],int n); void DS_QR(double (*A)[10],double (*ch)[2]);

void tezv(double V[N][N],double T[N]); int main() { }

/************* 初始化A矩阵 **************/

void set_A(double (*A)[10]) { }

/*************************************************************** 二次函数的判别式

***************************************************************/ double deta(double b,double c) {

int i,j;

for(i=1;i

for(j=1;j

if(i!=j) A[i-1][j-1]=sin(0.5*i+0.2*j); else A[i-1][j-1]=1.5*cos(i+1.2*j);

double A_matrix[N][N],tz[N][2],stz[N],AQ[N][N],AR[N][N]; set_A(A_matrix); hessenberg(A_matrix); QR_fenjie(A_matrix,AQ,AR); DS_QR(A_matrix,tz); set_A(a); for(i=0;i

for(int i=0;i

tezv(a,stz);

stz[i]=tz[i][0]; for(j=0;j

if(i!=j) a[i][j]=sin(0.5*(i+1)+0.2*(j+1)); else a[i][j]=1.5*cos((i+1)+1.2*(j+1));

return 0;

double m; }

/************* 符号函数 **************/ int sign(double a) { }

/************************************************************** 矩阵的基本QR分解函数

**************************************************************/ void QR_fenjie(double A[N][10],double Q[N][10],double R[N][10]) {

int i,j,r;

double dr,cr,hr,sum; double u[N],w[N],p[N]; for(i=0;i

for(i=0;i

for(r=1;r<=N-1;r++) {

bool f1=1;

for( i=r+1;i<=N;i++) {

for(j=0;j

R[i][j]=A[i][j]; for(j=0;j

if(i==j)

Q[i][j]=1; Q[i][j]=0; else

int b; if(a>=E)

b=1; b=-1; m=b*b-4*c; return m;

else

return b;

本文来源:https://www.bwwdw.com/article/hpe2.html

Top