數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)組的存儲格式轉(zhuǎn)換_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  《數(shù)據(jù)結(jié)構(gòu)》</b></p><p>  課 程 設(shè) 計(jì) 報(bào) 告 書</p><p>  題 目: 數(shù)組的存儲格式轉(zhuǎn)換 </p><p>  專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  班

2、 級: 計(jì)121 </p><p>  學(xué) 號: </p><p>  完成時(shí)間: </p><p><b>  問題描述</b></p><p&

3、gt;<b>  問題描述</b></p><p>  根據(jù)數(shù)組的相關(guān)知識,以行列式的方式輸入矩陣,進(jìn)行簡單的運(yùn)算,轉(zhuǎn)置及求逆等過程,然后打印出該矩陣。</p><p><b>  基本要求</b></p><p>  需要按要求輸入矩陣,系統(tǒng)會自行運(yùn)算,然后輸出矩陣。</p><p><b&

4、gt;  概要設(shè)計(jì)</b></p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p><b>  函數(shù)申明</b></p><p>  float MatDet(float *p, int n); //求矩陣的行列式</p><p>  floa

5、t Creat_M(float *p, int m, int n, int k); //求矩陣元素A(m, n)的代數(shù)余之式</p><p>  void print(float *p, int m,int n); //輸出矩陣n*n</p><p>  bool Gauss(float *pSrc, float *pDst, int iRow)

6、; //采用部分主元的高斯消去法求方陣A的逆矩陣B</p><p>  bool Transepose(float *pSrc,float *pSdst, int iRow, int iCol); //求矩陣轉(zhuǎn)置</p><p>  bool MatMultiply(float *pSrc1, float *pSrc2,float *pDst,int iRow, int iCol);

7、//矩陣相乘</p><p><b>  主函數(shù)</b></p><p>  float *buffer, *p; //定義數(shù)組首地址指針變量</p><p>  int row, num; //定義矩陣的行數(shù)和矩陣元素個(gè)數(shù)</p><p><b>  int

8、 i, j;</b></p><p>  float determ; //定義矩陣的行列式</p><p>  float a[N][N], b[N][N];</p><p><b>  int n;</b></p><p>  cout << "采用逆矩陣

9、的定義法求矩陣的逆矩陣!\n";</p><p>  cout << "請輸入矩陣的行數(shù): ";</p><p>  cin >> row;</p><p>  num = 2 * row * row;</p><p>  buffer = (float *)calloc(num, siz

10、eof(float)); //分配內(nèi)存單元</p><p>  p = buffer;</p><p>  if (NULL != p)</p><p><b>  {</b></p><p>  for (i = 0; i < row; i++)</p><p><b&

