c语言求矩阵乘积的问题

zhangnn016 2009-07-08 08:26:05
c语言求矩阵乘积,如下:

下面的这个是复矩阵求积的算法,应该是正确的。m是a矩阵的行数;n是a矩阵的列数,b矩阵的行数;k是b矩阵的列数。

void getvirtualmatrixmul(double ar[],double ai[],double br[],double bi[],int m,int n,int k,double cr[],double ci[])

{
int i,j,l,u,v,w;
double p,q,s;
for (i=0; i<=m-1; i++)
for (j=0; j<=k-1; j++)
{ u=i*k+j;
cr[u]=0.0; ci[u]=0.0;
for (l=0; l<=n-1; l++)
{
v=i*n+l; w=l*k+j;
p=ar[v]*br[w];
q=ai[v]*bi[w];
s=(ar[v]+ai[v])*(br[w]+bi[w]);
cr[u]=cr[u]+p-q;
ci[u]=ci[u]+s-p-q;
}
}
return;
}


这个是我用的时候:
//矩阵定义
complex<double> vfx[MT][1];
complex<double> vft0[MT][1];
double phi11_real[MT][MT],phi11_imag[MT][MT],vfx_real[MT][1],vfx_imag[MT][1],
vft0_real[MT][1],vft0_imag[MT][1],ac[MT][1],bd[MT][1],ad[MT][1],bc[MT][1];


//计算
getvirtualmatrixmul(*phi11_real,*phi11_imag,*vfx_real,*vfx_imag,global_nt,global_nt,1,*vft0_real,*vft0_imag);

调试中发现,前面的phi11(6维方阵)和vfx矩阵(6行1列)的的实部和虚部都有值(global_nt==6)。但计算中,发现得到的乘积矩阵vft0的实部和虚部只是计算出了第一行。试过多个算法,都是如此,不知道是什么问题,请各位高手指教啊!!!


分不多了,包涵啊!!!
...全文
284 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
logiciel 2009-07-09
  • 打赏
  • 举报
回复
输出的一行有哪几个数据?LZ是否能把输入数据和输出的一行显示一下?
logiciel 2009-07-09
  • 打赏
  • 举报
回复
vft0的实部和虚部传到getvirtualmatrixmul中即分别是cr[]和ci[],它们的下标是u,而u=i*k+j,因此u的变化范围覆盖了cr[]和ci[]的全部下标,也即cr[]和ci[]全部被计算过了,为什么LZ认为只计算出了第一行?也即当k=1时只计算了cr[0]和ci[0]?
zhangnn016 2009-07-09
  • 打赏
  • 举报
回复
我是在调试中发现只计算了一行 然后输出了一下,发现确实只算出了一行 呵呵 还试了其他好几个算法 基本都是这样 会不会是存储的问题?
大前置 2009-07-08
  • 打赏
  • 举报
回复
帮顶~~

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