JS实现简单的二维矩阵乘积运算


Posted in Javascript onJanuary 26, 2016

本文实例讲述了JS实现简单的二维矩阵乘积运算方法。分享给大家供大家参考,具体如下:

Console控制台截图如下:

JS实现简单的二维矩阵乘积运算

(上图为输出结果直接上代码了(A矩阵可以乘以B矩阵的前提是A矩阵的列数等于B矩阵的行数)

<!DOCTYPE html>
<html>
  <head>
    <title>demo</title>
  </head>
  <body>
  </body>
  <script type="text/javascript">
    function log(msg) {
      console.log(msg);
    }
    /**
    * 可视化的打印出矩阵的数据
    */
    function printMatrixData(data) {
      console.log(data);
      if(!data) {
        return;
      }
      var numberSize = 5;
      for(var i=0, len=data.length; i<len; i++) {
        var row = data[i];
        var rowLog = "(";
        for(var j=0, jLen=row.length; j<jLen; j++) {
          rowLog += row[j];
          // 补齐空格
          rowLog += indent(numberSize - (row[j]+"").length);
        }
        rowLog+=")";
        console.log(rowLog);
      }
    }
    /**
    * 拼接指定长度的空格
    */
    function indent(length) {
      var empty = "";
      for(var i=0; i<length; i++) {
        empty += " ";
      }
      return empty;
    }
    /**
    * 矩阵原型
    */
    function Matrix(data) {
      // 这里必须传一个二维数组,最好严格检验一下
      if(typeof data !== "object" || typeof data.length === "undefined" || !data) {
        throw new Error("data's type is error");
      }
      this.data = data;
      this.cols = data.length;
    }
    var M = {
      findByLocation: function(data, xIndex, yIndex) {
        if(data && data[xIndex]) {
          return data[xIndex][yIndex];
        }
      },
      // 矩阵乘积
      multiply: function(m, n) {
        if(!m instanceof Matrix && !n instanceof Matrix) {
          throw new Error("data's type is error");
        }
        var mData = m.data;
        var nData = n.data;
        if(mData.length == 0 || nData.length == 0) {
          return 0;
        }
        if(mData[0].length != nData.length) {
          throw new Error("the two martrix data is not allowed to dot");
        }
        var result = [];
        for(var i=0, len=mData.length; i<len; i++) {
          var mRow = mData[i];
          result[i] = [];
          for(var j=0, jLen=mRow.length; j<jLen; j++) {
            var resultRowCol = 0;
            // 如果n矩阵没有足够的列数相乘,转入m矩阵下一行
            if(typeof this.findByLocation(nData, 0, j) === "undefined") {
              break;
            }
            for(var k=0, kLen=jLen; k<kLen; k++) {
              resultRowCol += mRow[k]*this.findByLocation(nData, k, j);
            }
            result[i][j] = resultRowCol;
          }
        }
        return result;
      }
    };
    var m = new Matrix([[2, -1], [-2, 1], [-1, 2]]);
    var n = new Matrix([[4, -3], [3, 5]]);
    var result = M.multiply(m, n);
    printMatrixData(result);
    var m2 = new Matrix([[2, 3, 1], [5, 2, 4], [-3, 2, 0]]);
    var n2 = new Matrix([[11], [5], [8]]);
    var result2 = M.multiply(m2, n2);
    printMatrixData(result2);
  </script>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
document.designMode的功能与使用方法介绍
Nov 22 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
Sep 03 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
Mar 10 Javascript
模拟电子签章盖章效果的jQuery插件源码
Jun 24 Javascript
JS+Canvas绘制时钟效果
Aug 20 Javascript
jQuery.Form上传文件操作
Feb 05 Javascript
微信小程序之MaterialDesign--input组件详解
Feb 15 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
Feb 08 Javascript
vue实现拖拽的简单案例 不超出可视区域
Jul 25 Javascript
微信小程序后台持续定位功能使用详解
Aug 23 Javascript
vue中的循环对象属性和属性值用法
Sep 04 Javascript
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
探究Javascript模板引擎mustache.js使用方法
Jan 26 #Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 #Javascript
一篇文章掌握RequireJS常用知识
Jan 26 #Javascript
JS正则表达式比较常见用法
Jan 26 #Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 #Javascript
JS组件中bootstrap multiselect两大组件较量
Jan 26 #Javascript
JS组件Form表单验证神器BootstrapValidator
Jan 26 #Javascript
You might like
业余方法DIY电子管FM收音机
2021/03/02 无线电
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
如何使用python传入不确定个数参数
2020/02/18 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
Keras实现DenseNet结构操作
2020/07/06 Python
python else语句在循环中的运用详解
2020/07/06 Python
python入门教程之基本算术运算符
2020/11/13 Python
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
总经理岗位职责范本
2014/02/02 职场文书
理想演讲稿范文
2014/05/21 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
优秀英文求职信范文
2015/03/19 职场文书