亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#計算矩陣的秩實例分析

2020-01-24 01:32:53
字體:
來源:轉載
供稿:網友

本文實例講述了C#計算矩陣的秩的方法。分享給大家供大家參考。具體如下:

1.代碼思路

計算矩陣的秩,即把矩陣進行行初等變換,得出的行最簡矩陣的非零行數。過程如下
1)將矩陣各行按第一個非零元素出現的位置升序排列(Operation1函數)
2)查看矩陣是否為行最簡矩陣(isFinished函數),是則到第6步,不是則到第3步
3)如果有兩行第一個非零元素出現的位置相同,則做消法變換,讓下面行的第一個非零元素位置后移(Operation2函數)
4)將矩陣各行按第一個非零元素出現的位置升序排列(Operation1函數)
5)返回第2步
6)判斷誤差,對趨近與0的元素(如1E-5)按0處理,以免在第7步誤判(Operation3函數)
7)統計非零行的數目(Operation4函數),即為矩陣的秩

2.函數代碼

(注:本段代碼只實現了一個思路,可能并不是該問題的最優解)

/// <summary>/// 計算矩陣的秩/// </summary>/// <param name="matrix">矩陣</param>/// <returns></returns>private static int Rank(double[][] matrix){  //matrix為空則直接默認已經是最簡形式  if (matrix == null || matrix.Length == 0) return 0;  //復制一個matrix到copy,之后因計算需要改動矩陣時并不改動matrix本身  double[][] copy = new double[matrix.Length][];  for (int i = 0; i < copy.Length; i++)  {    copy[i] = new double[matrix[i].Length];  }  for (int i = 0; i < matrix.Length; i++)  {    for (int j = 0; j < matrix[0].Length; j++)    {      copy[i][j] = matrix[i][j];    }  }  //先以最左側非零項的位置進行行排序  Operation1(copy);  //循環化簡矩陣  while (!isFinished(copy))  {    Operation2(copy);    Operation1(copy);  }  //過于趨近0的項,視作0,減小誤差  Operation3(copy);  //行最簡矩陣的秩即為所求  return Operation4(matrix);}/// <summary>/// 判斷矩陣是否變換到最簡形式(非零行數達到最少)/// </summary>/// <param name="matrix"></param>/// <returns>true:</returns>private static bool isFinished(double[][] matrix){  //統計每行第一個非零元素的出現位置  int[] counter = new int[matrix.Length];  for (int i = 0; i < matrix.Length; i++)  {    for (int j = 0; j < matrix[i].Length; j++)    {      if (matrix[i][j] == 0)      {        counter[i]++;      }      else break;    }  }  //后面行的非零元素出現位置必須在前面行的后面,全零行除外  for (int i = 1; i < counter.Length; i++)  {    if (counter[i] <= counter[i - 1] && counter[i] != matrix[0].Length)    {      return false;    }  }  return true;}/// <summary>/// 排序(按左側最前非零位位置自上而下升序排列)/// </summary>/// <param name="matrix">矩陣</param>private static void Operation1(double[][] matrix){  //統計每行第一個非零元素的出現位置  int[] counter = new int[matrix.Length];  for (int i = 0; i < matrix.Length; i++)  {    for (int j = 0; j < matrix[i].Length; j++)    {      if (matrix[i][j] == 0)      {        counter[i]++;      }      else break;     }  }  //按每行非零元素的出現位置升序排列  for (int i = 0; i < counter.Length; i++)  {    for (int j = i; j < counter.Length; j++)    {      if(counter[i]>counter[j])      {        double[] dTemp = matrix[i];        matrix[i] = matrix[j];        matrix[j] = dTemp;      }    }  }}/// <summary>/// 行初等變換(左側最前非零位位置最靠前的行,只保留一個)/// </summary>/// <param name="matrix">矩陣</param>private static void Operation2(double[][] matrix){  //統計每行第一個非零元素的出現位置  int[] counter = new int[matrix.Length];  for (int i = 0; i < matrix.Length; i++)  {    for (int j = 0; j < matrix[i].Length; j++)    {      if (matrix[i][j] == 0)      {        counter[i]++;      }      else break;    }  }  for (int i = 1; i < counter.Length; i++)  {    if (counter[i] == counter[i - 1] && counter[i] != matrix[0].Length)    {      double a = matrix[i - 1][counter[i - 1]];      double b = matrix[i][counter[i]]; //counter[i]==counter[i-1]      matrix[i][counter[i]] = 0;      for (int j = counter[i] + 1; j < matrix[i].Length; j++)      {        double c = matrix[i - 1][j];        matrix[i][j] -= (c * b / a);      }      break;    }  }}/// <summary>/// 將和0非常接近的數字視為0/// </summary>/// <param name="matrix"></param>private static void Operation3(double[][] matrix){  for (int i = 0; i < matrix.Length; i++)  {    for (int j = 0; j < matrix[0].Length; j++)    {      if (Math.Abs(matrix[i][j]) <= 0.00001)      {        matrix[i][j] = 0;      }    }  }}/// <summary>/// 計算行最簡矩陣的秩/// </summary>/// <param name="matrix"></param>/// <returns></returns>private static int Operation4(double[][] matrix){  int rank = -1;  bool isAllZero = true;  for (int i = 0; i < matrix.Length; i++)  {    isAllZero = true;    //查看當前行有沒有0    for (int j = 0; j < matrix[0].Length; j++)    {      if (matrix[i][j] != 0)      {        isAllZero = false;        break;      }    }    //若第i行全為0,則矩陣的秩為i    if (isAllZero)    {      rank = i;      break;    }  }  //滿秩矩陣的情況  if (rank == -1)  {    rank = matrix.Length;  }  return rank;}

