Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-07-17
年龄: 46
帖子: 1
声望力: 0 ![]() |
![]()
下面是两个程序都是执行追赶法求解三对角方程组,但是对同样的3X3矩阵,程序1用了3.8秒,程序2用了0.01秒,请教高手这个差别怎么会有如此大!
程序1 function x = trid( A, B ) % The function solves the tridiagonal system equation Ax = B with Thosmas % algorithm % The size of matrices A,B are supposed to be NA * NA and NA * NB NA = size( A, 2 ); [ NB1, NB ] = size( B ); if NB1 ~= NA error( 'A and B must have compatible dimensions' ); end N = NA + NB; AB = [ A( 1 : NA, 1 : NA ) B( 1 : NA, 1 : NB ) ]; % Augments matrix for k = 2 : NA AB( k - 1, k ) = AB( k - 1, k ) / AB( k - 1, k - 1 ); AB( k - 1, N ) = AB( k - 1, N ) / AB( k - 1, k - 1 ); AB( k - 1, k - 1 ) = 1; AB( k, k ) = AB( k, k ) - AB( k, k - 1 ) * AB( k - 1, k ); AB( k, N ) = AB( k, N ) - AB( k, k - 1 ) * AB( k - 1, N ); AB( k, k - 1 ) = 0; end x( NA, : ) = AB( NA, N ) / AB( NA, NA ); for m = NA - 1 : -1 : 1 x( m, : ) = ( AB( m, N ) - AB( m, m + 1 ) * x( m + 1, : ) ) / AB( m, m ); end 程序2 function x = trid( A, b ) % solve tridiagonal system of equations N = size( A, 2 ); for m = 2 : N % Upper Triangularization tmp = A( m, m - 1 ) / A( m - 1, m - 1 ); A( m, m ) = A( m, m ) -A( m - 1, m ) * tmp; A( m, m - 1 ) = 0; b( m, : ) = b( m, : ) -b( m - 1, : ) * tmp; end x( N, : ) = b( N, : ) / A( N, N ); for m = N - 1 : -1 : 1 % Back Substitution x( m, : ) = ( b( m, : ) -A( m, m + 1 ) * x( m + 1 ) ) / A( m, m ); end |
![]() |
![]() |
![]() |
#2 |
高级会员
注册日期: 2007-12-02
年龄: 44
帖子: 303
声望力: 31 ![]() ![]() ![]() ![]() |
![]()
速度不一样的原因可能是 第二程序中 多用到的是矩阵的乘法,所以运算速度快些,因为所要存储的空间是一定的,而第一个程序 每次存储的空间被多次覆盖,所以运算速度就慢了。
我一般些程序都喜欢用 矩阵的乘法,一来程序简约,二来,运算速度快很多 |
![]() |
![]() |