C#矩阵运算类.docx
- 文档编号:8784641
- 上传时间:2023-05-14
- 格式:DOCX
- 页数:11
- 大小:16.05KB
C#矩阵运算类.docx
《C#矩阵运算类.docx》由会员分享,可在线阅读,更多相关《C#矩阵运算类.docx(11页珍藏版)》请在冰点文库上搜索。
C#矩阵运算类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.IO;
usingSystem.Collections;
publicclassMatrix
{
double[,]A;
//m行n列
intm,n;
stringname;
publicMatrix(intam,intan)
{
m=am;
n=an;
A=newdouble[m,n];
name="Result";
}
publicMatrix(intam,intan,stringaName)
{
m=am;
n=an;
A=newdouble[m,n];
name=aName;
}
publicintgetM
{
get{returnm;}
}
publicintgetN
{
get{returnn;}
}
publicdouble[,]Detail
{
get{returnA;}
set{A=value;}
}
publicstringName
{
get{returnname;}
set{name=value;}
}
}
classMatrixOperator
{
MatrixOperator()
{}
///
///矩阵加法
///
///
///
///
publicstaticMatrixMatrixAdd(MatrixMa,MatrixMb)
{
intm=Ma.getM;
intn=Ma.getN;
intm2=Mb.getM;
intn2=Mb.getN;
if((m!
=m2)||(n!
=n2))
{
ExceptionmyException=newException("数组维数不匹配");
throwmyException;
}
MatrixMc=newMatrix(m,n);
double[,]c=Mc.Detail;
double[,]a=Ma.Detail;
double[,]b=Mb.Detail;
inti,j;
for(i=0;i for(j=0;j c[i,j]=a[i,j]+b[i,j]; returnMc; } /// ///矩阵减法 /// /// /// /// publicstaticMatrixMatrixSub(MatrixMa,MatrixMb) { intm=Ma.getM; intn=Ma.getN; intm2=Mb.getM; intn2=Mb.getN; if((m! =m2)||(n! =n2)) { ExceptionmyException=newException("数组维数不匹配"); throwmyException; } MatrixMc=newMatrix(m,n); double[,]c=Mc.Detail; double[,]a=Ma.Detail; double[,]b=Mb.Detail; inti,j; for(i=0;i for(j=0;j c[i,j]=a[i,j]-b[i,j]; returnMc; } /// ///矩阵打印 /// /// /// publicstaticstringMatrixPrint(MatrixMa) { strings; s=Ma.Name+": \n"; intm=Ma.getM; intn=Ma.getN; double[,]a=Ma.Detail; for(inti=0;i { for(intj=0;j { s+=a[i,j].ToString("0.0000")+"\t"; } s+="\n"; } returns; } /// ///矩阵乘法 /// /// /// /// publicstaticMatrixMatrixMulti(MatrixMa,MatrixMb) { intm=Ma.getM; intn=Ma.getN; intm2=Mb.getM; intn2=Mb.getN; if(n! =m2) { ExceptionmyException=newException("数组维数不匹配"); throwmyException; } MatrixMc=newMatrix(m,n2); double[,]c=Mc.Detail; double[,]a=Ma.Detail; double[,]b=Mb.Detail; inti,j,k; for(i=0;i for(j=0;j { c[i,j]=0; for(k=0;k c[i,j]+=a[i,k]*b[k,j]; } returnMc; } /// ///矩阵数乘 /// /// /// /// publicstaticMatrixMatrixSimpleMulti(doublek,MatrixMa) { intn=Ma.getN; intm=Ma.getM; MatrixMc=newMatrix(m,n); double[,]c=Mc.Detail; double[,]a=Ma.Detail; inti,j; for(i=0;i for(j=0;j c[i,j]=a[i,j]*k; returnMc; } /// ///矩阵转置 /// /// /// /// publicstaticMatrixMatrixTrans(MatrixMa) { intm=Ma.getM; intn=Ma.getN; MatrixMc=newMatrix(n,m); double[,]c=Mc.Detail; double[,]a=Ma.Detail; for(inti=0;i for(intj=0;j c[i,j]=a[j,i]; returnMc; } /// ///矩阵求逆(高斯法) /// /// /// publicstaticMatrixMatrixInv(MatrixMa) { intm=Ma.getM; intn=Ma.getN; if(m! =n) { ExceptionmyException=newException("数组维数不匹配"); throwmyException; } MatrixMc=newMatrix(m,n); double[,]a0=Ma.Detail; double[,]a=(double[,])a0.Clone(); double[,]b=Mc.Detail; inti,j,row,k; doublemax,temp; //单位矩阵 for(i=0;i { b[i,i]=1; } for(k=0;k { max=0;row=k; //找最大元,其所在行为row for(i=k;i { temp=Math.Abs(a[i,k]); if(max { max=temp; row=i; } } if(max==0) { ExceptionmyException=newException("没有逆矩阵"); throwmyException; } //交换k与row行 if(row! =k) { for(j=0;j { temp=a[row,j]; a[row,j]=a[k,j]; a[k,j]=temp; temp=b[row,j]; b[row,j]=b[k,j]; b[k,j]=temp; } } //首元化为1 for(j=k+1;j for(j=0;j a[k,k]=1; //k列化为0 //对a for(j=k+1;j { for(i=0;i for(i=k+1;i } //对b for(j=0;j { for(i=0;i for(i=k+1;i } for(i=0;i a[k,k]=1; } returnMc; } /// ///矩阵求逆(伴随矩阵法) /// /// /// publicstaticMatrixMatrixInvByCom(MatrixMa) { doubled=MatrixOperator.MatrixDet(Ma); if(d==0) { ExceptionmyException=newException("没有逆矩阵"); throwmyException; } MatrixAx=MatrixOperator.MatrixCom(Ma); MatrixAn=MatrixOperator.MatrixSimpleMulti((1.0/d),Ax); returnAn; } /// ///对应行列式的代数余子式矩阵 /// /// /// publicstaticMatrixMatrixSpa(MatrixMa,intai,intaj) { intm=Ma.getM; intn=Ma.getN; if(m! =n) { ExceptionmyException=newException("数组维数不匹配"); throwmyException; } intn2=n-1; MatrixMc=newMatrix(n2,n2); double[,]a=Ma.Detail; double[,]b=Mc.Detail; //左上 for(inti=0;i for(intj=0;j { b[i,j]=a[i,j]; } //右下 for(inti=ai;i for(intj=aj;j { b[i,j]=a[i+1,j+1]; } //右上 for(inti=0;i for(intj=aj;j { b[i,j]=a[i,j+1]; } //左下 for(inti=ai;i for(intj=0;j { b[i,j]=a[i+1,j]; } //符号位 if((ai+aj)%2! =0) { for(inti=0;i b[i,0]=-b[i,0]; } returnMc; } /// ///矩阵的行列式 /// /// /// publicstaticdoubleMatrixDet(MatrixMa) { intm=Ma.getM; intn=Ma.getN; if(m! =n) { ExceptionmyException=newException("数组维数不匹配"); throwmyException; } double[,]a=Ma.Detail; if(n==1)returna[0,0]; doubleD=0; for(inti=0;i { D+=a[1,i]*MatrixDet(MatrixSpa(Ma,1,i)); } returnD; } /// ///矩阵的伴随矩阵 /// /// /// publicstaticMatrixMatrixCom(MatrixMa) { intm=Ma.getM; intn=Ma.getN; MatrixMc=newMatrix(m,n); double[,]c=Mc.Detail; double[,]a=Ma.Detail; for(inti=0;i for(intj=0;j c[i,j]=MatrixDet(MatrixSpa(Ma,j,i)); returnMc; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 矩阵 运算
![提示](https://static.bingdoc.com/images/bang_tan.gif)