a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 58|回复: 0

[考试试题] Gauss消元法求解线性方程组

[复制链接]
发表于 2012-7-31 21:53:42 | 显示全部楼层 |阅读模式
  /*高斯消元法求解线性方程组' k4 i' |; ^9 T( Y
  高斯消元的消元计算:5 f- [$ f$ O, ?" W
  (k)  (k)) y$ `: M0 |2 q7 I) Y
  Mik = Aik  / Akk       (i = k+1,k+2,,.....,n)5 N/ R1 F" b1 N  e+ `
  (k+1)  (k)          (k): V6 P  r) O3 v8 I: ?" u! E
  Aij  = Aij  - MikAkj    (i,j= k+1,k+2,.....,n)
1 N0 I$ H' K5 u  D( z  (k+1)  (k)          (k)
* C. o1 h8 {+ _5 {. Z% U5 w  Bi   = Bi   - MikBk        (i = k+1,k+2,.....,n)
. K- Y+ ]# ]: G) A  回代求解:
8 p) O# N. l) y( V  (n)      (n)
" ~8 P4 J/ c2 y  Xn =  Bn   / Ann
4 M, f; y0 v4 n/ c+ x  (i)         (i)" H* Q8 M6 I! m; t3 X  y
  Xi = (Bi    - )/Aii, d+ `4 e; {# T' U( H+ B5 v
  (i = n-1,n-2,....,1), J3 Z$ p2 z( e0 d  c" \4 E1 f8 \" }
  使用高斯消元法求解线性方程组比用Cramer求解的计算量要小的多
4 Q" W5 e* H4 Q: d5 p, O- _% T& j  */- _0 Y( o) u& D7 ]' z
  /*函数名称:gauss_elimination_calculate
/ q+ d8 s% _; ?) E9 N' Q  函数参数:int (*p)[3];线性方程组的系数行列式
( [) T7 T* R5 t; q9 N  e8 X  int* B;线性方程组右边的常数向量
: j9 g7 h' x5 V7 r  int size;线性方程组的阶数
! x9 v% D4 p  k( q/ p  函数返回值:函数没有返回值,输出方程组的求解结果/ L/ L+ E5 b0 w. P# X7 r& }$ D
  */) F2 U3 W8 d" U3 X( Z
  void gauss_elimination_calculate(double (*a)[3], double* ipvt, int size)! L% ~$ P2 h$ T- C
  {
0 O& D# t* {2 a/ ]  v  double *X = new double[size];9 X5 u/ t# i3 U5 w* L3 W, e+ m
  //消元,是系数矩阵成为上三角矩阵
9 M  k0 p8 a# A/ s- ]& l  double mi = 1.0;4 Y; W6 L/ @, r& d) v9 k, C
  int k = 0;$ L; V& n3 \, {+ _) R- H
  for(int i = 1; i < size; i++)
: l  o& F/ A6 e) Y( S4 O  {
3 _3 y) O2 }0 e7 [% G* f: D  for(int j = 0; j < i; j++)# s. k& Q3 z: j
  {& a+ g  H, {) ^
  mi = a[j]/a[j][j];
6 B- P6 _4 {# Q* b* m! l5 Z  k = j;- H, C) N* e: e; ^( x3 x% O( i
  while(k < size)
9 L% y" U3 ~  x' a  `# C  {
, I" ?, W* a! y$ h- m8 {' G, a$ L' @  a[k] = a[k] - mi * a[j][k];/ i& ^4 ?3 d) T) ~
  k ++;" U! g" ], s: z: @- x# X
  }+ v2 W- H' G; c& d1 q; ~
  ipvt = ipvt - ipvt[j] * mi;: X9 t' Q8 h2 p! Z8 }% d  L; H  {
  }
# _3 E3 b% I% @% o& _: p* p  }
" T; Z- l' g# u) F. d1 H2 p  a9 C( l( d2 r) z
  //回代,求解线性方程组的结果( T2 T% a  a; O
  X[size - 1] = ipvt[size - 1]/a[size - 1][size - 1];
; T  g; y- ]2 F  for(int i = size - 2; i >= 0; i--): `- }% X' X+ N9 y% Z
  {
8 M. X) x! }$ @# L  double temp = ipvt - X[i + 1] * a[i + 1];4 W! e) h' m6 ]$ l# C+ m, C( H  z
  for(int j = i + 2; j < size; j++)
5 w" O0 h" F) ]9 @  temp = temp - X[j] * a[j];
" P2 x8 W$ ^, [  X = temp/a;
  D0 O  \, J& {/ Z# `  }
9 W  l) w' R5 l" P% c8 D  j9 H% r, g  for(int i = 0; i < size; i++)
$ ?1 v* Y& C( u  std::cout
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-19 21:26 , Processed in 0.390451 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表