作者bonmeepon (爆米香)
看板C_and_CPP
标题Re: [问题] 运算子多载
时间Fri Sep 8 00:13:36 2006
: : 传 reference
: : 自己写个 matrix class
: : 然後自己存它的大小
: 这边我不太懂
: matrix class主要的功能是?
写一个class,里面含有一些运算的function,你会用到什麽矩阵的运算都可写上去
例如:inverse,矩阵相乘,矩阵相加
若只是固定形式(例如只有3*3矩阵)的矩阵就自己写一写function,
不一定要通用的function,若要通用的function就自己再多花点心力写
这考验程式语言的功力,写矩阵运算其实可放到大学的程式课中当作业
最近写了两个,可以参考
void CLC::inv(double* input)
{
//给定矩阵第一个元素的位址(input)即可
//还原矩阵
double A[3][3];
int index=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
A[i][j]=*(input+index);
index++;
}
}
//请看工数课本
double C[3][3],invresult[3][3];
C[0][0]=A[1][1]*A[2][2]-A[2][1]*A[1][2];
C[0][1]=-(A[1][0]*A[2][2]-A[2][0]*A[1][2]);
C[0][2]=A[1][0]*A[2][1]-A[2][0]*A[1][1];
C[1][0]=-(A[0][1]*A[2][2]-A[2][1]*A[0][2]);
C[1][1]=A[0][0]*A[2][2]-A[2][0]*A[0][2];
C[1][2]=-(A[0][0]*A[2][1]-A[2][0]*A[0][1]);
C[2][0]=A[0][1]*A[1][2]-A[1][1]*A[0][2];
C[2][1]=-(A[0][0]*A[1][2]-A[1][0]*A[0][2]);
C[2][2]=A[0][0]*A[1][1]-A[1][0]*A[0][1];
double det=A[0][0]*A[1][1]*A[2][2]+A[0][1]*A[1][2]*A[2][0]
+A[0][2]*A[1][0]*A[2][1]-A[0][0]*A[2][1]*A[1][2]
-A[1][0]*A[0][1]*A[2][2]-A[2][0]*A[1][1]*A[0][2];
for(int i=0;i<=2;i++)
{
for(int j=0;j<=2;j++)
{
invresult[i][j]=C[j][i]/det;
}
}
//还未输出其输出值,所以还未能使用
}
void CLC::multiply(double *input1, double *input2)
{
double A[3][3],B[3][3],after[3][3][3],result[3][3];
//读入两矩阵填入A,B
int index=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
A[i][j]=*(input1+index);
B[i][j]=*(input2+index);
index++;
}
}
//矩阵相乘
memset(after,0x00,sizeof(after));
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
double sum=0;
for(k=0;k<3;k++)
{
after[i][j][k]=A[i][k]*B[k][j];
sum=sum+after[i][j][k];
}
result[i][j]=sum;
//将值放到全域变数result_container中
result_container[i][j]=result[i][j];
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.142.2.205
1F:推 rahim:谢谢罗 请问一下 函数的回传值可以回传矩阵回去吗? 09/08 14:29
2F:→ rahim:还有如果要回传矩阵的话 要怎麽写呢? 09/08 14:30