题目要求要把矩阵用CSR的形式写入一个文件,再在另一个程序中读取它与一个向量进行乘法运算。两个程序都在这里。
#include
#include
int main(int argc, char* argv[])
{
double matrix_entries[9]={5,3,2,3,1,2,-1,1,1};
int column_no[9]={1,3,4,2,4,4,1,2,4};
int row_start[5]={1,4,6,7,10};
double dimension=4, nonzero_number=9;
std::ofstream myfile;//Define output stream
myfile.open("input.dat");//Open file
assert(myfile.is_open());//Check file is open
for(int i=0;i<9;i++)
{
myfile<<matrix_entries[i]<<"\n";
}
for(int i=0;i<9;i++)
{
myfile<<column_no[i]<<"\n";
}
for(int i=0;i<5;i++)
{
myfile<<row_start[i]<<"\n";
}
myfile<<dimension<<"\n";
myfile<<nonzero_number<<"\n";
myfile.close();
return 0;
}
#include
#include
#include
double sp_matrix_multiply(double *matrix_entries, int *column_no, int *row_start, double *x, int n);
int main(int argc, char argv[])
{
double *matrix_entries;
int *row_start, *column_no;
matrix_entries=new double[9];
column_no=new int[9];
row_start=new int[5];
std::ifstream myfile;//Define input stream
myfile.open("input.dat");//Open file
assert(myfile.is_open());//Check file is open
//Read the vectors matrix_entries, column_no and row_start from input.dat
for(int i=0;i<9;i++)
{
myfile>>matrix_entries[i];
}
for(int i=0;i<9;i++)
{
myfile>>column_no[i];
}
for(int i=0;i<5;i++)
{
myfile>>row_start[i];
}
myfile.close();
//Call the function
double x[4]={6.0,0.5,2.0,-1.5};
int n=4;
double *y;
y=sp_matrix_multiply(matrix_entries,column_no,row_start,x,n);
for (int i=0;i<n;i++)
{
std::cout<<y[i]<<"\n";
}
delete []matrix_entries;
delete []column_no;
delete []row_start;
delete []y;
return 0;
}
double *sp_matrix_multiply(double *matrix_entries, int *column_no, int *row_start, double *x, int n)
{
int i,j;
double *result;
result=new double[4];
for(i=0;i<n;i++)
{
for(j=row_start[i]-1;j<row_start[i+1]-1;j++)
{
result[i]+=matrix_entries[j]*x[column_no[j]-1];
}
}
return result;
}
最后运行时得到的结果是
33
2.67704e+264(正确的应该是0)
-3
-7
不知道哪里出了错...有没有大神能帮忙看一下