11、gt;  {</b></p><p>  cout << "Please input the number of " << i+1 << " row: ";</p><p>  for (j = 0; j < row; j++)</p><p><b>  {&l

12、t;/b></p><p>  cin >> *p++;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b

13、></p><p><b>  {</b></p><p>  cout << "Can't distribute memory\n";</p><p><b>  }</b></p><p>  cout << "The orig

14、inal matrix : \n";</p><p>  print(buffer, row); //打印該矩陣</p><p>  determ = MatDet(buffer, row); //求整個(gè)矩陣的行列式</p><p>  p = buffer + row * row;</p><p&g

15、t;  if (determ != 0)</p><p><b>  {</b></p><p>  cout << "The determinant of the matrix is " << determ << endl;</p><p>  for (i = 0; i < ro

16、w; i++) //求逆矩陣</p><p><b>  {</b></p><p>  for (j = 0; j < row; j++)</p><p><b>  {</b></p><p>  *(p+j*row+i) = Creat_M(buffer, i, j, row)/d

17、eterm;</p><p><b>  }</b></p><p><b>  }</b></p><p>  cout << "The inverse matrix is: " << endl;</p><p>  print(p, row);

18、 //打印該矩陣</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout << "The determinant is 0, and

19、there is no inverse matrix!\n";</p><p><b>  }</b></p><p>  free(buffer); //釋放內(nèi)存空間</p><p>  cout << "采用部分主元的高斯消去法求方陣的逆矩陣!\n";</p><p

20、>  cout << "請輸入方陣的階數(shù): ";</p><p><b>  cin >> n;</b></p><p>  cout << "請輸入" << n << "階方陣: \n";</p><p>  //輸入

21、一個(gè)n階方陣</p><p>  for (i = 0; i < n; i++)</p><p><b>  {</b></p><p>  for (j = 0; j < n; j++)</p><p><b>  {</b></p><p>  cin >

22、;> a[i][j];</p><p><b>  }</b></p><p><b>  }</b></p><p>  //運(yùn)用高斯消去法求該矩陣的逆矩陣并輸出</p><p>  if (Gauss(a, b, n))</p><p><b>  {&l

23、t;/b></p><p>  cout << "該方陣的逆矩陣為: \n";</p><p>  for (i = 0; i < n; i++)</p><p><b>  {</b></p><p>  cout << setw(4);</p>&

24、lt;p>  for (j = 0; j < n; j++)</p><p><b>  {</b></p><p>  cout << b[i][j] << setw(10);</p><p><b>  }</b></p><p>  cout <<

25、; endl;</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  return 0;</b></p><p><b>  功能函數(shù)</b></p><p>  int

26、 i,m,n;</p><p>  cout << "請輸入方陣的行數(shù): ";</p><p><b>  cin >> m;</b></p><p>  cout << "請輸入方陣的列數(shù): ";</p><p><b>  cin

27、>> n;</b></p><p>  float *a = new float[m*n];</p><p>  cout << "請輸入" << m << "*"<< n << "階方陣: \n";</p><p>  /

28、/輸入一個(gè)n階方陣</p><p>  for (i = 0; i < m*n; i++)</p><p><b>  {</b></p><p>  cin >> a[i];</p><p><b>  }</b></p><p>  print(a,m,

29、n);</p><p>  cout<<"轉(zhuǎn)置矩陣:"<<endl;</p><p>  float *b = new float[n*m];</p><p>  Transepose(a,b,m,n);</p><p>  print(b,n,m);</p><p>  c

30、out<<"矩陣乘積:"<<endl;</p><p>  float *c = new float[m*m];</p><p>  MatMultiply(a,b,c,m,n);</p><p>  print(c,m,m);</p><p>  cout<<"矩陣的逆:&q

31、uot;<<endl;</p><p>  float *d = new float[m*m];</p><p>  Gauss(c,d,m);</p><p>  print(d,m,m);</p><p><b>  cin>>m;</b></p><p>  dele

32、te[] a;</p><p>  delete[] b;</p><p>  delete[] c;</p><p>  delete[] d;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p

33、>  //----------------------------------</p><p>  //功能: 求矩陣(n*n)的行列式</p><p>  //入口參數(shù): 矩陣的首地址,矩陣的行數(shù)</p><p>  //返回值: 矩陣的行列式值</p><p>  //--------------------------------

34、--</p><p>  float MatDet(float *p, int n)</p><p><b>  {</b></p><p>  int r, c, m;</p><p>  int lop = 0;</p><p>  float result = 0;</p>&

35、lt;p>  float mid = 1;</p><p>  if (n != 1)</p><p><b>  {</b></p><p>  lop = (n == 2) ? 1 : n; //控制求和循環(huán)次數(shù),若為2階,則循環(huán)1次,否則為n次</p><p>  for (m = 0;

36、 m < lop; m++)</p><p><b>  {</b></p><p>  mid = 1; //順序求和, 主對角線元素相乘之和</p><p>  for (r = 0, c = m; r < n; r++, c++)</p><p><b>  {</

37、b></p><p>  mid = mid * (*(p+r*n+c%n));</p><p><b>  }</b></p><p>  result += mid;</p><p><b>  }</b></p><p>  for (m = 0; m <

38、lop; m++)</p><p><b>  {</b></p><p>  mid = 1; //逆序相減, 減去次對角線元素乘積</p><p>  for (r = 0, c = n-1-m+n; r < n; r++, c--)</p><p><b>  {</b&

39、gt;</p><p>  mid = mid * (*(p+r*n+c%n));</p><p><b>  }</b></p><p>  result -= mid;</p><p><b>  }</b></p><p><b>  }</b>&

