北航数值分析大作业 第二题 QR分解

北航数值分析大作业 第二题 QR分解
北航数值分析大作业 第二题 QR分解

数值分析第二题 梁进明

SY0906529

算法设计方案。

一.矩阵的QR 分解。把矩阵A 分解为一个正交矩阵Q 与一个上三角矩阵R 的乘积,称为矩阵A 的

正三角分解,简称QR 分解。QR 分解的算法如下:

记1A A =,并记[]r

ij n n Ar a ?=,令1Q I =(n 阶单位矩阵) 对于r=1,2,…,n-1执行

(1) 若(1,2,...,)r

ir 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 rr

h c c a =- (3) 令()()()1,(0,...,0,,,...,)r r r T n

r rr r r r nr u a c a a R +=-∈ (4) 计算

11//r r r

T

r r r r r

T r r

r r

T r r r r

Q u Q Q u h p A u h A A u p ωω++==-==-

(5) 继续

当此算法执行完后就得到正交矩阵n Q Q =和上三角矩阵n R A =且有A QR =。 二.矩阵的 拟上三角化。对实矩阵A 的拟上三角化具体算法如下:

记(1)

A

A =,并记()r A 的第r 列到第n 列的元素为(1,2,...,;,1,...,)r

ij a i n j r r n ==+。

对于1,2,...,2r n =-执行

(1) 若()

(2,3,...,)r ir a i r r n =++全为零,则令(1)

()r r A

A +=,转(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 r

d c a d a c d h c c a +++=

=-===-若则取 (3) 令()()()1,2,(0,...,0,,,...,)r r r T n

r r r r r r nr u a c a a R ++=-∈ (4) 计算

()()(1)()///r T r r r r r r r

T

r r r r

r r r r

r r T T r r r r

p A u h q A u h t p u h q t u A A u u p ωω+====-=--

(5) 继续

算法执行完后,就得到与原矩阵A 相似的拟上三角矩阵(1)

n A -。

三.带双步位移的QR 方法求实矩阵n n

A R

?∈全部特征值的具体算法如下:

(1) 使用矩阵的拟上三角化的算法把矩阵n n

A R ?∈化为拟上三角矩阵(1)

n A

-;给定精度水平

0ε>和迭化最大次数L 。

(2) 记(1)

(1)

1[]n ij n n A A

a -?==,令1,k m n ==。

(3) 如果(),1k m m a ε-≤,则得到A 的一个特征值()

k mm a ,置:1m m =-(降阶),转(4);否则

转(5)。

(4) 如果1m =,则得到A 的一个特征值()11k a ,转(11);如果0m =,则直接转(11);如果1m >转

(3)。 (5) 求二阶子阵

()()1,11,()()

,1, k k m m m m

k k k m m m m a a D a a ----??=??????

的两个特征值1s 和2s ,即计算二次方程

2()()

1,1,( )det 0k k m m m m k a a D λλ---++=

的两个根

1s 和2s

(6) 如果2m =,则得到A 的两个特征值

1s 和2s ,转(11);否则转(7)。

(7) 如果()

1,2k m m a ε--≤,则得到A 的两个特征值

1s 和2s ,

置:2m m =-(降阶),转(4);否则转(8)。

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

[](,)k k ij m m A a i i j m ?=≤≤,计算

()()

1,1,()()()()1,1,,11,21 ()()

k k m m m m

k k k k m m m m m m m m

k k k k k k k T k k k k

s a a t a a a a M A sA tI I m M Q R M QR A Q A Q ------+=+=-=-+==是阶单位矩阵对作分解 (10) 置:1k k =+,转(3)。

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

四.算法的主过程

(1) 根据公式生成原始矩阵1010[]ij A a ?= (2) 对矩阵A 进行拟上三角化

(3) 用带双步位移的QR 方法求矩阵的特征值

(4) 对每个特征值λ ,解出线性方程组()0A I X λ-=的所有非零解即得A 的属于λ的全

部特征向量。

全部源代码

#include

#include

using namespace std;

const int n = 10;

const double precision = 1e-12;

double a[ n ][ n ];

FILE *file;

struct Eigenvalue {

double r;

double i;

};

Eigenvalue eigenvalue[ n ];

//生成矩阵A

void getMatrix() {

for( int i = 0; i < n; i++ ) {

for( int j = 0; j < n; 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 ) );

}

}

}

}

//设单位矩阵

void setUnitMatrix( double u[ n ][ n ] ) {

for( int i = 0; i < n; i++ ) {

for( int j = 0; j < n; j++ ) {

if( i == j ) {

u[ i ][ j ] = 1.0;

} else {

u[ i ][ j ] = 0.0;

}

}

}

}

//矩阵乘法

void matrixMultiply( double ma[ n ][ n ], double mb[ n ][ n ], double mc[ n ][ n ] ) {

double res[ n ][ n ];

int i, j, k;

for( i = 0; i < n; i++ ) {

for( j = 0; j < n; j++ ) {

res[ i ][ j ] = 0.0;

for( k = 0; k < n; k++ ) {

res[ i ][ j ] += ma[ i ][ k ] * mb[ k ][ j ];

}

}

}

for( i = 0; i < n; i++ ) {

for( j = 0; j < n; j++ ) {

mc[ i ][ j ] = res[ i ][ j ];

}

}

}

//得到转置矩阵

void getTransposedMatrix( double sMatrix[ n ][ n ], double dMatrix[ n ][ n ] ) {

for( int i = 0; i < n; i++ ) {

for( int j = 0; j < n; j++ ) {

dMatrix[ i ][ j ] = sMatrix[ j ][ i ];

}

}

}

//拟上三角化

void triangulation() {

int i, j , k;

double s[ n ], u[ n ], e[ n ], h[ n ][ n ];

double sum, c;

for( i = 0; i < n - 2; i++ ) {

for( j = 0; j < n; j++ ) {

if( j > i ) {

s[ j ] = a[ j ][ i ];

} else {

s[ j ] = 0;

}

}

sum = 0.0;

for( j = 0; j < n; j++ ) {

sum += s[ j ] * s[ j ];

}

c = a[ i + 1 ][ i ] > 0 ? -sqrt( sum ) : sqrt( sum );

memset( e, 0, sizeof( e ) );

e[ i + 1 ] = 1;

sum = 0.0;

for( j = 0; j < n; j++ ) {

u[ j ] = s[ j ] - c * e[ j ];

sum += u[ j ] * u[ j ];

}

if( fabs( sum ) > precision ) {

for( j = 0; j < n; j++ ) {

for( k = 0; k < n; k++ ) {

if( j == k ) {

h[ j ][ k ] = 1.0 - 2.0 *u[ j ] * u[ k ] / sum ;

} else {

h[ j ][ k ] = - 2.0 * u[ j ] * u[ k ] / sum;

}

}

}

} else {

setUnitMatrix( h );

}

matrixMultiply( h, a, a );

matrixMultiply( a, h, a );

}

}

//QR 分解

