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