C++ 如何使向量的两个随机向量的克罗内克积?

C++ 如何使向量的两个随机向量的克罗内克积?,c++,C++,我需要做一个函数,它接受两个参数(两个向量的向量),结果返回一个向量的向量,它是两个给定向量的Kronecker积 无论我做什么,我的新向量都是由相同的数字创建的(应该只在最后一个位置)。例如,如果我有向量A:{3,-1},{0,5}和B:{4,3,15},{0,-5,2},我的克罗内克积将是:{10,10,10,10,10,10,10},{10,10,10,10,10,10,10}等,而不是{12,9,45,-4,-15},{0,6,0,5,2},{0,0,0,20,15,75},{0,25,

我需要做一个函数,它接受两个参数(两个向量的向量),结果返回一个向量的向量,它是两个给定向量的Kronecker积

无论我做什么,我的新向量都是由相同的数字创建的(应该只在最后一个位置)。例如,如果我有向量A:{3,-1},{0,5}和B:{4,3,15},{0,-5,2},我的克罗内克积将是:{10,10,10,10,10,10,10},{10,10,10,10,10,10,10}等,而不是{12,9,45,-4,-15},{0,6,0,5,2},{0,0,0,20,15,75},{0,25,0,10,0}

Matrix KroneckersProduct(Matrix A, Matrix B){
    Matrix mat=CreateMatrix(NoRows(A)*NoRows(B),NoCols(A)*NoCols(B));
    for(int i=0;i<NoRows(A)*NoRows(B);i++){
        for(int j=0;j<NoCols(A)*NoCols(B);j++){
            for(int k=0;k<NoRows(A);k++){
                for(int l=0;l<NoRows(B);l++){
                    for(int m=0;m<NoCols(A);m++){
                        for(int n=0;n<NoCols(B);n++){
                            mat.at(i).at(j)=A.at(k).at(m)*B.at(l).at(n);
                        }
                    }
                }
            }
        }
    }
    return mat;
}
矩阵KroneckersProduct(矩阵A、矩阵B){
矩阵矩阵=创建矩阵(NoRows(A)*NoRows(B),NoCols(A)*NoCols(B));

对于(int i=0;i这是Kronecker乘积的算法。可能我切换了
v1
v2

#include <vector>
#include <iostream>

using Matrix = std::vector<std::vector<double>>;

Matrix KroneckersProduct(Matrix v1, Matrix v2){
    Matrix v(v1.size() * v2.size(), std::vector<double>(v1[0].size() * v2[0].size()));
    for (std::size_t z1(0); z1 < v1.size(); ++z1) {
        for (std::size_t z2(0); z2 < v2.size(); ++z2) {
            for (std::size_t z3(0); z3 < v1[0].size(); ++z3) {
                for (std::size_t z4(0); z4 < v2[0].size(); ++z4) {
                    v[z1*v2.size() + z2][z3*v2[0].size() + z4] = v1[z1][z3] * v2[z2][z4];
                }
            }
        }
    }
    return v;
}

int main() {
    Matrix v1{{3, -1},{0, 5}};
    Matrix v2{{4,3,15}, {0, -5, 2}};

    Matrix v(KroneckersProduct(v1, v2));

    for (const auto& row : v) {
        for (const auto& cell : row) {
            std::cout << cell << " ";
        }
        std::cout << '\n';
    }
    return 0;
}
请向我们展示您的代码(您的问题);然后我们将能够帮助您找到其中的bug。我们不会为您编写全部内容。
12 9 45 -4 -3 -15 
0 -15 6 -0 5 -2 
0 0 0 20 15 75 
0 -0 0 0 -25 10