40、lt;/p><p><b>  else</b></p><p>  result = *p;</p><p>  return result;</p><p><b>  }</b></p><p>  //-----------------------------------

41、-------------------</p><p>  //功能: 求k*k矩陣中元素A(m, n)的代數(shù)余之式</p><p>  //入口參數(shù): k*k矩陣的首地址,矩陣元素A的下標(biāo)m,n,矩陣行數(shù)k</p><p>  //返回值: k*k矩陣中元素A(m, n)的代數(shù)余之式</p><p>  //----------------

42、---------------------------------------</p><p>  float Creat_M(float *p, int m, int n, int k)</p><p><b>  {</b></p><p><b>  int len;</b></p><p>

43、<b>  int i, j;</b></p><p>  float mid_result = 0;</p><p>  int sign = 1;</p><p>  float *p_creat, *p_mid;</p><p>  len = (k-1)*(k-1); //k階矩陣的代數(shù)余之

44、式為k-1階矩陣</p><p>  p_creat = (float*)calloc(len, sizeof(float)); //分配內(nèi)存單元</p><p>  p_mid = p_creat;</p><p>  for (i = 0; i < k; i++)</p><p><b>  {</b><

45、/p><p>  for (j = 0; j < k; j++)</p><p><b>  {</b></p><p>  if (i != m && j != n) //將除第i行和第j列外的所有元素存儲到以p_mid為首地址的內(nèi)存單元</p><p><b>  {</b>&

46、lt;/p><p>  *p_mid++ = *(p+i*k+j);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  sign = (m+n)%2 == 0 ? 1

47、: -1; //代數(shù)余之式前面的正、負(fù)號</p><p>  mid_result = (float)sign*MatDet(p_creat, k-1);</p><p>  free(p_creat);</p><p>  return mid_result;</p><p><b>  }</b></p&

48、gt;<p>  //----------------------</p><p>  //功能: 打印n*n矩陣</p><p>  //入口參數(shù): n*n矩陣的首地址,矩陣的行數(shù)n</p><p>  //返回值: 無返回值</p><p>  void print(float *p, int m, int n)</p

49、><p><b>  {</b></p><p><b>  int i, j;</b></p><p>  for (i = 0; i < m; i++)</p><p><b>  {</b></p><p>  cout << set

50、w(4);</p><p>  for (j = 0; j < n; j++)</p><p><b>  {</b></p><p>  cout << setiosflags(ios::right) << *p++ << setw(10);</p><p><b>

51、  }</b></p><p>  cout << endl;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //----------------------------------------------</p&g

52、t;<p>  //功能: 采用部分主元的高斯消去法求方陣A的逆矩陣B</p><p>  //入口參數(shù): 輸入方陣,輸出方陣,方陣階數(shù)</p><p>  //返回值: true or false</p><p>  //--------------------------</p><p><b>  運(yùn)行與測試&l

53、t;/b></p><p><b>  進(jìn)入提示畫面</b></p><p><b>  按提示輸入后</b></p><p><b>  輸出界面</b></p><p><b>  總結(jié)與體會</b></p><p>  

54、通過這一次的課程設(shè)計(jì),我掌握了另外的一種算法,對矩陣等復(fù)雜數(shù)據(jù)的輸入有了更深刻的理解,起初不知道應(yīng)該以怎樣的方式輸入矩陣,數(shù)據(jù)結(jié)構(gòu)這門課程在處理數(shù)據(jù)信息方面給了我很大的啟發(fā),應(yīng)該以怎樣的方式輸入數(shù)據(jù),處理數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)都很系統(tǒng)的解釋了出來,對我的幫助很大,一開始也沒想到自己真的能做出來,后來通過網(wǎng)上的一些成功案例,一步一步的寫了出來,在經(jīng)過調(diào)試,驗(yàn)證等一系列操作,終于解決了問題。也增加了自己的信心。</p><p&g

55、t;<b>  附源程序</b></p><p>  #include <math.h></p><p>  #include <malloc.h></p><p>  #include <iomanip></p><p>  #include <iostream><

56、/p><p>  #define N 10 //定義方陣的最大階數(shù)為10</p><p>  using namespace std;</p><p><b>  //函數(shù)的聲明部分</b></p><p>  float MatDet(float *p, int n); //

57、求矩陣的行列式</p><p>  float Creat_M(float *p, int m, int n, int k); //求矩陣元素A(m, n)的代數(shù)余之式</p><p>  void print(float *p, int m,int n); //輸出矩陣n*n</p><p>  bool Gauss(f

58、loat *pSrc, float *pDst, int iRow); //采用部分主元的高斯消去法求方陣A的逆矩陣B</p><p>  bool Transepose(float *pSrc,float *pSdst, int iRow, int iCol); //求矩陣轉(zhuǎn)置</p><p>  bool MatMultiply(float *pSrc1, float *pSrc

59、2,float *pDst,int iRow, int iCol);//矩陣相乘</p><p>  int main()</p><p><b>  {</b></p><p>  /*float *buffer, *p; //定義數(shù)組首地址指針變量</p><p>  int row, num;

60、 //定義矩陣的行數(shù)和矩陣元素個(gè)數(shù)</p><p><b>  int i, j;</b></p><p>  float determ; //定義矩陣的行列式</p><p>  float a[N][N], b[N][N];</p><p><b>

61、;  int n;</b></p><p>  cout << "采用逆矩陣的定義法求矩陣的逆矩陣!\n";</p><p>  cout << "請輸入矩陣的行數(shù): ";</p><p>  cin >> row;</p><p>  num = 2 *

62、 row * row;</p><p>  buffer = (float *)calloc(num, sizeof(float)); //分配內(nèi)存單元</p><p>  p = buffer;</p><p>  if (NULL != p)</p><p><b>  {</b></p>

63、<p>  for (i = 0; i < row; i++)</p><p><b>  {</b></p><p>  cout << "Please input the number of " << i+1 << " row: ";</p><p&g

64、t;  for (j = 0; j < row; j++)</p><p><b>  {</b></p><p>  cin >> *p++;</p><p><b>  }</b></p><p><b>  }</b></p><p&

65、gt;<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout << "Can't distribute memory\n";</p><p><b&

66、gt;  }</b></p><p>  cout << "The original matrix : \n";</p><p>  print(buffer, row); //打印該矩陣</p><p>  determ = MatDet(buffer, row); //求整個(gè)矩陣的行

