nnmy0617 2019-11-20 07:31
浏览 189

C++计算一个稀疏矩阵与向量的乘积,得出的结果里有一个数是错误的,其他的数都是正确的,这是为什么?

题目要求要把矩阵用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

不知道哪里出了错...有没有大神能帮忙看一下

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
    • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
    • ¥15 错误 LNK2001 无法解析的外部符号
    • ¥50 安装pyaudiokits失败
    • ¥15 计组这些题应该咋做呀
    • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
    • ¥15 让node服务器有自动加载文件的功能