void qrDecomposition( double aMatrix[ n ][ n ], double qMatrix[ n ][ n ], double rMatrix[ n ][ n ] ) {

int i, j , k;

double s[ n ], u[ n ], e[ n ], h[ n ][ n ];

double sum, c;

setUnitMatrix( qMatrix );

for( i = 0; i < n - 1; i++ ) {

for( j = 0; j < n; j++ ) {

if( j >= i ) {

s[ j ] = aMatrix[ j ][ i ];

} else {

s[ j ] = 0;

}

}

sum = 0.0;

for( j = 0; j < n; j++ ) {

sum += s[ j ] * s[ j ];

}

c = aMatrix[ i ][ i ] > 0 ? -sqrt( sum ) : sqrt( sum );

for( j = 0; j < n; j++ ) {

e[ j ] = 0.0;

}

e[ i ] = 1;

sum = 0.0;

for( j = 0; j < n; j++ ) {

u[ j ] = s[ j ] - c * e[ j ];

sum += u[ j ] * u[ j ];

}

if( fabs( sum ) > precision ) {

for( j = 0; j < n; j++ ) {

for( k = 0; k < n; k++ ) {

if( j == k ) {

h[ j ][ k ] = 1 - 2.0 *u[ j ] * u[ k ] / sum ;

} else {

h[ j ][ k ] = - 2.0 * u[ j ] * u[ k ] / sum;

}

}

}

} else {

setUnitMatrix( h );

}

matrixMultiply( qMatrix, h, qMatrix );

matrixMultiply( h, aMatrix, aMatrix );

}

for( i = 0; i < n; i++ ) {

for( j = 0; j < n; j++ ) {

rMatrix[ i ][ j ] = aMatrix[ i ][ j ];

}

}

}

//解二元一次方程组

void getEigenvalue( int m, Eigenvalue &ea , Eigenvalue &eb ) {

double A = 1.0, B = -( a[ m - 1 ][ m - 1 ] + a[ m ][ m ] ),

C = a[ m - 1 ][ m - 1 ] * a[ m ][ m ] - a[ m ][ m - 1 ] * a[ m - 1 ][ m ];

double delta = B * B - 4 * A * C;

if( fabs( delta ) < precision ) {

ea.r = -B / ( 2 * A );

ea.i = 0.0;

eb.r = -B / ( 2 * A );

eb.i = 0.0;

} else {

if( delta > 0 ) {

ea.r = ( -B + sqrt( delta ) ) / ( 2.0 * A );

ea.i = 0.0;

eb.r = ( -B - sqrt( delta ) ) / ( 2.0 * A );

eb.i = 0.0;

} else {

ea.r = -B / ( 2.0 * A );

ea.i = sqrt( -delta ) / ( 2.0 * A );

eb.r = -B / ( 2.0 * A );

eb.i = -sqrt( -delta ) / ( 2.0 * A );

}

}

}

//带双步位移的QR方法

void qrAlgorithm() {

double mMatrix[ n ][ n ], qMatrix[ n ][ n ], rMatrix[ n ][ n ], tMatrix[ n ][ n ];

double dMatrix[ 2 ][ 2 ];

double s, t;

int i, j, k;

int m = n - 1;

while( true ) {

if( m < 0 ) {

break;

}

if( m == 0 ) {

eigenvalue[ m ].r = a[ m ][ m ];

eigenvalue[ m ].i = 0.0;

break;

}

if( fabs( a[ m ][ m - 1 ] ) < precision ) {

eigenvalue[ m ].r = a[ m ][ m ];

eigenvalue[ m ].i = 0.0;

m -= 1;

continue;

}

if( m == 1 ) {

getEigenvalue( m, eigenvalue[ m-1 ], eigenvalue[ m ] );

break;

}

if( fabs( a[ m - 1 ][ m - 2 ] ) < precision ) {

getEigenvalue( m, eigenvalue[ m-1 ], eigenvalue[ m ] );

m -= 2;

continue;

}

s = a[ m - 1 ][ m - 1 ] + a[ m ][ m ];

t = a[ m - 1 ][ m - 1 ] * a[ m ][ m ]

- a[ m ][ m - 1 ] * a[ m - 1 ][ m ];

for( i = 0; i < n; i++ ) {

for( j = 0; j < n; j++ ) {

mMatrix[ i ][ j ] = 0.0;

for( k = 0; k < n; k++ ) {

mMatrix[ i ][ j ] += a[ i ][ k ] * a[ k ][ j ];

}

}

}

for( i = 0; i < n; i++ ) {

for( j = 0; j < n; j++ ) {

mMatrix[ i ][ j ] -= s * a[ i ][ j ];

}

}

for( i = 0; i < m; i++ ) {

mMatrix[ i ][ i ] += t;

}

qrDecomposition( mMatrix, qMatrix, rMatrix );

getTransposedMatrix( qMatrix, tMatrix );

matrixMultiply( tMatrix, a, a );

matrixMultiply( a, qMatrix, a );

}

}

//高斯消元法

template< int n >

bool gaussianElimination( double (&a)[ n ][ n ], double (&x)[ n ], double (&b)[ n ] ) {

int i, j, k, maxline;

double maxUnit, m;

for( i = 0; i < n; i++ ) {

maxUnit = fabs( a[ i ][ i ] ), maxline = i;

for( j = i + 1; j < n; j++ ){

if( fabs( a[ j ][ i ] ) > maxUnit ) {

maxUnit = fabs( a[ j ][ i ] );

maxline = j;

}

}

for( j = 0; j < n; j++ ) {

swap( a[ maxline ][ j ], a[ i ][ j ] );

}

swap( b[ maxline ], b[ i ] );

if( fabs( a[ i ][ i ] ) < precision ) {

continue;

}

for( j = i + 1; j < n; j++ ) {

m = a[ j ][ i ] / a[ i ][ i ];

for( k = i; k < n; k++ ) {

a[ j ][ k ] -= m * a[ i ][ k ];

}

b[ j ] -= m * b[ i ];

}

}

bool flag = false;

double solution[ 10 ][ 10 ];

for( i = 0; i < n; i++ ) {

for( j = 0; j < n; j++ ) {

solution[ i ][ j ] = 0.0;

}

}

for( i = 0; i < n; i++ ) {

if( fabs( a[ i ][ i ] ) < precision ) {

flag = true;

solution[ i ][ i ] = 1;

}

}

for( i = n - 1; i >= 0; i-- ) {

if( fabs( a[ i ][ i ] ) > precision ) {

for( j = 0; j < n; j++ ) {

for( k = i + 1; k < n; k++ ) {

solution[ i ][ j ] -= a[ i ][ j ] * solution[ k ][ j ];

}

}

for( j = 0; j < n; j++ ) {

solution[ i ][ j ] /= a[ i ][ i ];

}

}

}

for( i = 0; i < n; i++ ) {

flag = false;

for( j = 0; j < n; j++ ) {

if( fabs( solution[ j ][ i ] ) > precision ) {

flag = true;

}

}

if( flag == true ) {

fprintf( file, "[ " );

for( j = 0; j < n; j++ ) {

fprintf( file, "%0.12e , ", solution[ j ][ i ] );

}

fprintf( file, "] * x%d\n", i );

}

}

return true;

}

