用C语言乘以矩阵和向量

用C语言乘以矩阵和向量,c,arrays,2d,malloc,C,Arrays,2d,Malloc,我想乘以一个矩阵和一个向量,我已经编写了函数来存储malloc数组中的矩阵和向量。对于这个函数,我需要先使用malloc创建另一个数组来存储我的答案。然后进行计算(http://www.facstaff.bucknell.edu/mastascu/elessonsHTML/Circuit/MatVecMultiply.htm) 不知道如何使用指针进行乘法,然后将其存储回。。 任何帮助都将不胜感激!谢谢 编辑:乘法函数: double *matrix_vector_multiply(int row

我想乘以一个矩阵和一个向量,我已经编写了函数来存储malloc数组中的矩阵和向量。对于这个函数,我需要先使用malloc创建另一个数组来存储我的答案。然后进行计算(http://www.facstaff.bucknell.edu/mastascu/elessonsHTML/Circuit/MatVecMultiply.htm)

不知道如何使用指针进行乘法,然后将其存储回。。 任何帮助都将不胜感激!谢谢

编辑:乘法函数:

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;            
#包括
/*将矩阵乘以向量*/
double*矩阵向量乘(int行,int列,
双**垫,双*vec){
double*ans=malloc(行*sizeof(双));
int i;

对于(i=0;i,函数中有几个错误:

  • for循环中用于迭代矩阵的变量不应是传递给函数的参数。请尝试以下方法:
    for(y=0;yi如果你不能做指针,那么就做应该更明显的数组操作。如果你有
    double*vec
    ,那么你可以访问
    vec[0]
    vec[1]
    等等。矩阵乘以向量会产生一个向量,而不是一个矩阵,所以你应该只有一个
    double*ans=malloc(rows*sizeof(double))
    保存答案。然后,您可以使用
    mat[i][j]
    访问输入矩阵的每个元素,使用
    vec[i]
    访问输入向量的每个元素,因此只需应用通常的数学计算答案的每个元素,并将其存储在
    ans[i]中即可
    .j_random_hacker是对的。实际上,函数
    matrix_vector_multiply
    被定义为返回一个双精度数组,因此您试图生成的结果与函数返回值不兼容(
    ans
    的类型是double**,而不是double*).这是家庭作业吗?你是对的,ans应该是一个向量。我刚刚做了一些编辑。我将把数学部分放进去,你可以看看它是否正确。我应该添加返回ans;最后?嘿,sl,这是我编辑的函数,数学不正确。我不认为:#include/*用向量乘以矩阵。*/double*矩阵_向量_乘法(int rows,int cols,double**mat,double*vec){double*ans=malloc(rows*sizeof(double));int i;用于(i=0;i您必须在for循环中增加
    i
    not
    ,并且在for循环中需要两个变量进行乘法:一个从
    0
    rows-1
    ,另一个从
    0
    cols-1
    #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;