3.Main函數調用

static void Main(string[] args){  //示例矩陣1:秩為3  double[][] matrix1 = new double[][]   {    new double[] { 1, 1, 1 },    new double[] { 1, 1, 0 },    new double[] { 0, 1, 1 }   };  Console.WriteLine(Rank(matrix1));  //示例矩陣2:秩為3  double[][] matrix2 = new double[][]   {    new double[] { 3, 2, 0, 5, 0 },     new double[] { 3, -2, 3, 6, -1 },    new double[] { 2, 0, 1, 5, -3 },    new double[] { 1, 6, -4, -1, 4 }   };  Console.WriteLine(Rank(matrix2));  //示例矩陣3:秩為3  double[][] matrix3 = new double[][]   {    new double[] { 2, 3, 1, -3, -7 },     new double[] { 1, 2, 0, -2, -4 },    new double[] { 3, -2, 8, 3, 0 },    new double[] { 2, -3, 7, 4, 3 }  };  Console.WriteLine(Rank(matrix3));  Console.ReadLine();}

4.執行結果

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩亚洲激情| 91视频免费网站| 91在线观看免费网站| 91精品久久久久久久久不口人| 国产精品一区专区欧美日韩| 欧美性在线视频| 久久影视电视剧凤归四时歌| 国产一级揄自揄精品视频| 日韩av网站导航| 成人国产精品色哟哟| 欧美日韩在线一区| 欧美色视频日本版| 亚洲精品国产免费| 国产精品福利网站| 久久躁日日躁aaaaxxxx| 亚洲精品欧美极品| 中文字幕欧美视频在线| 久久久电影免费观看完整版| 久久伊人91精品综合网站| 尤物99国产成人精品视频| 精品毛片网大全| 久久精品青青大伊人av| 久久久久久高潮国产精品视| 国产精品久久久久久久久久三级| 欧美在线视频观看免费网站| 日本免费在线精品| 欧美高清第一页| 日韩免费观看网站| 成人美女免费网站视频| 国产精品久久久精品| 国产精品稀缺呦系列在线| 色噜噜亚洲精品中文字幕| xxx成人少妇69| 日韩精品中文字幕视频在线| 色偷偷91综合久久噜噜| 国产成人精品一区二区三区| 秋霞成人午夜鲁丝一区二区三区| 日韩av在线影院| 亚洲高清久久网| 国产999在线观看| 欧美www在线| 97国产精品视频人人做人人爱| 国产极品精品在线观看| 国产欧美精品va在线观看| 国产香蕉精品视频一区二区三区| 亚洲18私人小影院| 欧美劲爆第一页| 欧美成aaa人片免费看| 欧美一级高清免费播放| 久久精品一本久久99精品| 成人欧美一区二区三区黑人孕妇| 国内成人精品视频| 国产精品久久久久高潮| 91日本视频在线| 日本欧美国产在线| 国产精品xxxxx| 日韩专区中文字幕| 欧美大片va欧美在线播放| 欧美日韩国产中文精品字幕自在自线| 久久视频这里只有精品| 国产精品69久久| 久久免费视频观看| 精品成人69xx.xyz| 成人97在线观看视频| 日本aⅴ大伊香蕉精品视频| 在线播放国产一区中文字幕剧情欧美| 欧美在线观看一区二区三区| 日韩亚洲欧美中文高清在线| 国产手机视频精品| 国产精品免费看久久久香蕉| 91成人免费观看网站| 日韩在线免费高清视频| 欧美电影免费观看高清完整| 欧洲成人免费aa| 欧美日韩在线观看视频小说| 日韩av在线精品| 精品久久久精品| 日韩亚洲精品视频| 91精品国产777在线观看| 成人精品久久av网站| 欧美老妇交乱视频| 一本一本久久a久久精品综合小说| 国产美女精品免费电影| 91中文精品字幕在线视频| 国产一区二区三区精品久久久| 欧美洲成人男女午夜视频| 成人有码在线视频| 国产日韩中文字幕在线| 色999日韩欧美国产| 成人美女免费网站视频| 91久久精品一区| 欧美国产一区二区三区| 国产精品久久二区| 国产精品午夜国产小视频| 国产99久久精品一区二区 夜夜躁日日躁| 久久综合色88| 日韩视频中文字幕| 国产精品久久久久久久av电影| 51色欧美片视频在线观看| 国产精品大陆在线观看| 色噜噜国产精品视频一区二区| 亚洲精品一区二区三区不| 国产成人综合亚洲| 欧美黑人一级爽快片淫片高清| 日韩高清免费在线| 亚洲一区二区免费| 日韩av在线免费播放| 日韩高清a**址| 欧美孕妇孕交黑巨大网站| 中文字幕欧美日韩在线| 亚洲精品国精品久久99热一| 国产日韩亚洲欧美| 538国产精品一区二区免费视频| 91精品国产91久久久久久最新| 久久久国产精品免费| 久久久久久香蕉网| 亚洲国产成人精品电影| 91视频-88av| 日韩最新中文字幕电影免费看| 欧美日韩激情视频| 久久精品久久久久| 国产精品美女在线观看| 精品国产一区二区三区久久狼5月| 久久久久久国产三级电影| 国产精品美女主播| 国产在线日韩在线| 最近2019免费中文字幕视频三| 久热精品视频在线免费观看| 欧美疯狂做受xxxx高潮| 欧美大码xxxx| 国产aⅴ夜夜欢一区二区三区| 国产精品都在这里| 欧美激情免费在线| 欧美国产精品人人做人人爱| 成人久久精品视频| 亚洲精品女av网站| 97视频在线观看视频免费视频| 少妇激情综合网| 久热精品视频在线观看一区| 韩国欧美亚洲国产| 久久亚洲欧美日韩精品专区| 97**国产露脸精品国产| 欧美中文在线观看| 66m—66摸成人免费视频| 亚洲理论电影网| 亲爱的老师9免费观看全集电视剧| 亚洲精品久久久久久下一站| 91理论片午午论夜理片久久| 成人妇女免费播放久久久| 日韩精品在线视频| 国产精品美女在线观看| 26uuu亚洲国产精品| 久久久国产一区| 国产精品久久久久久久久久免费| 欧美日韩亚洲精品内裤| 中文字幕亚洲综合久久| 欧美日韩成人在线视频| 91麻豆国产语对白在线观看| 美女福利视频一区| 色偷偷噜噜噜亚洲男人| 久久亚洲综合国产精品99麻豆精品福利| 亚洲欧美日韩国产中文专区| 欧美一区三区三区高中清蜜桃| 欧美日韩高清区|