Re: [問題] 運算子多載
: : 傳 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
推
09/08 14:29, , 1F
09/08 14:29, 1F
→
09/08 14:30, , 2F
09/08 14:30, 2F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章