logo资料库

追赶法的MATLAB程序.doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
j j j j ,1 j ,3 ,2 j 1  j 1    ru ,0 ru  21  ru   ru ur  ,1 ,2 j   21 ur  u  ,1  u  ,2     u   u  4 解微分方程的追赶法和计算框图 由方程组(16)的第一个方程解出 ju ,1 得到  21   21   ur N  ur ru N ru ru ru     , jN ,1  ,1  ,1  1   ,3 j 1   ,2  ,2 N  ,2 j j j N N N N j j j u ,1 j  u 1 ,1 j  21 r   r 21  r u ,2 j 令 Z 1  ju ,1 g 1  u 1 ,1 j  21 r  w 1  r 21  r 得到: u  1 ,2 j Z 1 1 g    uwgr 1 juw ,21   ,2 1 j 代入第二个方程  21   ur ,2 j  ru ,3 j u ,2 j  u 1 ,2 j  21 r    rg 1 rw 1  r r  rw 1 u ,3 j 21  令 Z 2  ju ,2 g 2  u 1 ,2 j  21 r    rg 1 rw 1 w 2  r r  rw 1 21  得到: Z 2  g 2  juw 2 ,3 以此类推,令 Z i u , i j g i  u 1 , i j  21 r    1  rg i rw i 1  w i  21  r r  rw i 1  Ni 1 得到: Z i  g i  Zw i i 1 (17) 由 Z N  u ,  jN 0 得到: Z g   N 1 N 1  所以如果 1Ng 已经算出,那么解向量的最后一个分量 1NZ 就可以算出。为了求出 Z 的所有 分量,只要利用方程(17)就可以逐步求出 Z 2, Z  3 Z 1 N N  整个求解过程分成两步: 第一步:依次确定 wgwg 1 , , , 2 1  g 2 N  2 , w N  2 , g N 1  第二步:相反顺序确定 Z 1,  Z  2 Z 1 N N 归结如下: g 1  u 1 ,1 j  21 r  , g i  u 1 , i j  21 r    1  rg i rw i 1  ( Ni 1 )
w 1  r 21  r , w i  r  rw i 1  21  r ( 1  Ni  1 ) Z g   N 1 N 1  , Z i  g i  Zw i i 1 ( 1  Ni  1 ) 第一步是追的过程,第二步是敢的过程,所以叫追赶法 计算框图  1 ][ i iB    1 ][ i iA    1 ][ i iC    ][ i iS 1   N N N    N   1 存放系数矩阵主对角线  2 存放系数矩阵主对角线  2 存放系数矩阵主对角线 1 存放右端常数项 的元素 下方的元素 上方的元素 在追的过程中, ][ kB 内保存 [ ][ kSkw ], 保存 ][g k 在赶的过程中, ][ kS 保存 ][ kZ
输入初始数据 S ]1[  S /]1[ ],1[ B T  ]1[ B 2k [ kB T  ][ kS  [ ]1 /]1 kC T  [*][ ][ kB kBkA  ][( kS   ]1  [*][ kS kA  /])1 T 否 k 1 k Nk  ? 是 1k [ kNS  ]  [ kNS  ]  [ kNB  k 1 k  Nk 1 ? 否 是 打印结果 [*] kNS  ]1
程序: format rat M=input('请输方程组的个数 M:'); b=input('请输主对角线上的元素 b:'); r=input('请输次对角线上的元素 r:'); for i=1:M-1 B(i)=b;A(i)=r;C(i)=r; fprintf('请输入第 '); S(i)=input([ int2str(i) ' 个常数项 c:' ]); end B(M)=b; fprintf('请输入第 '); S(M)=input([int2str(M) ' 个常数项 c:' ]); %追赶法 S(1)=S(1)/B(1);T=B(1);k=2; while ~(k==M+1) B(k-1)=C(k-1)/T; T=B(k)-A(k-1)*B(k-1); S(k)=(S(k)-A(k-1)*S(k-1))/T; k=k+1; end k=1; while k~=M S(M-k)=S(M-k)-B(M-k)*S(M+1-k); k=k+1; end S
分享到:
收藏