67、列式</p><p>  p = buffer + row * row;</p><p>  if (determ != 0)</p><p><b>  {</b></p><p>  cout << "The determinant of the matrix is " <<

68、; determ << endl;</p><p>  for (i = 0; i < row; i++) //求逆矩陣</p><p><b>  {</b></p><p>  for (j = 0; j < row; j++)</p><p><b>  {</b>

69、;</p><p>  *(p+j*row+i) = Creat_M(buffer, i, j, row)/determ;</p><p><b>  }</b></p><p><b>  }</b></p><p>  cout << "The inverse matrix

70、 is: " << endl;</p><p>  print(p, row); //打印該矩陣</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b>&l

71、t;/p><p>  cout << "The determinant is 0, and there is no inverse matrix!\n";</p><p><b>  }</b></p><p>  free(buffer); //釋放內(nèi)存空間</p><p> 

72、 cout << "采用部分主元的高斯消去法求方陣的逆矩陣!\n";</p><p>  cout << "請輸入方陣的階數(shù): ";</p><p><b>  cin >> n;</b></p><p>  cout << "請輸入"

73、<< n << "階方陣: \n";</p><p>  //輸入一個(gè)n階方陣</p><p>  for (i = 0; i < n; i++)</p><p><b>  {</b></p><p>  for (j = 0; j < n; j++)</p

