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 获取当前日期时间及其它操作实现代码
Mar 04 Javascript
jquery 插件学习(三)
Aug 06 Javascript
JavaScript通过RegExp实现客户端验证处理程序
May 07 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
Jan 13 Javascript
es6学习之解构时应该注意的点
Aug 29 Javascript
基于Vue制作组织架构树组件
Dec 06 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
Apr 20 Javascript
vue动态路由配置及路由传参的方式
May 23 Javascript
JavaScript函数的特性与应用实践深入详解
Dec 30 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
Mar 29 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
Mar 04 Javascript
Vue实现图书管理案例
Jan 20 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
浅析php与数据库代码开发规范
2013/08/08 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
sails框架的学习指南
2014/12/22 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
python中的reduce内建函数使用方法指南
2014/08/31 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
从Python的源码来解析Python下的freeblock
2015/05/11 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
Python面向对象程序设计示例小结
2019/01/30 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
副总经理任命书
2014/06/05 职场文书
作风年建设汇报材料
2014/08/14 职场文书
合作与交流自我评价
2015/03/09 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
入党转正介绍人意见
2015/06/03 职场文书
导游词之太原天龙山
2020/01/02 职场文书
Python中如何处理常见报错
2022/01/18 Python
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle