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 相关文章推荐
拖拉表格的JS函数
Nov 20 Javascript
DOM 脚本编程中的兄弟节点
Oct 31 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
Jan 12 Javascript
经典海量jQuery插件 大家可以收藏一下
Feb 07 Javascript
JQuery 中几个类选择器的简单使用介绍
Mar 14 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
javascript模拟map输出与去除重复项的方法
Feb 09 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
Oct 23 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
Feb 14 Javascript
JS ES6中setTimeout函数的执行上下文示例
Apr 27 Javascript
jQuery实现可编辑的表格
Dec 11 jQuery
基于vue实现简易打地鼠游戏
Aug 21 Javascript
探究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
ajax php 实现写入数据库
2009/09/02 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
javascript学习之json入门
2016/12/22 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
vue实现购物车加减
2020/05/30 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
python中__slots__用法实例
2015/06/04 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
关于Django Models CharField 参数说明
2020/03/31 Python
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
金山毒霸系列的笔试题
2013/04/13 面试题
留学自荐信
2013/10/10 职场文书
给医务人员表扬信
2014/01/12 职场文书
十岁生日同学答谢词
2014/01/19 职场文书
霸王洗发水广告词
2014/03/14 职场文书
人大调研汇报材料
2014/08/14 职场文书
委托书如何写
2014/08/30 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书