1、首先打开vs2015(其他版本也可以),新建一个Windows Form窗体程序或者控制台都可以。
2、 定义一个名为array1的数组并赋值:double[,] array1 = new double[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }下面求该矩阵转置矩阵。
3、接下来实现矩阵的转置运算,可以写函数也可以写类,右键解决方案下的项目名,添加-类。
4、创建一个名为“turnzhi”的类(名字随便取,最好用英文,有时候中文名程序会报错),然后点击“添加”。
5、转置类的代码如下图所示。
6、在主程序调用转置类,用两个for循坏将转置后的数组(array)输出来;并将结果显示在textbox中。
7、最后运行程序查看编写的结果:147、258、369。转置后的结果正确,这样就实现了c#矩阵的转置运算。
矩阵的表示使用二维数组,当然二维数组通常情况下是不可以动态分配的,因此最好已开始定义一个足够大的数组来存放矩阵元素。至于加减乘逆等运算,主要是利用嵌套循环操作其单个元素,由于每个人的方法不一样就不详细说了。希望对你有所帮助。//矩阵三元组之矩阵相加 相乘#include <iostream>
using namespace std
typedef int Elemtype
#define MAXSIZE 12500 //最大非零元素
typedef struct Triple
{
Elemtype value
int row,col
}Triple
typedef struct TSMatrix
{
Triple data[MAXSIZE+1]
int mu,nu,tu
}TSMatrix
TSMatrix T
void InputMatrix(TSMatrix &T) //输入t个非零元素
{
cout<<"请输入稀疏矩阵的信息,(行,列,非零元素个数)"<<endl
cin>>T.mu>>T.nu>>T.tu
int i
cout<<"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"<<endl
for(i=1i<=T.tu++i)
{
cin>>T.data[i].row>>T.data[i].col>>T.data[i].value
}
}
void Output(TSMatrix T)
{
cout<<"矩阵的三元组表示(ROW=)"<<T.mu<<" COL="<<T.nu<<"非零个数="<<T.tu<<endl
int i
for(i=1i<=T.tu++i)
{
cout<<"ROW(行):"<<T.data[i].row<<" COL(列):"<<T.data[i].col<<" Value(值)"<<T.data[i].value<<endl
}
}
void TransposeSMatrix(TSMatrix M,TSMatrix &T) //矩阵的转置
{
T.mu=M.nuT.nu=M.muT.tu=M.tu
int i,j,k=1
for(i=1i<=M.nu++i)
{
for(j=1j<=M.tu++j)
if(M.data[j].col==i)
{
T.data[k].row=i
T.data[k].col=M.data[j].row
T.data[k].value=M.data[j].value
++k
}
}
}
void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix &Q) //矩阵相加
{
int index_a,index_b,i=1,j=1,k=1
Q.mu=M.muQ.nu=M.nu
while (i<=M.tu&&j<=T.tu)
{
index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col
index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col
if(index_a<index_b)
{
Q.data[k]=M.data[i]
i++
k++
}
else if(index_a>index_b)
{
Q.data[k]=T.data[j]
j++
k++
}
else if(index_a==index_b)
{
if((M.data[i].value+T.data[j].value)!=0)
{
Q.data[k]=M.data[i]
Q.data[k].value=M.data[i].value+T.data[j].value
k++
}
++i
++j
}
}
//复制剩余元素
for(i<=M.tu++i)
{
Q.data[k]=M.data[i]
k++
}
for(j<=T.tu++j)
Q.data[k++]=T.data[j]
Q.tu=k-1
}
void Multiply(TSMatrix M,TSMatrix T,TSMatrix &Q) //相乘
{
if(M.nu!=T.mu)
{
cerr<<"两矩阵相乘不合法"<<endl
return
}
int *rowSize=new int[T.mu+1]//存放每行非零元素的个数
int *rowStart=new int[T.mu+2]//矩阵每行在三元组开始位置
int *temp=new int[T.nu+1] //存放结果矩阵中每行的计算结果
int i,Current,k,ROWM,COLM,COLB
for(i=1i<=T.mui++) rowSize[i]=0
for(i=1i<=T.tu++i) rowSize[T.data[i].row]++
rowStart[1]=1
for(i=2i<=T.mu+1i++)
rowStart[i]=rowStart[i-1]+rowSize[i-1]
Current=1k=1
while (Current<=M.tu)
{
ROWM=M.data[Current].row //当前三元组数据中元素的行号
for(i=1i<=T.nu++i) temp[i]=0
while (Current<=M.tu&&ROWM==M.data[Current].row)
{
COLM=M.data[Current].col //当前元素的列号,方便与T矩阵的行号相乘
for(i=rowStart[COLM]i<rowStart[COLM+1]i++) //对应T矩阵中每行的个数
{
COLB=T.data[i].col
temp[COLB]+=(M.data[Current].value)*(T.data[i].value)
}
Current++
}
for(i=1i<=T.nui++)
{
if(temp[i]!=0)
{
Q.data[k].row=ROWM
Q.data[k].col=i
Q.data[k].value=temp[i]
}
k++
}
}
Q.mu=M.muQ.nu=T.nu
Q.tu=k-1
}
int main()
{
TSMatrix T,M,Q,S
InputMatrix(M)
InputMatrix(T)
cout<<"两矩阵相乘"<<endl
Multiply(M,T,Q)
Output(Q)
cout<<"两矩阵相加"<<endl
AddMastrix(M,M,S)
Output(S)
system("pause")
return 0
}