int main() {

double c[ 10 ][ 10 ], b[ 10 ], x[ 10 ], tmp[ 10 ][ 10 ];

file = fopen( "second.txt", "w" );

getMatrix();

for( int i = 0; i < n; i++ ) {

for( int j = 0; j < n; j++ ) {

tmp[ i ][ j ] = a[ i ][ j ];

}

}

triangulation();

for( int i = 0; i < n; i++ ) {

for( int j = 0; j < n; j++ ) {

fprintf( file, "%0.12e ", a[ i ][ j ] );

}

fprintf( file, "\n" );

}

qrAlgorithm();

for( int i = 0; i < n; i++ ) {

fprintf( file, "%d %0.12e %0.12e\n", i, eigenvalue[ i ].r, eigenvalue[ i ].i );

if( fabs( eigenvalue[ i ].i ) < precision ) {

for( int j = 0; j < n; j++ ) {

b[ j ] = 0;

for( int k = 0; k < n; k++ ) {

if( j == k ) {

c[ j ][ k ] = tmp[ j ][ k ] - eigenvalue[ i ].r;

} else {

c[ j ][ k ] = tmp[ j ][ k ];

}

}

}

gaussianElimination< 10 >( c, x, b );

}

}

fflush( file );

fclose( file );

return 0;

}

拟上三角化后得到的矩阵A

1 5 1.549101079914e-001 1 6 -1.946591862872e+000 1 7 -8.782436382927e-00

2 1 8 -9.255889387184e-001

1 9 6.032599440534e-001 1 10 1.518860956469e-001

2 1 -2.347878362416e+000 2 2 2.372370104937e+000 2

3 1.819290822208e+000 2

4 3.237804101546e-001 2

5 2.205798440320e-001 2

6 2.102692662546e+000 2

7 1.816138086098e-001 2

8 1.278839089990e+000

2 9 -6.380578124405e-001 2 10 -4.154075603804e-001

3 1 -2.409448106601e-016 3 2 1.728274599968e+000 3 3 -1.171467642785e+000 3

4 -1.243839262699e+000 3

5 -6.399758341743e-001 3

6 -2.002833079037e+000 3

7 2.924947206124e-001 3

8 -6.412830068395e-001

3 9 9.783997621285e-002 3 10 2.557763574160e-001

4 1 -1.137050343952e-016 4 2 6.849619556674e-018 4 3 -1.291669534130e+000 4 4 -1.111603513396e+000 4

5 1.171346824096e+000 4

6 -1.307356030021e+000 4

7 1.803699177750e-001 4

8 -4.246385358369e-001

4 9 7.988955239304e-002 4 10 1.608819928069e-001

5 1 -3.218079046866e-017 5 2 7.361962688705e-017 5 3 -9.111415398526e-017 5 4 1.560126298527e+000 5 5 8.125049397515e-001 5

6 4.421756832923e-001 5

7 -3.588616128137e-002 5

8 4.691742313671e-001

5 9 -2.736595050092e-001 5 10 -7.359334657750e-002

6 1 1.645514213628e-016 6 2 3.986588458133e-01

7 6 3 1.795101023347e-016 6 4 1.162374785919e-017 6 5 -7.707773755194e-001 6 6 -1.583051425742e+000 6 7 -3.042843176799e-001 6

8 2.528712446035e-001

6 9 -6.709925401449e-001 6 10 2.544619929082e-001

7 1 1.771418473192e-016 7 2 -2.213674804097e-016 7 3 -3.644564058372e-017 7 4 6.835111609609e-017 7 5 1.748248360870e-017 7 6 -7.463453456938e-001 7 7 -2.708365157019e-002 7 8 -9.486521893682e-001

7 9 1.195871081495e-001 7 10 1.929265617952e-002

8 1 3.004355963132e-016 8 2 1.263510892920e-016 8 3 -2.122437351083e-016 8 4 -1.393244144293e-017 8 5 1.103277909913e-017 8 6 7.956540121416e-017 8 7 -7.701801374364e-001 8 8 -4.697623990618e-001 8 9 4.988259468008e-001 8 10 1.137691603776e-001

9 5 -1.679690935074e-017 9 6 6.936176716053e-018 9 7 -7.498270272400e-017 9 8 7.013167092107e-001

9 9 1.582180688475e-001 9 10 3.862594614233e-001

10 1 1.166891323731e-016 10 2 -1.182725878649e-016 10 3 -2.943370580897e-017 10 4 1.609893155796e-016 10 5 5.0908********e-017 10 6 -9.377222276666e-019 10 7 -4.613183027682e-017 10 8 0.000000000000e+000 10 9 4.843807602783e-001 10 10 3.992777995177e-001 QR分解方法后得到的矩阵

1 3 -1.0835********e+000 1 4 -8.466149434806e-00

2 1 5 2.612724951410e-001 1 6 -1.0372********e+000 1 7 1.601955828153e+000 1 8 1.204278823958e-001

1 9 1.014804983176e+000 1 10 4.960407023480e-001

2 1 -2.910244719154e-020 2 2 -2.607230325699e+000 2

3 2.342162457137e+000 2

4 6.0881********e-002 2

5 4.982796671050e-002 2

6 1.990753512493e+000 2

7 -1.0993********e+000 2

8 1.667218318714e-001

2 9 -1.893430300111e+000 2 10 -9.618234274457e-001

3 1 -7.239072923059e-021 3 2 -3.748785281332e-001 3 3 -2.039762094724e+000 3

4 6.355514251060e-001 3

5 1.295757273877e-002 3

6 -1.228105975101e+000 3

7 2.939582953174e-001 3

8 -2.703389028865e-001

3 9 8.759420577424e-001 3 10 6.887037680994e-002

4 1 -4.956319424587e-022 4 2 1.697858876186e-012 4 3 -5.868046856648e-013 4 4 1.577548559723e+000 4

5 1.396154902502e-002 4

6 -5.683586669215e-001 4

7 4.324633432180e-001 4

8 -2.0376********e-002

4 9 5.122305756965e-001 4 10 2.736674654195e-001

5 1 9.296461122248e-029 5 2 -3.188315445277e-019 5 3 1.107706655675e-019 5 4 -5.724228551970e-007 5 5 -1.484039824869e+000 5

6 7.208773358910e-002 5

7 -7.942613126537e-002 5

8 -7.985487831331e-003

5 9 -3.384477335678e-002 5 10 -4.414179642373e-002

6 1 2.773836628398e-030 6 2 -1.280643245291e-020 6 3 9.519575558055e-021 6 4 7.313838064850e-018 6 5 1.175778294417e-019 6 6 -9.272351359411e-001 6

7 -6.846334354260e-001 6

8 -2.175327429496e-001

6 9 -2.433999342340e-001 6 10 -4.296654261792e-001

7 1 2.421176050913e-030 7 2 -1.070413382049e-020 7 3 7.0434********e-021 7 4 3.274954414022e-018

7 9 -3.654673010054e-001 7 10 -8.923018276994e-002

8 1 -9.423424275349e-030 8 2 4.144194657899e-020

8 3 -2.687848528422e-020 8 4 -1.245736700019e-017

8 5 -5.085013679545e-019 8 6 -1.825709393012e-010

8 7 4.426935739629e-010 8 8 9.355889077604e-001