74、><p><b>  {</b></p><p>  cin >> a[i][j];</p><p><b>  }</b></p><p><b>  }</b></p><p>  //運(yùn)用高斯消去法求該矩陣的逆矩陣并輸出</p>

75、<p>  if (Gauss(a, b, n))</p><p><b>  {</b></p><p>  cout << "該方陣的逆矩陣為: \n";</p><p>  for (i = 0; i < n; i++)</p><p><b>  {&

76、lt;/b></p><p>  cout << setw(4);</p><p>  for (j = 0; j < n; j++)</p><p><b>  {</b></p><p>  cout << b[i][j] << setw(10);</p>

77、<p><b>  }</b></p><p>  cout << endl;</p><p><b>  }</b></p><p><b>  } </b></p><p>  return 0;*/</p><p> 

78、 int i,m,n;</p><p>  cout << "請輸入方陣的行數(shù): ";</p><p><b>  cin >> m;</b></p><p>  cout << "請輸入方陣的列數(shù): ";</p><p><b>  

79、cin >> n;</b></p><p>  float *a = new float[m*n];</p><p>  cout << "請輸入" << m << "*"<< n << "階方陣: \n";</p><p>

80、;  //輸入一個(gè)n階方陣</p><p>  for (i = 0; i < m*n; i++)</p><p><b>  {</b></p><p>  cin >> a[i];</p><p><b>  }</b></p><p>  print(

81、a,m,n);</p><p>  cout<<"轉(zhuǎn)置矩陣:"<<endl;</p><p>  float *b = new float[n*m];</p><p>  Transepose(a,b,m,n);</p><p>  print(b,n,m);</p><p>

82、;  cout<<"矩陣乘積:"<<endl;</p><p>  float *c = new float[m*m];</p><p>  MatMultiply(a,b,c,m,n);</p><p>  print(c,m,m);</p><p>  cout<<"矩陣的

83、逆:"<<endl;</p><p>  float *d = new float[m*m];</p><p>  Gauss(c,d,m);</p><p>  print(d,m,m);</p><p><b>  cin>>m;</b></p><p>  

84、delete[] a;</p><p>  delete[] b;</p><p>  delete[] c;</p><p>  delete[] d;</p><p><b>  return 0;</b></p><p><b>  }</b></p>&

85、lt;p>  //----------------------------------</p><p>  //功能: 求矩陣(n*n)的行列式</p><p>  //入口參數(shù): 矩陣的首地址,矩陣的行數(shù)</p><p>  //返回值: 矩陣的行列式值</p><p>  //----------------------------

86、------</p><p>  float MatDet(float *p, int n)</p><p><b>  {</b></p><p>  int r, c, m;</p><p>  int lop = 0;</p><p>  float result = 0;</p>

87、;<p>  float mid = 1;</p><p>  if (n != 1)</p><p><b>  {</b></p><p>  lop = (n == 2) ? 1 : n; //控制求和循環(huán)次數(shù),若為2階,則循環(huán)1次,否則為n次</p><p>  for (m

88、= 0; m < lop; m++)</p><p><b>  {</b></p><p>  mid = 1; //順序求和, 主對角線元素相乘之和</p><p>  for (r = 0, c = m; r < n; r++, c++)</p><p><b>  {&

89、lt;/b></p><p>  mid = mid * (*(p+r*n+c%n));</p><p><b>  }</b></p><p>  result += mid;</p><p><b>  }</b></p><p>  for (m = 0; m &

90、lt; lop; m++)</p><p><b>  {</b></p><p>  mid = 1; //逆序相減, 減去次對角線元素乘積</p><p>  for (r = 0, c = n-1-m+n; r < n; r++, c--)</p><p><b>  {<

91、;/b></p><p>  mid = mid * (*(p+r*n+c%n));</p><p><b>  }</b></p><p>  result -= mid;</p><p><b>  }</b></p><p><b>  }</b&

