复习数学1的线性代数矩阵相乘这块有点晕想编个C对象化的矩阵相乘小程序。相乘部分1234567891011121314voidsum(juzhen a, juzhen b, juzhen c){ints0;for(inti 1; i a.m1(); i)//A矩阵的Mfor(intj 1; j b.n1(); j)//B矩阵的S{for(k0 1; k0 a.n1(); k0)//a.n1也就是b.m1(a的nb的n)【行向量*列向量】{s a.read(i,k0)*b.read(k0,j);}c.write(i, j, s);s 0;}}公式代码中的头两个for循环就是ij的。公式中的k从1到p求和就是里面的k0的for循环。容易出现误解的就是公式中只是表示第“[i][j]”元素而不是整个矩阵整个矩阵的结果需要外面的两个for循环。本质这就是个p维向量高中就记2维的两向量相乘公式而已【结果为数是新矩阵的一个元素】可运行代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475#includeiostream#include stringusingnamespacestd;classjuzhen{private:intm,n;//长宽intnum[10][10] {0};string name;public:voidsize(inta,intb){ m a;n b; }voidset(){cout 此矩阵规模this-m this-n endl;//for(inti 1; i this-m; i)for(intj 1; j this-n; j){cin this-num[i][j];}cout 输入完成 endl;}voiddisplay(){for(inti 1; i this-m; i)//i为行号第几行j为列号for(intj 1; j this-n; j){cout this-num[i][j] ;if(j this-n) cout endl;//先输出再换行}}intread(inta,intb) {returnnum[a][b]; }//调用此函数得[m][n]元素的值voidwrite(inta,intb,intcount) { num[a][b]count; }//第三个参数的值传递给[a][b]元素intm1() {returnm; }//调用得到矩阵的mintn1() {returnn; }//调用得到矩阵的n};intm0, n0, s0, k0;//矩阵规模容易搞混的东西voidsum(juzhen a, juzhen b, juzhen c)//矩阵相乘公式所在。。。【要改实参值的要用引用】{for(inti 1; i a.m1(); i)//A矩阵的Mfor(intj 1; j b.n1(); j)//B矩阵的S{ints 0;for(k0 1; k0 a.n1(); k0)//a.n1也就是b.m1(a的nb的n)【行向量*列向量】{s a.read(i,k0)*b.read(k0,j);//因为用了C所以没那么直观就是a[i][k]*b[k][j]套个for循环求累加和就是高中时向量的点乘}c.write(i, j, s);}}intmain(){juzhen A,B,C;cout 设定m,s,n。A的m*s,B的s*n(横条数*纵条数)endl;cin m0 s0 n0;A.size(m0, s0);B.size(s0, n0);C.size(m0, n0);A.set();B.set();sum(A, B, C);//CA*Bcout 结果C的m*n endl;C.display();return0;}样例输入及输出1 0 1 0 1 00 1 * 0 1 0 1如图所示两个矩阵懒得打了……就如图所示两个矩阵PS函数中形参引用真好用过去一直不知道省得用指针了。不然改不了C矩阵的实际元素值12voidsum(juzhen a, juzhen b, juzhen c)//矩阵相乘公式所在。。。【要改实参值的要用引用】以上就是本文的全部内容希望对大家的学习有所帮助