8 9 -1.876929916381e-001 8 10 -1.360314863118e-001

9 1 -1.504471484290e-029 9 2 6.615591745028e-020

9 3 -4.290541157588e-020 9 4 -1.989442023600e-017

9 5 -8.118899381244e-019 9 6 -2.927314845537e-010

9 7 7.096068621591e-010 9 8 -9.364060635126e-011

9 9 6.360627876959e-001 9 10 2.736788651917e-001

10 1 9.853*********e-035 10 2 -5.218295742846e-025

10 3 4.557627389873e-025 10 4 1.618363931390e-024

10 5 4.754782347687e-026 10 6 8.662762125027e-022

10 7 -2.181749650711e-021 10 8 2.704236690829e-022

10 9 -5.021*********e-017 10 10 5.650488993501e-002

矩阵A的全部特征值

i R i I i

1 3.383039617436e+000 0.000000000000e+000

2 -2.323496210212e+000 8.930405177196e-001

3 -2.323496210212e+000 -8.930405177196e-001

4 1.577548557113e+000 0.000000000000e+000

5 -1.484039822259e+000 0.000000000000e+000

6 -9.805309558452e-001 1.139489139816e-001

7 -9.805309558452e-001 -1.139489139816e-001

8 9.355889078188e-001 0.000000000000e+000

9 6.360627875745e-001 0.000000000000e+000

10 5.650488993501e-002 0.000000000000e+000

A对应于实特征值的特征向量

特征值

3.383039617436e+000

特征向量

[9.341125354959e-002, 4.588937965171e-002,-2.848602176617e-001,-1.886888818870e-001,-4.151083573896e-001,-1.0566********e+000,-2.092946076294e-001,-3.382459206639e-001,2.112744711308e+000,1.000000000000e+000 ] * k

特征值

1.577548557113e+000

特征向量

[ 1.330828410099e-001,9.539313258429e-002,-6.895086168504e-002,-1.098489268768e-001,

-7.262385350932e-001,8.128585072450e-001,-5.029*********e-001,-2.645069269260e+000,2.691900144837e+000,1.000000000000e+000 ] * k

特征值

-1.484039822259e+000

特征向量

[ 4.527745024629e-001,2.643974559425e+000,7.316504283957e-018,-1.283651114250e+000,-6.503911874248e-017,2.701007280510e-002,7.794881561124e-002, 1.779597247589e-002 ,-3.784865409366e-001 ,1.000000000000e+000 ] * k

特征值

9.355889078188e-001

特征向量

[ -3.0818********e+000,8.215073101500e-001,2.794100354293e+000,3.475832923839e+000 ,1.377343418824e+002 ,-6.299464683846e+001, 5.065187695398e+001,-1.306814887219e+002 ,-1.216518754415e+001 ,1.000000000000e+000 ] * k

特征值

5.650488993501e-002

特征向量

[ -9.602556538884e-002,1.350877117971e-001,4.167727133718e-001,4.229717414823e-001,7.286706659033e-001,-5.820838127449e-00, 6.0992********e+000,-1.557354548877e+000,-7.109654943654e+000,1.000000000000e+000 ] * k

北航数值分析大作业一

《数值分析B》大作业一 SY1103120 朱舜杰 一.算法设计方案: 1.矩阵A的存储与检索 将带状线性矩阵A[501][501]转存为一个矩阵MatrixC[5][501] . 由于C语言中数组角标都是从0开始的,所以在数组MatrixC[5][501]中检索A的带内元素a ij的方法是: A的带内元素a ij=C中的元素c i-j+2,j 2.求解λ1,λ501,λs ①首先分别使用幂法和反幂法迭代求出矩阵按摸最大和最小的特征值λmax和λmin。λmin即为λs; 如果λmax>0,则λ501=λmax;如果λmax<0,则λ1=λmax。 ②使用带原点平移的幂法(mifa()函数),令平移量p=λmax,求 出对应的按摸最大的特征值λ,max, 如果λmax>0,则λ1=λ,max+p;如果λmax<0,则λ501=λ,max+p。 3.求解A的与数μk=λ1+k(λ501-λ1)/40的最接近的特征值λik (k=1,2,…,39)。 使用带原点平移的反幂法,令平移量p=μk,即可求出与μk最接近的特征值λik。 4.求解A的(谱范数)条件数cond(A)2和行列式d etA。 ①cond(A)2=|λ1/λn|,其中λ1和λn分别是矩阵A的模最大和 最小特征值。

②矩阵A的行列式可先对矩阵A进行LU分解后,detA等于U所有对角线上元素的乘积。 二.源程序 #include #include #include #include #include #include #include #define E 1.0e-12 /*定义全局变量相对误差限*/ int max2(int a,int b) /*求两个整型数最大值的子程序*/ { if(a>b) return a; else return b; } int min2(int a,int b) /*求两个整型数最小值的子程序*/ { if(a>b) return b; else return a; } int max3(int a,int b,int c) /*求三整型数最大值的子程序*/ { int t; if(a>b) t=a; else t=b; if(t

数值分析作业答案

数值分析作业答案 插值法 1、当x=1,-1,2时,f(x)=0,-3,4,求f(x)的二次插值多项式。 (1)用单项式基底。 (2)用Lagrange插值基底。 (3)用Newton基底。 证明三种方法得到的多项式是相同的。 解:(1)用单项式基底 设多项式为: , 所以: 所以f(x)的二次插值多项式为: (2)用Lagrange插值基底 Lagrange插值多项式为: 所以f(x)的二次插值多项式为: (3) 用Newton基底: 均差表如下: xk f(xk) 一阶均差二阶均差 1 0 -1 -3 3/2 2 4 7/ 3 5/6 Newton插值多项式为: 所以f(x)的二次插值多项式为: 由以上计算可知,三种方法得到的多项式是相同的。 6、在上给出的等距节点函数表,若用二次插值求ex的近似值,要使截断误差不超过10-6,问使用函数表的步长h应取多少? 解:以xi-1,xi,xi+1为插值节点多项式的截断误差,则有 式中 令得 插值点个数

是奇数,故实际可采用的函数值表步长 8、,求及。 解:由均差的性质可知,均差与导数有如下关系: 所以有: 15、证明两点三次Hermite插值余项是 并由此求出分段三次Hermite插值的误差限。 证明:利用[xk,xk+1]上两点三次Hermite插值条件 知有二重零点xk和k+1。设 确定函数k(x): 当或xk+1时k(x)取任何有限值均可; 当时,,构造关于变量t的函数 显然有 在[xk,x][x,xk+1]上对g(x)使用Rolle定理,存在及使得 在,,上对使用Rolle定理,存在,和使得 再依次对和使用Rolle定理,知至少存在使得 而,将代入,得到 推导过程表明依赖于及x 综合以上过程有: 确定误差限: 记为f(x)在[a,b]上基于等距节点的分段三次Hermite插值函数。在区间[xk,xk+1]上有 而最值 进而得误差估计: 16、求一个次数不高于4次的多项式,使它满足,,。

北航数值分析大作业第一题幂法与反幂法

