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

首頁 > 編程 > C# > 正文

C#中矩陣運算方法實例分析

2020-01-24 01:58:10
字體:
來源:轉載
供稿:網友

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

一、測試環境:

主機:XP

開發環境:VS2008

二、功能:

在C#中實現矩陣運算

三、源代碼:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;//矩陣數據結構 //二維矩陣 class _Matrix {  public int m;  public int n;  public float[] arr; //初始化  public _Matrix() {  m = 0;   n = 0;  } public _Matrix(int mm,int nn) {  m = mm;   n = nn;  } //設置m  public void set_mn(int mm,int nn) {  m = mm;   n = nn;  }  //設置m  public void set_m(int mm) {   m = mm;  }  //設置n  public void set_n(int nn) {   n = nn;  } //初始化  public void init_matrix() {   arr = new float[m * n];  }  //釋放  public void free_matrix() {  //delete [] arr; }  //讀取i,j坐標的數據  //失敗返回-31415,成功返回值  public float read(int i,int j) {  if (i >= m || j >= n)  {   return -31415;  }  //return *(arr + i * n + j);  return arr[i * n + j]; }  //寫入i,j坐標的數據  //失敗返回-1,成功返回1  public int write(int i,int j,float val) {  if (i >= m || j >= n)  {   return -1;  }  arr[i * n + j] = val;  return 1; } };//二維運算類 class _Matrix_Calc {  //初始化 public _Matrix_Calc() { } //C = A + B  //成功返回1,失敗返回-1  public int add(ref _Matrix A,ref _Matrix B,ref _Matrix C) {   int i = 0;   int j = 0;   //判斷是否可以運算   if (A.m != B.m || A.n != B.n ||    A.m != C.m || A.n != C.n)   {    return -1;   }   //運算   for (i = 0;i < C.m;i++)   {    for (j = 0;j < C.n;j++)    {     C.write(i,j,A.read(i,j) + B.read(i,j));    }   }   return 1;  }  //C = A - B  //成功返回1,失敗返回-1  public int subtract(ref _Matrix A,ref _Matrix B, ref _Matrix C) {   int i = 0;   int j = 0;   //判斷是否可以運算   if (A.m != B.m || A.n != B.n ||    A.m != C.m || A.n != C.n)   {    return -1;   }   //運算   for (i = 0;i < C.m;i++)   {    for (j = 0;j < C.n;j++)    {     C.write(i,j,A.read(i,j) - B.read(i,j));    }   }   return 1;  }  //C = A * B  //成功返回1,失敗返回-1  public int multiply(ref _Matrix A, ref _Matrix B, ref _Matrix C) {   int i = 0;   int j = 0;   int k = 0;   float temp = 0;   //判斷是否可以運算   if (A.m != C.m || B.n != C.n ||    A.n != B.m)   {    return -1;   }   //運算   for (i = 0;i < C.m;i++)   {    for (j = 0;j < C.n;j++)    {     temp = 0;     for (k = 0;k < A.n;k++)     {      temp += A.read(i,k) * B.read(k,j);     }     C.write(i,j,temp);    }   }   return 1;  }  //行列式的值,只能計算2 * 2,3 * 3  //失敗返回-31415,成功返回值  public float det(ref _Matrix A) {   float value = 0;   //判斷是否可以運算   if (A.m != A.n || (A.m != 2 && A.m != 3))   {    return -31415;   }   //運算   if (A.m == 2)   {    value = A.read(0,0) * A.read(1,1) - A.read(0,1) * A.read(1,0);   }   else   {    value = A.read(0,0) * A.read(1,1) * A.read(2,2) +      A.read(0,1) * A.read(1,2) * A.read(2,0) +      A.read(0,2) * A.read(1,0) * A.read(2,1) -      A.read(0,0) * A.read(1,2) * A.read(2,1) -      A.read(0,1) * A.read(1,0) * A.read(2,2) -      A.read(0,2) * A.read(1,1) * A.read(2,0);   }   return value;  } //求轉置矩陣,B = AT  //成功返回1,失敗返回-1  public int transpos(ref _Matrix A,ref _Matrix B) {   int i = 0;   int j = 0;   //判斷是否可以運算   if (A.m != B.n || A.n != B.m)   {    return -1;   }   //運算   for (i = 0;i < B.m;i++)   {    for (j = 0;j < B.n;j++)    {     B.write(i,j,A.read(j,i));    }   }   return 1;  }  //求逆矩陣,B = A^(-1)  //成功返回1,失敗返回-1  public int inverse(ref _Matrix A, ref _Matrix B) {   int i = 0;   int j = 0;   int k = 0;   _Matrix m = new _Matrix(A.m,2 * A.m);   float temp = 0;   float b = 0;   //判斷是否可以運算   if (A.m != A.n || B.m != B.n || A.m != B.m)   {    return -1;   }   /*   //如果是2維或者3維求行列式判斷是否可逆   if (A.m == 2 || A.m == 3)   {    if (det(A) == 0)    {     return -1;    }   }   */   //增廣矩陣m = A | B初始化   m.init_matrix();   for (i = 0;i < m.m;i++)   {    for (j = 0;j < m.n;j++)    {     if (j <= A.n - 1)     {      m.write(i,j,A.read(i,j));     }     else     {      if (i == j - A.n)      {       m.write(i,j,1);      }      else      {       m.write(i,j,0);      }     }    }   }   //高斯消元   //變換下三角   for (k = 0;k < m.m - 1;k++)   {    //如果坐標為k,k的數為0,則行變換    if (m.read(k,k) == 0)    {     for (i = k + 1;i < m.m;i++)     {      if (m.read(i,k) != 0)      {       break;      }     }     if (i >= m.m)     {      return -1;     }     else     {      //交換行      for (j = 0;j < m.n;j++)      {       temp = m.read(k,j);       m.write(k,j,m.read(k + 1,j));       m.write(k + 1,j,temp);      }     }    }    //消元    for (i = k + 1;i < m.m;i++)    {     //獲得倍數     b = m.read(i,k) / m.read(k,k);     //行變換     for (j = 0;j < m.n;j++)     {      temp = m.read(i,j) - b * m.read(k,j);      m.write(i,j,temp);     }    }   }   //變換上三角   for (k = m.m - 1;k > 0;k--)   {    //如果坐標為k,k的數為0,則行變換    if (m.read(k,k) == 0)    {     for (i = k + 1;i < m.m;i++)     {      if (m.read(i,k) != 0)      {       break;      }     }     if (i >= m.m)     {      return -1;     }     else     {      //交換行      for (j = 0;j < m.n;j++)      {       temp = m.read(k,j);       m.write(k,j,m.read(k + 1,j));       m.write(k + 1,j,temp);      }     }    }    //消元    for (i = k - 1;i >= 0;i--)    {     //獲得倍數     b = m.read(i,k) / m.read(k,k);     //行變換     for (j = 0;j < m.n;j++)     {      temp = m.read(i,j) - b * m.read(k,j);      m.write(i,j,temp);     }    }   }   //將左邊方陣化為單位矩陣   for (i = 0;i < m.m;i++)   {    if (m.read(i,i) != 1)    {     //獲得倍數     b = 1 / m.read(i,i);     //行變換     for (j = 0;j < m.n;j++)     {      temp = m.read(i,j) * b;      m.write(i,j,temp);     }    }   }   //求得逆矩陣   for (i = 0;i < B.m;i++)   {    for (j = 0;j < B.m;j++)    {     B.write(i,j,m.read(i,j + m.m));    }   }   //釋放增廣矩陣   m.free_matrix();   return 1;  } }; namespace test{ public partial class Form1 : Form {  double zk;  double xkg, pkg, kk, xk, pk, q, r;  public Form1()  {   InitializeComponent();   xk = 0;   pk = 0;   q = 0.00001;   r = 0.0001;   int i = 0;   int j = 0;   int k = 0;    _Matrix_Calc m_c = new _Matrix_Calc();    //_Matrix m1 = new _Matrix(3,3);    //_Matrix m2 = new _Matrix(3,3);   //_Matrix m3 = new _Matrix(3,3);   _Matrix m1 = new _Matrix(2, 2);   _Matrix m2 = new _Matrix(2, 2);   _Matrix m3 = new _Matrix(2, 2);    //初始化內存    m1.init_matrix();    m2.init_matrix();    m3.init_matrix();    //初始化數據    k = 1;    for (i = 0;i < m1.m;i++)    {     for (j = 0;j < m1.n;j++)     {      m1.write(i,j,k++);     }    }    for (i = 0;i < m2.m;i++)    {     for (j = 0;j < m2.n;j++)     {      m2.write(i,j,k++);     }    }   m_c.multiply(ref m1,ref m2, ref m3);   //output.Text = Convert.ToString(m3.read(1,1));   output.Text = Convert.ToString(m_c.det(ref m1));  }  /*  private void button1_Click(object sender, EventArgs e)  {   zk = Convert.ToDouble(input.Text);   //時間方程   xkg = xk;   pkg = pk + q;   //狀態方程   kk = pkg / (pkg + r);   xk = xkg + kk * (zk - xkg);   pk = (1 - kk) * pkg;   //輸出   output.Text = Convert.ToString(xk);  }  private void textBox1_TextChanged(object sender, EventArgs e)  {  }   * */ }}

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av电影院| 国产精品电影久久久久电影网| 亚洲伊人一本大道中文字幕| 亚洲aa在线观看| 亚洲欧美中文日韩在线| 国内精品小视频在线观看| 国产精品jizz在线观看麻豆| 伊人成人开心激情综合网| 国产中文日韩欧美| 中文字幕日韩免费视频| 亚洲第一男人av| 伊人一区二区三区久久精品| 欧美成人精品一区| 91成人福利在线| 国产盗摄xxxx视频xxx69| 国产精品96久久久久久| 日韩免费电影在线观看| 日韩精品极品视频| 九九综合九九综合| 2019最新中文字幕| 97在线免费观看视频| 色综合天天狠天天透天天伊人| 欧美日韩国产999| 国产精品视频自拍| 成人免费福利在线| 欧美与欧洲交xxxx免费观看| 欧美成人精品三级在线观看| 精品成人av一区| 在线观看欧美日韩国产| 亚洲视频电影图片偷拍一区| 2019中文字幕在线| 国产精品夜色7777狼人| 亚洲精品女av网站| 亚洲18私人小影院| 福利一区视频在线观看| 亚洲一区www| 日韩女优人人人人射在线视频| 国产亚洲精品综合一区91| 久久av在线看| 国产福利视频一区二区| 国产精品女人网站| 国产主播精品在线| 精品久久久国产| 国产日韩欧美自拍| 日韩一区视频在线| 亚洲人成啪啪网站| 国产日韩av在线播放| 中文字幕视频在线免费欧美日韩综合在线看| 91精品国产色综合久久不卡98| 日韩电影中文字幕在线| 久热在线中文字幕色999舞| 欧美成人亚洲成人日韩成人| 色噜噜国产精品视频一区二区| 亚洲2020天天堂在线观看| 国产精品一区二区三区成人| 91精品国产综合久久香蕉的用户体验| 成人观看高清在线观看免费| 国产日韩欧美一二三区| 国内免费久久久久久久久久久| 欧美亚洲一区在线| 欧美在线视频一区二区| 91国产精品91| 精品一区二区三区四区在线| 日韩电影中文字幕在线| 国产精品久久久av| 国产精品爽爽爽| 欧美性猛交xxxx久久久| 欧美在线免费看| 国产在线播放不卡| 国产在线98福利播放视频| 在线观看国产精品日韩av| 久久久精品久久久久| 国产精品成人一区二区| 亚洲成人1234| 国产精品国产三级国产aⅴ浪潮| 亚洲专区国产精品| 国产精品美女主播在线观看纯欲| 国产精品美乳在线观看| 国产精品视频专区| 欧美日韩国产精品| 亚洲欧美精品在线| 国产成人欧美在线观看| 91精品视频免费看| 最近中文字幕2019免费| 国产成人免费91av在线| 97视频在线观看播放| 亚洲毛片在线免费观看| www欧美日韩| 欧美性生交大片免费| 精品国产一区二区三区久久久狼| 日本伊人精品一区二区三区介绍| 国内精品久久久久久影视8| 亚洲精品wwwww| 精品中文视频在线| 亚洲欧美另类国产| 91大神福利视频在线| 国产精品入口免费视| 日韩欧美在线免费观看| 久久精品免费电影| 国产精品www色诱视频| 欧洲美女7788成人免费视频| 国产精品高潮呻吟久久av黑人| 亚洲欧美国产va在线影院| 亚洲精品视频网上网址在线观看| 国产精品久久久av| 91tv亚洲精品香蕉国产一区7ujn| 国产精品99久久久久久久久久久久| 日韩国产欧美精品一区二区三区| 亚洲日韩欧美视频| 久久久久国产视频| 精品五月天久久| 精品亚洲精品福利线在观看| 这里只有精品视频| 91久久久久久国产精品| 日韩成人在线网站| 日韩少妇与小伙激情| 欧美精品18videosex性欧美| 九九精品在线观看| 中文字幕最新精品| 国产欧美在线观看| 热re91久久精品国99热蜜臀| 欧美精品在线观看| 久热精品视频在线免费观看| 97视频在线观看成人| 色妞久久福利网| 国产成人精品一区二区在线| 97在线看免费观看视频在线观看| 最近2019年日本中文免费字幕| 日韩在线精品一区| 91色精品视频在线| 亚洲性夜色噜噜噜7777| 日韩天堂在线视频| 久久精品亚洲94久久精品| 久久久国产在线视频| 久久久久久国产精品久久| 亚洲色图综合久久| 国产精品网站大全| 国产一区二区美女视频| 亚洲free性xxxx护士hd| 日韩欧美中文字幕在线播放| 神马国产精品影院av| 亚洲欧美三级伦理| 国产日韩欧美电影在线观看| 亚洲国产婷婷香蕉久久久久久| 黄色91在线观看| 成人a在线视频| 国产精品美女在线观看| 亚洲色图35p| 亚洲精品国产精品久久清纯直播| 成人信息集中地欧美| 国产精品久久久久久久久男| 亚洲欧美三级伦理| 日本免费一区二区三区视频观看| 欧美成人黄色小视频| 国产精品91视频| 欧美日韩国产精品专区| 国产a∨精品一区二区三区不卡| 97婷婷涩涩精品一区| 日本午夜在线亚洲.国产| 亚洲精品美女久久久| 精品一区二区电影| 亚洲伊人成综合成人网| 亚洲影视九九影院在线观看| 欧美日韩一区二区三区|