C#矩阵运算类.docx

上传人:b****5 文档编号:8784641 上传时间:2023-05-14 格式:DOCX 页数:11 大小:16.05KB
下载 相关 举报
C#矩阵运算类.docx_第1页
第1页 / 共11页
C#矩阵运算类.docx_第2页
第2页 / 共11页
C#矩阵运算类.docx_第3页
第3页 / 共11页
C#矩阵运算类.docx_第4页
第4页 / 共11页
C#矩阵运算类.docx_第5页
第5页 / 共11页
C#矩阵运算类.docx_第6页
第6页 / 共11页
C#矩阵运算类.docx_第7页
第7页 / 共11页
C#矩阵运算类.docx_第8页
第8页 / 共11页
C#矩阵运算类.docx_第9页
第9页 / 共11页
C#矩阵运算类.docx_第10页
第10页 / 共11页
C#矩阵运算类.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C#矩阵运算类.docx

《C#矩阵运算类.docx》由会员分享,可在线阅读,更多相关《C#矩阵运算类.docx(11页珍藏版)》请在冰点文库上搜索。

C#矩阵运算类.docx

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;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2