《数值分析》计算实习题目 第一题: 1. 算法设计方案 (1)1λ,501λ和s λ的值。 1)首先通过幂法求出按模最大的特征值λt1,然后根据λt1进行原点平移求出另一特征值λt2,比较两值大小,数值小的为所求最小特征值λ1,数值大的为是所求最大特征值λ501。 2)使用反幂法求λs ,其中需要解线性方程组。因为A 为带状线性方程组,此处采用LU 分解法解带状方程组。 (2)与140k λλμλ-5011=+k 最接近的特征值λik 。 通过带有原点平移的反幂法求出与数k μ最接近的特征值 λik 。 (3)2cond(A)和det A 。 1)1=n λλ2cond(A),其中1λ和n λ分别是按模最大和最小特征值。 2)利用步骤(1)中分解矩阵A 得出的LU 矩阵,L 为单位下三角阵,U 为上三角阵,其中U 矩阵的主对角线元素之积即为det A 。 由于A 的元素零元素较多,为节省储存量,将A 的元素存为6×501的数组中,程序中采用get_an_element()函数来从小数组中取出A 中的元素。 2.全部源程序 #include #include void init_a();//初始化A double get_an_element(int,int);//取A 中的元素函数 double powermethod(double);//原点平移的幂法 double inversepowermethod(double);//原点平移的反幂法 int presolve(double);//三角LU 分解 int solve(double [],double []);//解方程组 int max(int,int); int min(int,int); double (*u)[502]=new double[502][502];//上三角U 数组 double (*l)[502]=new double[502][502];//单位下三角L 数组 double a[6][502];//矩阵A int main() { int i,k; double lambdat1,lambdat2,lambda1,lambda501,lambdas,mu[40],det;

北航数值分析大作业第二题精解

目标:使用带双步位移的QR 分解法求矩阵10*10[]ij A a =的全部特征值,并对其中的每一个实特征值求相应的特征向量。已知:sin(0.50.2)() 1.5cos( 1.2)(){i j i j ij i j i j a +≠+== (i,j=1,2, (10) 算法: 以上是程序运作的逻辑,其中具体的函数的算法,大部分都是数值分析课本上的逻辑,在这里特别写出矩阵A 的实特征值对应的一个特征向量的求法: ()[]()() []()[]()111111I 00000 i n n n B A I gause i n Q A I u Bu u λλ-?-?-=-?-?? ?-=????→=??????→= ?? ? 选主元的消元 检查知无重特征值 由于=0i A I λ- ,因此在经过选主元的高斯消元以后,i A I λ- 即B 的最后一行必然为零,左上方变 为n-1阶单位矩阵[]()()11I n n -?-,右上方变为n-1阶向量[]()11n Q ?-,然后令n u 1=-,则 ()1,2,,1j j u Q j n ==???-。

这样即求出所有A所有实特征值对应的一个特征向量。 #include #include #include #define N 10 #define E 1.0e-12 #define MAX 10000 //以下是符号函数 double sgn(double a) { double z; if(a>E) z=1; else z=-1; return z; } //以下是矩阵的拟三角分解 void nishangsanjiaodiv(double A[N][N]) { int i,j,k; int m=0; double d,c,h,t; double u[N],p[N],q[N],w[N]; for(i=0;i

北航数值分析报告第三次大作业

数值分析第三次大作业 一、算法的设计方案: (一)、总体方案设计: x y当作已知量代入题目给定的非线性方程组,求(1)解非线性方程组。将给定的(,) i i

得与(,)i i x y 相对应的数组t[i][j],u[i][j]。 (2)分片二次代数插值。通过分片二次代数插值运算,得到与数组t[11][21],u[11][21]]对应的数组z[11][21],得到二元函数z=(,)i i f x y 。 (3)曲面拟合。利用x[i],y[j],z[11][21]建立二维函数表,再根据精度的要求选择适当k 值,并得到曲面拟合的系数矩阵C[r][s]。 (4)观察和(,)i i p x y 的逼近效果。观察逼近效果只需要重复上面(1)和(2)的过程,得到与新的插值节点(,)i i x y 对应的(,)i i f x y ,再与对应的(,)i i p x y 比较即可,这里求解 (,)i i p x y 可以直接使用(3)中的C[r][s]和k 。 (二)具体算法设计: (1)解非线性方程组 牛顿法解方程组()0F x =的解* x ,可采用如下算法: 1)在* x 附近选取(0) x D ∈,给定精度水平0ε>和最大迭代次数M 。 2)对于0,1, k M =执行 ① 计算() ()k F x 和()()k F x '。 ② 求解关于() k x ?的线性方程组 () ()()()()k k k F x x F x '?=- ③ 若() () k k x x ε∞∞ ?≤,则取*()k x x ≈,并停止计算;否则转④。 ④ 计算(1) ()()k k k x x x +=+?。 ⑤ 若k M <,则继续,否则,输出M 次迭代不成功的信息,并停止计算。 (2)分片双二次插值 给定已知数表以及需要插值的节点,进行分片二次插值的算法: 设已知数表中的点为: 00(0,1,,) (0,1,,)i j x x ih i n y y j j m τ=+=???=+=?? ,需要插值的节点为(,)x y 。 1) 根据(,)x y 选择插值节点(,)i j x y : 若12h x x ≤+ 或12 n h x x ->-,插值节点对应取1i =或1i n =-,

上海大学_王培康_数值分析大作业

数值分析大作业(2013年5月) 金洋洋(12721512),机自系 1.下列各数都是经过四舍五入得到的近似值,试分别指出它 们的绝对误差限, 相对误差限和有效数字的位数。 X1 =5.420, x 2 =0.5420, x 3=0.00542, x 4 =6000, x 5=50.610? 解:根据定义:如果*x 的绝对误差限 不超过x 的某个数位的半个单位,则从*x 的首位非零数字到该位都是有效数字。 显然根据四舍五入原则得到的近视值,全部都是有效数字。 因而在这里有:n1=4, n2=4, n3=3, n4=4, n5=1 (n 表示x 有效数字的位数) 对x1:有a1=5, m1=1 (其中a1表示x 的首位非零数字,m1表示x1的整数位数) 所以有绝对误差限 143 11 (1)101022 x ε--≤ ?=? 相对误差限 31() 0.510(1)0.00923%5.4201 r x x x εε-?= == 对x2:有a2=5, m2=0 所以有绝对误差限 044 11 (2)101022 x ε--≤ ?=? 相对误差限 42() 0.510(2)0.00923%0.54202 r x x x εε-?= == 对x3:有a3=5, m3=-2 所以有绝对误差限 235 11 (3)101022 x ε---≤ ?=? 相对误差限 53() 0.510(3)0.0923%0.005423 r x x x εε-?= == 对x4:有a4=0, m4=4 所以有绝对误差限 4411(4)1022 x ε-≤?= 相对误差限 4() 0.5 (4)0.0083%6000 4 r x x x εε= = = 对x5:有a5=6, m5=5 所以有绝对误差限 514 11(5)101022 x ε-≤ ?=? 相对误差限 45() 0.510(5)8.3%600005 r x x x εε?= ==

北航数值分析大作业第二题

