2

行列とベクトルを乗算したいのですが、行列とベクトルをmalloc配列に格納する関数をすでに作成しました。この関数では、mallocを使用して別の配列を作成し、最初に回答を格納する必要があります。次に、計算を行います(http://www.facstaff.bucknell.edu/mastascu/elessonsHTML/Circuit/MatVecMultiply.htm)

#include <stdlib.h>
/* Multiply a matrix by a vector. */
double *matrix_vector_multiply(int rows, int cols,
               double **mat, double *vec){

 // creating an vecotr to hold the answer first

 double *ans= malloc(rows* sizeof(double));

 // do the multiplication:
 mulitply **mat and *vec (mat = the matrix and vec is the vector)

 for (rows=0; rows< ; rows++)
    for (cols=0; cols< ; cols++)
        ans[rows] = ans[rows] + vec[rows][cols] * mat[rows];    

 //not sure if it is right

 // then store the answer back to the ans array            


}

主な機能:

double *matrix_vector_multiply(int rows, int cols,
               double **mat, double *vec);

int main(){
  double *answer = matrix_vector_multiply(rows, cols, matrix, vector);

  printf("Answer vector: \n");
  print_vector(rows, answer);
  return 0;
 }

ポインタを使ってこの乗算を行い、それを元に戻す方法がわからない..助けていただければ幸いです。ありがとう!

編集:乗算関数:

#include <stdlib.h>
/* Multiply a matrix by a vector. */
double *matrix_vector_multiply(int rows, int cols,
               double **mat, double *vec){

double *ans = malloc(rows * sizeof (double));   
int i;  
for (i=0; i<rows; rows++)
    for (i=0; i<cols; cols++)
        ans[rows] = ans[rows] + vec[rows][cols] * mat[rows];    

return ans;            

}

しかし、12行目でエラーが発生しています。添え字付きの値は配列またはポインターのいずれかです

4

1 に答える 1

2

あなたの関数にはいくつかの間違いがあります:

  1. for ループで行列を反復するための変数は、関数に渡した引数であってはなりません。次のようなものを試してください: for(y=0;y<rows;y++)

  2. forループでスワップする必要がありvecますmat

  3. 回答ベクトルを0(別のforループ)に初期化する必要があります

  4. return ans;掛け算の最後に答え ( ) を返す必要があります

お役に立てば幸いです、ジャン

于 2012-10-23T06:36:31.127 に答える