Re: [問題] 運算子多載

看板C_and_CPP (C/C++)作者 (爆米香)時間18年前 (2006/09/08 00:01), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
: : 傳 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
文章代碼(AID): #15048-8R (C_and_CPP)
文章代碼(AID): #15048-8R (C_and_CPP)