数值分析第二次大作业 史立峰 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. 计算 () ∑+== n r i r ir r a d 1 2 )( ()( )r r r r r r r r r r d c a d a c ==-=++则取,0sgn ) (,1)(,1若 )(,12r r r r r r a c c h +-= 3. 令 () n T r nr r 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 T r r h u p t /= r r r r u t q -=ω T r r 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。

数值分析第二次大作业

《数值分析》计算实习报告 第二题 院系:机械工程及自动化学院 学号: 姓名: 2017年11月

一、题目要求 试求矩阵A =[a ij ]10×10的全部特征值,并对其中的每一个实特征值求相应的特征向量,已知 a ij ={ sin (0.5i +0.2j ) i ≠j 1.52cos (i +1.2j ) i =j (i,j =1,2, (10) 说明: 1.用带双步位移的QR 方法求矩阵特征值,要求迭代的精度水平为ε=10?12。 2.打印以下内容: (1)全部源程序; (2)矩阵A 经过拟上三角化后所得的矩阵A (n?1); (3)对矩阵A (n?1)实行QR 方法迭代结束后所得的矩阵; (4)矩阵A 的全部特征值λi =(R i ,I i ) (i =1,2,?,10),其中R i =Re(λi ),I i = Im(λi ) 。若λi 是实数,则令I i =0; (5)A 的相应于实特征值的特征向量。 3.采用e 型数输出实型数,并且至少显示12位有效数字。 二、算法设计思路和方案 1. 将矩阵A 拟上三角化得到矩阵A (n?1) 为了减少计算量,一般先利用Householder 矩阵对矩阵A 作相似变换,把A 化为拟上三角矩阵A (n?1),然后用QR 方法计算A (n?1)的全部特征值,而A (n?1)的特征值就是A 的特征值。具体算法如下: 记(1)A A =,()r A 的第r 列至第n 列的元素为(r)(1,2, ,;,1,,)ij a i n j r r n ==+。 对于1,2,,2r n =-执行 (1)若() (2,3,,)r ir a i r r n =++全为零,则令(1)()r r A A +=,转(5);否则转(2)。

北航数值分析第二次大作业--QR分解

《数值分析A》

一、算法设计方案 整个程序主要分为四个函数,主函数,拟上三角化函数,QR分解函数以及使用双步位移求解矩阵特征值、特征向量的函数。因为在最后一个函数中也存在QR分解,所以我没有采用参考书上把矩阵M进行的QR分解与矩阵Ak的迭代合并的方法,而是在该函数中调用了QR分解函数,这样增强了代码的复用性,减少了程序长度;但由于时间关系,对阵中方法的运算速度没有进行深入研究。 1.为了减少QR分解法应用时的迭代次数,首先对给定矩阵进行拟上三角化处理。 2.对经过拟上三角化处理的矩阵进行QR分解。 3.注意到计算特征值与特征向量的过程首先要应用前面两个函数,于是在拟上三角化矩阵的基础上对QR分解函数进行了调用。计算过程中,没有采用goto语句,而是根据流程图采用其他循环方式完成了设计,通过对迭代过程的合并,简化了程序的循环次数,最后在计算特征向量的时候采用了列主元高斯消去法。

二、源程序代码 #include #include #include 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];

北航数值分析报告大作业第八题

北京航空航天大学 数值分析大作业八 学院名称自动化 专业方向控制工程 学号 学生姓名许阳 教师孙玉泉 日期2014 年11月26 日

一.题目 关于x , y , t , u , v , w 的方程组(A.3) ???? ?? ?=-+++=-+++=-+++=-+++79 .0sin 5.074.3cos 5.007.1cos sin 5.067.2cos 5.0y w v u t x w v u t y w v u t x w v u t (A.3) 以及关于z , t , u 的二维数表(见表A-1)确定了一个二元函数z =f (x , y )。 表A-1 二维数表 t z u 0 0.4 0.8 1.2 1.6 2 0 -0.5 -0.34 0.14 0.94 2.06 3.5 0.2 -0.42 -0.5 -0.26 0.3 1.18 2.38 0.4 -0.18 -0.5 -0.5 -0.18 0.46 1.42 0.6 0.22 -0.34 -0.58 -0.5 -0.1 0.62 0.8 0.78 -0.02 -0.5 -0.66 -0.5 -0.02 1.0 1.5 0.46 -0.26 -0.66 -0.74 -0.5 1. 试用数值方法求出f (x , y ) 在区域}5.15.0,8.00|), {≤≤≤≤=y x y x D (上的近似表达式 ∑∑===k i k j s r rs y x c y x p 00 ),( 要求p (x , y )以最小的k 值达到以下的精度 ∑∑==-≤-=10020 7210)],(),([i j i i i i y x p y x f σ 其中j y i x i i 05.05.0,08.0+==。 2. 计算),(),,(* ***j i j i y x p y x f (i =1,2,…,8 ; j =1,2,…,5) 的值,以观察p (x , y ) 逼 近f (x , y )的效果,其中j y i x j i 2.05.0,1.0**+==。

北航数值分析计算实习报告一

航空航天大学 《数值分析》计算实习报告 第一大题 学院:自动化科学与电气工程学院 专业:控制科学与工程 学生姓名: 学号: 教师: 电话: 完成日期: 2015年11月6日 航空航天大学 Beijing University of Aeronautics and Astronautics

实习题目: 第一题 设有501501?的实对称矩阵A , ??? ???? ?????????=5011A a b c b c c b c b a 其中,064.0,16.0),501,,2,1(64.0)2.0sin()024.064.1(1 .0-==???=--=c b i e i i a i i 。矩阵A 的特征值为)501,,2,1(???=i i λ,并且有 ||min ||,501 150121i i s λλλλλ≤≤=≤???≤≤ 1.求1λ,501λ和s λ的值。 2.求A 的与数40 1 5011λλλμ-+=k k 最接近的特征值)39,,2,1(???=k k i λ。 3.求A 的(谱数)条件数2)A (cond 和行列式detA 。 说明: 1.在所用的算法中,凡是要给出精度水平ε的,都取12-10=ε。 2.选择算法时,应使矩阵A 的所有零元素都不储存。 3.打印以下容: (1)全部源程序; (2)特征值),,39,...,2,1(,s 5011=k k i λλλλ以及A det ,)A (cond 2的值。 4.采用e 型输出实型数,并且至少显示12位有效数字。

一、算法设计方案 1、求1λ,501λ和s λ的值。 由于||min ||,501 150121i i s λλλλλ≤≤=≤???≤≤,可知绝对值最大特征值必为1λ和501 λ其中之一,故可用幂法求出绝对值最大的特征值λ,如果λ=0,则1λ=λ,否则 501λ=λ。将矩阵A 进行一下平移: I -A A'λ= (1) 对'A 用幂法求出其绝对值最大的特征值'λ,则A 的另一端点特征值1λ或501λ为'λ+λ。 s λ为按模最小特征值,||min ||501 1i i s λλ≤≤=,可对A 使用反幂法求得。 2、求A 的与数40 1 5011λλλμ-+=k k 最接近的特征值)39,...,2,1(=k k i λ。 计算1)1,2,...,50=(i i λ-k μ,其模值最小的值对应的特征值k λ与k μ最接近。因此对A 进行平移变换: )39,,2,1k -A A k k ==(I μ (2) 对k A 用反幂法求得其模最小的特征值'k λ,则k λ='k λ+k μ。 3、求A 的(谱数)条件数2)(A cond 和行列式detA 。 由矩阵A 为非奇异对称矩阵可得: | | )(min max 2λλ=A cond (3) 其中max λ为按模最大特征值,min λ为按模最小特征值,通过第一问我们求得的λ和s λ可以很容易求得A 的条件数。 在进行反幂法求解时,要对A 进行LU 分解得到。因L 为单位下三角阵,行 列式为1,U 为上三角阵,行列式为主对角线乘积,所以A 的行列式等于U 的行列式,为U 的主对角线的乘积。

数值分析大作业 三、四、五、六、七

大作业 三 1. 给定初值0x 及容许误差 ,编制牛顿法解方程f (x )=0的通用 程序. 解:Matlab 程序如下: 函数m 文件:fu.m function Fu=fu(x) Fu=x^3/3-x; end 函数m 文件:dfu.m function Fu=dfu(x) Fu=x^2-1; end 用Newton 法求根的通用程序Newton.m clear; x0=input('请输入初值x0:'); ep=input('请输入容许误差:'); flag=1; while flag==1 x1=x0-fu(x0)/dfu(x0); if abs(x1-x0)

while flag1==1 && m<=10^3 x1=x0-fu(x0)/dfu(x0); if abs(x1-x0)=ep flag=0; end end fprintf('最大的sigma 值为:%f\n',sigma); 2.求下列方程的非零根 5130.6651()ln 05130.665114000.0918 x x f x x +?? =- = ?-???解:Matlab 程序为: (1)主程序 clear clc format long x0=765; N=100; errorlim=10^(-5); x=x0-f(x0)/subs(df(),x0); n=1; while nerrorlim n=n+1; else break ; end x0=x; end disp(['迭代次数: n=',num2str(n)]) disp(['所求非零根: 正根x1=',num2str(x),' 负根x2=',num2str(-x)]) (2)子函数 非线性函数f function y=f(x) y=log((513+0.6651*x)/(513-0.6651*x))-x/(1400*0.0918); end

北航数值分析课程第一次大作业讲解

《数值分析A》计算实习题目第一题 一.算法设计方案: 1.矩阵A的存储与检索 将带状线性矩阵A[501][501]转存为一个矩阵MatrixC[5][501] . 由于C语言中数组角标都是从0开始的,所以在数组MatrixC[5][501]中检索A的带内元素a ij的方法是: A的带内元素a ij=C中的元素c i-j+2,j 2.求解λ1,λ501,λs ①首先分别使用幂法和反幂法迭代求出矩阵按摸最大和最小的特征值λmax和λmin。λmin即为λs; 如果λmax>0,则λ501=λmax;如果λmax<0,则λ1=λmax。 ②使用带原点平移的幂法(mifa()函数),令平移量p=λmax,求出对应的按摸最大的特征值λ,max, 如果λmax>0,则λ1=λ,max+p;如果λmax<0,则λ501=λ,max+p。 3.求解A的与数μk=λ1+k(λ501-λ1)/40的最接近的特征值λik (k=1,2,…,39)。 使用带原点平移的反幂法,令平移量p=μk,即可求出与μk最接近的特征值λik。 4.求解A的(谱范数)条件数cond(A)2和行列式d etA。 ①cond(A)2=|λ1/λn|,其中λ1和λn分别是矩阵A的模最大和最小特征值。 ②矩阵A的行列式可先对矩阵A进行LU分解后,detA等于U所有

对角线上元素的乘积。 二.源程序(VS2010环境下,C++语言) #include #include #include #include #include #include #include #define E 1.0e-12 /*定义全局变量相对误差限*/ int max2(int a,int b) /*求两个整型数最大值的子程序*/ { if(a>b) return a; else return b; } int min2(int a,int b) /*求两个整型数最小值的子程序*/ { if(a>b) return b; else return a; } int max3(int a,int b,int c) /*求三整型数最大值的子程序*/ { int t; if(a>b) t=a; else t=b; if(t

北航数值分析大作业第二次

《数值分析》计算实习作业 (第二题)

算法设计方案: 1、对矩阵A 赋值,取计算精度ε=1×10-12; 2、对矩阵A 进行拟上三角化,得到A (n-1),并输出A (n-1); 对矩阵A 的拟上三角化,通过直接调用子函数inftrianglize(A)来实现;拟上三角化得到的矩阵A (n-1)输出至文件solution.txt 中。 3、对A (n-1)进行QR 分解并输出Q 、R 及RQ 矩阵; QR 分解通过直接调用子函数QRdescom(A,Q,R, n)实现。 4、运用QR 方法求所有的特征值,并输出; (1)初始时令m=n ,在m>2的条件下执行; (2)判断如果|A mm-1|<ε,则得到一个特征值,m=m-1,转(4);否则转(3); (3)判断如果|A m-1m-2|<ε,则得到两个特征值,m=m-2,转(4); (4)判断如果m ≤2,转(6);否则转(5); (5)执行相似迭代,转(2); k k T k k k k k k k k k k Q A Q A R Q M I D A D tr A M ==+-=+1)2)det(( (6)求出最后的一个或两个特征值; (7)输出全部的特征值至文件solution.txt 中。 5、输出QR 分解法迭代结束之后的A (n-1)至文件solution.txt 中; 6、通过反幂法求出所有实特征值的特征向量并输出。 首先令B=(A-λi I),其中λi 是实特征值;反幂法通过调用子函数Bpowmethod(B,x1)实现,最终λi 对应的特征向量就是x1;最后将所有的实特征值的特征向量输出。

数值分析作业答案.doc

第2章 插值法 1、当x=1,-1,2时,f(x)=0,-3,4,求f(x)的二次插值多项式。 (1)用单项式基底。 (2)用Lagrange 插值基底。 (3)用Newton 基底。 证明三种方法得到的多项式是相同的。 解:(1)用单项式基底 设多项式为:2 210)(x a x a a x P ++=, 所以:64 211111 1111122 2 211 200 -=-==x x x x x x A 3 76144 211111114241 13110111)() ()(22 221120 022 2 22 11 120 00-=-= ---==x x x x x x x x x f x x x f x x x f a 2 3694211111114411 31101111)(1)(1 )(122 221120 02 2 22112 001=--= --==x x x x x x x x f x x f x x f a 6 5654 2 1 1111114 2 1 3 11011111) (1)(1)(122 2 21120 022 11 00 2=--= ---==x x x x x x x f x x f x x f x a 所以f(x)的二次插值多项式为:26 52337)(x x x P ++-= (2)用Lagrange 插值基底 )21)(11() 2)(1())(())(()(2010210-+-+=----=x x x x x x x x x x x l )21)(11() 2)(1())(())(()(2101201------=----=x x x x x x x x x x x l ) 12)(12() 1)(1())(())(()(1202102+-+-=----= x x x x x x x x x x x l

北航数值分析大作业3

一、算法设计方案 1.使用牛顿迭代法,对原题中给出的i x i 08.0=,j y j 05.05.0+=, (010 ,020i j ≤≤≤≤)的11*21组j i y x ,分别求出原题中方程组的一组解,于是得到一组和i i y x ,对应的j i t u ,。 2.对于已求出的j i t u ,,使用分片二次代数插值法对原题中关于u t z ,,的数表进行插值得到 ij z 。于是产生了z=f(x,y)的11*21个数值解。 3.从k=1开始逐渐增大k 的值,并使用最小二乘法曲面拟合法对z=f(x,y)进行拟合,得到每次的σ,k 。当7 10-<σ时结束计算,输出拟合结果。 4.计算)5,,2,1,8,,2,1)(,(),,(* ***???=???=j i y x p y x f j i j i 的值并输出结果,以观察),(y x p 逼近),(y x f 的效果。其中j y i x j i 2.05.0,1.0* *+==。 二、算法实现方案 1、求(,)f x y : (1)Newton 法解非线性方程组 0.5cos 2.670.5sin 1.07(1)0.5cos 3.740.5sin 0.79 t u v w x t u v w y t u v w x t u v w y +++-=??+++-=? ? +++-=??+++-=?, 其中,t, u, v ,w 为待求的未知量,x, y 为代入的已知量。 设(,,,)T t u v w ξ=,给定精度水平12110ε-=和最大迭代次数M ,则解该线性方程组的迭代格式为: *(0)(0)(0)(0)(0)(k+1) ()()1()(,,,)()()0,1,T k k k t u v w F F k ξξξ ξξξ-?=?'=-??= ? 在附近选取初值, 迭代终止条件为()(1) () 1/k k k ξξ ξε-∞ ∞ -≤,若k M >时仍未达到迭代精度,则迭代计算失 败。 其中,雅可比矩阵 0.5*cos(t) + u + v + w - x - 2.67t + 0.5*sin(u) + v + w - y - 1.07()0.5*t + u + cos(v) + w - x - 3.74t + 0.5*u + v + sin(w) - y - 0.79F ξ???? ? ?=?????? ,

北航数值分析计算实习报告一

北航数值分析计算实习 报告一 Company number:【0089WT-8898YT-W8CCB-BUUT-202108】

北京航空航天大学 《数值分析》计算实习报告 第一大题 学 院:自动化科学与电气工程学院 专 业: 控制科学与工程 学 生 姓 名: 学 号: 教 师: 电 话: 完 成 日 期: 2015年11月6日 北京航空航天大学 Beijing University of Aeronautics and Astronautics 实习题目: 第一题 设有501501?的实对称矩阵A , 其中,064.0,16.0),501,,2,1(64.0)2.0sin()024.064.1(1.0-==???=--=c b i e i i a i i 。矩阵A 的特征值为)501,,2,1(???=i i λ,并且有 1.求1λ,501λ和s λ的值。 2.求A 的与数40 1 5011λλλμ-+=k k 最接近的特征值)39,,2,1(???=k k i λ。 3.求A 的(谱范数)条件数2)A (cond 和行列式detA 。

说明: 1.在所用的算法中,凡是要给出精度水平ε的,都取12-10=ε。 2.选择算法时,应使矩阵A 的所有零元素都不储存。 3.打印以下内容: (1)全部源程序; (2)特征值),,39,...,2,1(,s 5011=k k i λλλλ以及A det ,)A (cond 2的值。 4.采用e 型输出实型数,并且至少显示12位有效数字。 一、算法设计方案 1、求1λ,501λ和s λ的值。 由于||min ||,501 150121i i s λλλλλ≤≤=≤???≤≤,可知绝对值最大特征值必为1λ和501λ其中之 一,故可用幂法求出绝对值最大的特征值λ,如果λ=0,则1λ=λ,否则501λ=λ。将矩阵A 进行一下平移: I -A A'λ= (1) 对'A 用幂法求出其绝对值最大的特征值'λ,则A 的另一端点特征值1λ或501λ为 'λ+λ。 s λ为按模最小特征值,||min ||501 1i i s λλ≤≤=,可对A 使用反幂法求得。 2、求A 的与数40 1 5011λλλμ-+=k k 最接近的特征值)39,...,2,1(=k k i λ。 计算1)1,2,...,50=(i i λ-k μ,其模值最小的值对应的特征值k λ与k μ最接近。因此对A 进行平移变换: )39,,2,1k -A A k k ==(I μ (2) 对k A 用反幂法求得其模最小的特征值'k λ,则k λ='k λ+k μ。

BUAA数值分析大作业三

北京航空航天大学2020届研究生 《数值分析》实验作业 第九题 院系:xx学院 学号: 姓名: 2020年11月

Q9:方程组A.4 一、 算法设计方案 (一)总体思路 1.题目要求∑∑=== k i k j s r rs y x c y x p 00 ),(对f(x, y) 进行拟合,可选用乘积型最小二乘拟合。 ),(i i y x 与),(i i y x f 的数表由方程组与表A-1得到。 2.),(* * j i y x f 与1使用相同方法求得,),(* * j i y x p 由计算得出的p(x,y)直接带入),(* * j i y x 求得。

1. ),(i i y x 与),(i i y x f 的数表的获得 对区域D ={ (x,y)|1≤x ≤1.24,1.0≤y ≤1.16}上的f (x , y )值可通过xi=1+0.008i ,yj=1+0.008j ,得到),(i i y x 共31×21组。将每组带入A4方程组,即可获得五个二元函数组,通过简单牛顿迭代法求解这五个二元数组可获得z1~z5有关x,y 的表达式。再将 ),(i i y x 分别带入z1~z5表达式即可获得f(x,y)值。 2.乘积型最小二乘曲面拟合 2.1使用乘积型最小二乘拟合,根据k 值不用,有基函数矩阵如下: ????? ??=k i i k x x x x B 0000 , ????? ??=k j j k y y y y G 0000 数表矩阵如下: ???? ? ? ?=),(),(),(),(0000j i i j y x f y x f y x f y x f U 记C=[rs c ],则系数rs c 的表达式矩阵为: 11-)(-=G G UG B B B C T T T )( 通过求解如下线性方程,即可得到系数矩阵C 。 UG B G G C B B T T T =)()( 2.2计算),(),,(* ***j i j i y x p y x f (i =1,2,…,31 ; j =1,2,…,21) 的值 ),(**j i y x f 的计算与),(j i y x f 相同。将),(**j i y x 代入原方程组,求解响应) ,(* *ij ij u t 进行分片双二次插值求得),(**j i y x f 。),(* *j i y x p 的计算则可以直接将),(**j i y x 代入所求p(x,y)。 二、 源程序 ********* 第三次数值分析大作业Q9************ integer::i, j, K1, L1, n, m dimension X(31), Y(21), T(6), U(6), Z(6, 6), UX(11, 21), TY(11, 21), FXY(11, 21), C(6, 6) dimension z1(31, 21), z2(31, 21), z3(31, 21), z4(31, 21), z5(31, 21) dimension X1(8), Y1(5), FXY1(8, 5), PXY1(8, 5), UX1(8, 5), TY1(8, 5)

相关文档
最新文档