92、gt;</p><p><b>  else</b></p><p>  result = *p;</p><p>  return result;</p><p><b>  }</b></p><p>  //-------------------------------

93、-----------------------</p><p>  //功能: 求k*k矩陣中元素A(m, n)的代數(shù)余之式</p><p>  //入口參數(shù): k*k矩陣的首地址,矩陣元素A的下標(biāo)m,n,矩陣行數(shù)k</p><p>  //返回值: k*k矩陣中元素A(m, n)的代數(shù)余之式</p><p>  //------------

94、-------------------------------------------</p><p>  float Creat_M(float *p, int m, int n, int k)</p><p><b>  {</b></p><p><b>  int len;</b></p><p

95、><b>  int i, j;</b></p><p>  float mid_result = 0;</p><p>  int sign = 1;</p><p>  float *p_creat, *p_mid;</p><p>  len = (k-1)*(k-1); //k階矩陣的

96、代數(shù)余之式為k-1階矩陣</p><p>  p_creat = (float*)calloc(len, sizeof(float)); //分配內(nèi)存單元</p><p>  p_mid = p_creat;</p><p>  for (i = 0; i < k; i++)</p><p><b>  {</b>

97、</p><p>  for (j = 0; j < k; j++)</p><p><b>  {</b></p><p>  if (i != m && j != n) //將除第i行和第j列外的所有元素存儲到以p_mid為首地址的內(nèi)存單元</p><p><b>  {</b&

98、gt;</p><p>  *p_mid++ = *(p+i*k+j);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  sign = (m+n)%2 == 0

99、? 1 : -1; //代數(shù)余之式前面的正、負(fù)號</p><p>  mid_result = (float)sign*MatDet(p_creat, k-1);</p><p>  free(p_creat);</p><p>  return mid_result;</p><p><b>  }</b><

100、;/p><p>  //----------------------</p><p>  //功能: 打印n*n矩陣</p><p>  //入口參數(shù): n*n矩陣的首地址,矩陣的行數(shù)n</p><p>  //返回值: 無返回值</p><p>  void print(float *p, int m, int n)&l

101、t;/p><p><b>  {</b></p><p><b>  int i, j;</b></p><p>  for (i = 0; i < m; i++)</p><p><b>  {</b></p><p>  cout <<

102、 setw(4);</p><p>  for (j = 0; j < n; j++)</p><p><b>  {</b></p><p>  cout << setiosflags(ios::right) << *p++ << setw(10);</p><p><b

103、>  }</b></p><p>  cout << endl;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //----------------------------------------------<

104、/p><p>  //功能: 采用部分主元的高斯消去法求方陣A的逆矩陣B</p><p>  //入口參數(shù): 輸入方陣,輸出方陣,方陣階數(shù)</p><p>  //返回值: true or false</p><p>  //----------------------------------------------</p><

105、;p>  bool Gauss(float *pSrc, float *pDst, int iRow)</p><p><b>  {</b></p><p>  int i, j, k;</p><p>  int n = iRow;</p><p>  float max, temp;</p>&

106、lt;p>  float t[N][N]; //臨時(shí)矩陣</p><p>  //將A矩陣存放在臨時(shí)矩陣t[n][n]中</p><p>  for (i = 0; i < n; i++) </p><p><b>  {</b></p><p>  for (j

107、= 0; j < n; j++)</p><p><b>  {</b></p><p>  t[i][j] = pSrc[i*iRow+j];</p><p><b>  }</b></p><p><b>  }</b></p><p>  /

108、/初始化B矩陣為單位陣</p><p>  for (i = 0; i < n; i++) </p><p><b>  {</b></p><p>  for (j = 0; j < n; j++)</p><p><b>  {</b></p><p

109、>  pDst[i*iRow+j] = (i == j) ? (float)1 : 0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  for (i = 0; i < n; i++)</p><p><b>  {</

110、b></p><p><b>  //尋找主元</b></p><p>  max = t[i][i];</p><p><b>  k = i;</b></p><p>  for (j = i+1; j < n; j++)</p><p><b> 

111、 {</b></p><p>  if (fabs(t[j][i]) > fabs(max))</p><p><b>  {</b></p><p>  max = t[j][i];</p><p><b>  k = j;</b></p><p><

112、;b>  }</b></p><p><b>  }</b></p><p>  //如果主元所在行不是第i行,進(jìn)行行交換</p><p>  if (k != i)</p><p><b>  {</b></p><p>  for (j = 0; j &

113、lt; n; j++)</p><p><b>  {</b></p><p>  temp = t[i][j];</p><p>  t[i][j] = t[k][j];</p><p>  t[k][j] = temp;</p><p><b>  //B伴隨交換</b>

114、</p><p>  temp = pDst[i*iRow+j];</p><p>  pDst[i*iRow+j] = pDst[k*iRow+j];</p><p>  pDst[k*iRow+j] = temp;</p><p><b>  }</b></p><p><b>  

115、}</b></p><p>  //判斷主元是否為0, 若是, 則矩陣A不是滿秩矩陣,不存在逆矩陣</p><p>  if (t[i][i] == 0)</p><p><b>  {</b></p><p>  cout << "There is no inverse matrix!

116、";</p><p>  return false;</p><p><b>  }</b></p><p>  //消去A的第i列除去i行以外的各行元素</p><p>  temp = t[i][i];</p><p>  for (j = 0; j < n; j++)<

117、/p><p><b>  {</b></p><p>  t[i][j] = t[i][j] / temp; //主對角線上的元素變?yōu)?</p><p>  pDst[i*iRow+j] = pDst[i*iRow+j] / temp; //伴隨計(jì)算</p><p><b>  }<

118、;/b></p><p>  for (j = 0; j < n; j++) //第0行->第n行</p><p><b>  {</b></p><p>  if (j != i) //不是第i行</p><p><b>  {</b>

119、</p><p>  temp = t[j][i];</p><p>  for (k = 0; k < n; k++) //第j行元素 - i行元素*j列i行元素</p><p><b>  {</b></p><p>  t[j][k] = t[j][k] - t[i][k]*temp;</

120、p><p>  pDst[j*iRow+k] = pDst[j*iRow+k] - pDst[i*iRow+k]*temp;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p&g

121、t;<b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  bool Transepose(float *pSrc,float *pSdst, int iRow, int iCol)//輸入源矩陣、目標(biāo)矩陣、源矩陣行和列</p><

122、;p><b>  {</b></p><p>  if (iRow && iCol)</p><p><b>  {</b></p><p>  for (int i=0;i<iCol;i++)</p><p><b>  {</b></p&g

123、t;<p>  for(int j=0; j<iRow; j++)</p><p><b>  {</b></p><p>  *(pSdst + i*iRow +j) = *(pSrc + j*iCol + i);</p><p><b>  }</b></p><p><

124、;b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  return false;</p><p><b>  }</b></p><p>  bool MatMultiply(floa

125、t *pSrc1, float *pSrc2, float *pDst, int iRow, int iCol)//輸入源矩陣1&2、目標(biāo)矩陣、源矩陣行和列</p><p><b>  {</b></p><p>  if (iRow && iCol)</p><p><b>  {</b><

126、/p><p>  for (int i=0;i<iRow;i++)</p><p><b>  {</b></p><p>  for (int j=0;j<iRow;j++)</p><p><b>  {</b></p><p>  *(pDst + i*iRow

127、 + j)=0;</p><p>  for (int k=0;k<iCol;k++)</p><p><b>  {</b></p><p>  *(pDst + i*iRow + j) += *(pSrc1 + i*iCol + k)* *(pSrc2 + k*iRow +j);</p><p><b&g

128、t;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  return false;</

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論