2011-07-06 20 views
-2

私は、ユーザー定義のサイズの行列を乗算できるプログラムの作成に取り組んでいます。私はベクトルを使って値を行列に格納します。ベクトルを使った行列の乗算 - C++

void Multiply(vector<float> A,vector<float> B,int rA, int cA,int rB,int cB) 
{ 
system(CLEARSCREEN); 

vector<float> C; // The resulting matrix 

int sizeA=rA*cA; 
int sizeB=rB*cB; 
int sizeC=rA*cB; 

int lrA=sizeA-1; 
int lrB=sizeB-1; 

int writeHead=0; 

A.resize(sizeA); 
B.resize(sizeB); 
C.resize(sizeC); 

demoDisplay(rA,rB,cA,cB,lrA,lrB,sizeA,sizeB); 

for(;writeHead<=lrA; writeHead++) 
{ 
    cout << "Please enter a value for \"" << alphabet[writeHead] << "\" in MATRIX A.\n"; 
    cin >> A[writeHead]; 
} 
cout << "\n"; 
writeHead=0; 
for (;writeHead<=lrB; writeHead++) 
{ 
    cout << "Please enter a value for \"" << alphabet[writeHead] << "\" in MATRIX B.\n"; 
    cin >> B[writeHead]; 
} 

cout << "\n\n"; 

displayMatrices(A,B,rA,rB,cA,cB,lrA,lrB,sizeA,sizeB); 

for (int colRead=0; colRead<=cA; colRead++) { 
    // somehow iterate through each element of the vector? 

} 
} 

私はC++には比較的新しいので、実際の2つの行列の乗算の仕方はあまりよく分かりません。誰かが助けることができれば、それは素晴らしいだろう。

+9

数学で行列乗算を行う方法を知っていますか? –

+0

ベクトルと行列は概念的に異なっています(たとえもう一方の関数で実装することができたとしても)。これは、 "Matrix"クラスで自分でメモリを扱う必要があるケースの1つです。結局のところC++なので、これは教師が期待していることです。 – Andrei

+0

マトリックスを保存するには、Boost.orgが提供するマトリックスライブラリユーティリティを使用できます。http://www.boost.org/doc/libs/1_46_1/libs/numeric/ublas/doc/index.htm –

答えて

2

多分あなたはベクトルコンテナの名前で誤解されていたかもしれません。それは数学的な使用を暗示しているかもしれません。ベクトルテンプレートは、行列の乗算やベクトルの乗算を行う機能を提供しません。この場合のベクトルは、行列を格納するコンテナを提供するだけです。明らかに、線形化された方法で行列を格納すると、後で乗算が複雑になります。

は、あなたがそれがそうであったならば、あなただけのいくつかの他の容器を使用している可能性があるため、実際に、ベクトルを反復処理したいいけないさらにhttp://www.cplusplus.com/reference/stl/vector/

を必ずお読みください。あなたは、ランダムアクセスで列と行を手で掛け合わせる必要があります。このために、[] - オペレータ]またはat()メンバ関数を使用できます。例えばhereに示すよう

そしてそれは(また、いくつかの擬似コードを含む)、手で乗算を行うだけの問題です。