两矩阵相乘

 

import java.util.Scanner;

public class Exercise08_06 {
  /** Main method */
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    final int N = 3;
    
    // Enter matrix1
    System.out.print("Enter matrix1: ");
    double[][] matrix1 = new double[N][N];
    for (int i = 0; i < matrix1.length; i++)
      for (int j = 0; j < matrix1[i].length; j++) {
        matrix1[i][j] = input.nextDouble();
      }
    
    // Enter matrix2
    System.out.print("Enter matrix2: ");
    double[][] matrix2 = new double[N][N];
    for (int i = 0; i < matrix1.length; i++)
      for (int j = 0; j < matrix1[i].length; j++) {
        matrix2[i][j] = input.nextDouble();
      }

    // Multiply two matrices and print the result
    double[][] resultMatrix = multiplyMatrix(matrix1, matrix2);
    System.out.println("\nThe multiplication of the matrices is ");
    printResult(matrix1, matrix2, resultMatrix, '*');
  }

  /** The method for multiplying two matrices */
  public static double[][] multiplyMatrix(
      double[][] m1, double[][] m2) {
    double[][] result = new double[m1.length][m2[0].length];
    for (int i = 0; i < m1.length; i++)
      for (int j = 0; j < result.length; j++)
        for (int k = 0; k < result[0].length; k++)
           result[i][j] += m1[i][k] * m2[k][j];

    return result;
  }

  /** Print result */
  public static void printResult(
      double[][] m1, double[][] m2, double[][] m3, char op) {
    for (int i = 0; i < m1.length; i++) {
      for (int j = 0; j < m1[0].length; j++)
        System.out.print(" " + m1[i][j]);

      if (i == m1.length / 2)
        System.out.print( "  " + op + "  " );
      else
        System.out.print( "     " );

      for (int j = 0; j < m2[0].length; j++)
        System.out.print(" " + m2[i][j]);

      if (i == m1.length / 2)
        System.out.print( "  =  " );
      else
        System.out.print( "     " );

      for (int j = 0; j < m3[0].length; j++)
        System.out.print(" " + m3[i][j]);

      System.out.println();
    }
  }
}

 

### MATLAB 中矩阵相乘及其维度不匹配问题解析 在 MATLAB 中,矩阵之间的运算分为种主要形式:**点运算(element-wise operation)** 和 **矩阵运算(matrix operation)**。这种运算是不同的概念,因此需要注意它们的应用场景和语法区别。 #### 矩阵相乘的定义与实现 标准的矩阵乘法遵循线性代数中的规则,即如果两个矩阵分别为 \( A(m \times n) \) 和 \( B(n \times p) \),那么只有当第一个矩阵的列数等于第二个矩阵的行数时才能进行乘法操作。结果是一个新的矩阵 \( C(m \times p) \)[^1]。 在 MATLAB 中,可以使用星号 `*` 运算符完成这种矩阵乘法: ```matlab C = A * B; ``` 这里假设 \( A \) 是一个 30-by-1 的列向量,\( B \) 是一个 1-by-30 的行向量,则者可以直接相乘得到一个 30-by-30 的方阵[^2]: ```matlab A = rand(30, 1); B = rand(1, 30); C = A * B; % 结果为 30x30 方阵 ``` 然而,如果尝试用逐元素乘法符号 `.*` 将这两个矩阵相乘,则会引发维度不匹配错误,因为逐元素乘法要求两个矩阵具有相同的形状或其中一个可以被广播到另一个的形状[^3]。 #### 维度不匹配错误的原因及解决办法 当出现类似于 `'optim.internal.problemdef.ElementwiseOperator/checkIsValid'` 的错误提示时,表明当前正在尝试执行某种不符合预期的行为,比如对不同大小的数据进行了非法的操作。具体来说: - 如果是普通的矩阵乘法 (`*`) 导致报错,那可能是输入矩阵的行列关系不对齐; - 若是由逐元素运算符引起,则说明参与计算的数组未能满足逐位置对应的要求。 针对上述提到的情况——30-by-1 和 1-by-30 的矩阵之间发生冲突,可以通过以下方式解决问题: ##### 方法一:确认需求并选用合适的运算符 如果是希望按照常规意义下的矩阵乘法规则来进行操作的话,请确保采用的是单个星号 `*` 而非双星号 `.*` 。这样就可以正常得出期望的结果 —— 即由给定的一维矢量构建而成的一个二维平面内的映射表象[^4]。 ##### 方法二:调整数据结构使其适配特定算法框架 有时我们可能确实需要某些特殊类型的交互作用模式而非单纯意义上的积差表现形式;此时就需要重新审视原始资料集本身是否存在冗余或是缺失部分,并据此作出相应修改以便更好地融入既有的程序体系之中去[^5]。 例如,若原本打算让每一对来自各自方向上的独立样本都单独经历一次完整的评估过程而不是简单叠加起来形成全局概览图景的话,就应当先分别提取出这些个体实例再逐一送入指定函数内部加以处置直至全部结束为止。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值